flipper-ui 0.12.2 → 0.13.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/docs/ui/README.md +21 -3
  3. data/docs/ui/images/configured-ui.png +0 -0
  4. data/docs/ui/images/environment-banner.png +0 -0
  5. data/docs/ui/images/feature.png +0 -0
  6. data/docs/ui/images/features.png +0 -0
  7. data/lib/flipper/ui/assets/javascripts/application.coffee +3 -0
  8. data/lib/flipper/ui/assets/stylesheets/.DS_Store +0 -0
  9. data/lib/flipper/ui/assets/stylesheets/application.scss +9 -48
  10. data/lib/flipper/ui/assets/stylesheets/bootstrap/_alert.scss +51 -0
  11. data/lib/flipper/ui/assets/stylesheets/bootstrap/_badge.scss +47 -0
  12. data/lib/flipper/ui/assets/stylesheets/bootstrap/_breadcrumb.scss +38 -0
  13. data/lib/flipper/ui/assets/stylesheets/bootstrap/_button-group.scss +166 -0
  14. data/lib/flipper/ui/assets/stylesheets/bootstrap/_buttons.scss +78 -95
  15. data/lib/flipper/ui/assets/stylesheets/bootstrap/_card.scss +270 -0
  16. data/lib/flipper/ui/assets/stylesheets/bootstrap/_carousel.scss +122 -200
  17. data/lib/flipper/ui/assets/stylesheets/bootstrap/_close.scss +12 -14
  18. data/lib/flipper/ui/assets/stylesheets/bootstrap/_code.scss +15 -28
  19. data/lib/flipper/ui/assets/stylesheets/bootstrap/_custom-forms.scss +297 -0
  20. data/lib/flipper/ui/assets/stylesheets/bootstrap/_dropdown.scss +131 -0
  21. data/lib/flipper/ui/assets/stylesheets/bootstrap/_forms.scss +210 -455
  22. data/lib/flipper/ui/assets/stylesheets/bootstrap/_functions.scss +86 -0
  23. data/lib/flipper/ui/assets/stylesheets/bootstrap/_grid.scss +29 -61
  24. data/lib/flipper/ui/assets/stylesheets/bootstrap/_images.scss +42 -0
  25. data/lib/flipper/ui/assets/stylesheets/bootstrap/_input-group.scss +159 -0
  26. data/lib/flipper/ui/assets/stylesheets/bootstrap/_jumbotron.scss +8 -42
  27. data/lib/flipper/ui/assets/stylesheets/bootstrap/_list-group.scss +64 -73
  28. data/lib/flipper/ui/assets/stylesheets/bootstrap/_media.scss +3 -56
  29. data/lib/flipper/ui/assets/stylesheets/bootstrap/_mixins.scss +21 -18
  30. data/lib/flipper/ui/assets/stylesheets/bootstrap/_modal.scss +168 -0
  31. data/lib/flipper/ui/assets/stylesheets/bootstrap/_nav.scss +118 -0
  32. data/lib/flipper/ui/assets/stylesheets/bootstrap/_navbar.scss +203 -554
  33. data/lib/flipper/ui/assets/stylesheets/bootstrap/_pagination.scss +58 -69
  34. data/lib/flipper/ui/assets/stylesheets/bootstrap/_popover.scss +183 -0
  35. data/lib/flipper/ui/assets/stylesheets/bootstrap/_print.scss +71 -54
  36. data/lib/flipper/ui/assets/stylesheets/bootstrap/_progress.scss +33 -0
  37. data/lib/flipper/ui/assets/stylesheets/bootstrap/_reboot.scss +482 -0
  38. data/lib/flipper/ui/assets/stylesheets/bootstrap/_root.scss +19 -0
  39. data/lib/flipper/ui/assets/stylesheets/bootstrap/_tables.scss +109 -163
  40. data/lib/flipper/ui/assets/stylesheets/bootstrap/_tooltip.scss +97 -84
  41. data/lib/flipper/ui/assets/stylesheets/bootstrap/_transitions.scss +36 -0
  42. data/lib/flipper/ui/assets/stylesheets/bootstrap/_type.scss +66 -239
  43. data/lib/flipper/ui/assets/stylesheets/bootstrap/_utilities.scss +14 -55
  44. data/lib/flipper/ui/assets/stylesheets/bootstrap/_variables.scss +726 -698
  45. data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap-grid.scss +32 -0
  46. data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap-reboot.scss +12 -0
  47. data/lib/flipper/ui/assets/stylesheets/bootstrap/bootstrap.scss +42 -0
  48. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_alert.scss +13 -0
  49. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_background-variant.scss +14 -4
  50. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_badge.scss +12 -0
  51. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_border-radius.scss +25 -8
  52. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +5 -0
  53. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +123 -0
  54. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_buttons.scss +89 -32
  55. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_caret.scss +65 -0
  56. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_clearfix.scss +3 -18
  57. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_float.scss +11 -0
  58. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_forms.scss +115 -66
  59. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_gradients.scss +14 -27
  60. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +52 -66
  61. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_grid.scss +37 -107
  62. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_hover.scss +39 -0
  63. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_image.scss +18 -15
  64. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_list-group.scss +10 -20
  65. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_lists.scss +7 -0
  66. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +3 -3
  67. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +10 -0
  68. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_pagination.scss +10 -11
  69. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_reset-text.scss +17 -0
  70. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_resize.scss +1 -1
  71. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +35 -0
  72. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_size.scss +1 -5
  73. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_table-row.scss +16 -14
  74. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +7 -4
  75. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_text-hide.scss +9 -0
  76. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/{_text-overflow.scss → _text-truncate.scss} +2 -2
  77. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_transition.scss +9 -0
  78. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_visibility.scss +7 -0
  79. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_align.scss +8 -0
  80. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_background.scss +19 -0
  81. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_borders.scss +59 -0
  82. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_clearfix.scss +3 -0
  83. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_display.scss +38 -0
  84. data/lib/flipper/ui/assets/stylesheets/bootstrap/{_responsive-embed.scss → utilities/_embed.scss} +26 -9
  85. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_flex.scss +46 -0
  86. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_float.scss +9 -0
  87. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_position.scss +36 -0
  88. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +11 -0
  89. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_sizing.scss +12 -0
  90. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_spacing.scss +51 -0
  91. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_text.scss +52 -0
  92. data/lib/flipper/ui/assets/stylesheets/bootstrap/utilities/_visibility.scss +11 -0
  93. data/lib/flipper/ui/configuration.rb +24 -0
  94. data/lib/flipper/ui/decorators/feature.rb +3 -3
  95. data/lib/flipper/ui/public/css/application.css +6237 -2339
  96. data/lib/flipper/ui/public/js/application.js +3 -2
  97. data/lib/flipper/ui/views/add_actor.erb +7 -9
  98. data/lib/flipper/ui/views/add_feature.erb +8 -10
  99. data/lib/flipper/ui/views/add_group.erb +7 -9
  100. data/lib/flipper/ui/views/feature.erb +181 -141
  101. data/lib/flipper/ui/views/feature_creation_disabled.erb +1 -1
  102. data/lib/flipper/ui/views/feature_removal_disabled.erb +1 -1
  103. data/lib/flipper/ui/views/features.erb +12 -15
  104. data/lib/flipper/ui/views/layout.erb +25 -15
  105. data/lib/flipper/version.rb +1 -1
  106. data/spec/flipper/ui/actions/actors_gate_spec.rb +2 -1
  107. data/spec/flipper/ui/actions/add_feature_spec.rb +2 -1
  108. data/spec/flipper/ui/actions/groups_gate_spec.rb +2 -1
  109. data/spec/flipper/ui/configuration_spec.rb +27 -0
  110. data/spec/flipper/ui_spec.rb +24 -0
  111. metadata +58 -64
  112. data/lib/flipper/ui/assets/stylesheets/_bootstrap-compass.scss +0 -9
  113. data/lib/flipper/ui/assets/stylesheets/_bootstrap-mincer.scss +0 -19
  114. data/lib/flipper/ui/assets/stylesheets/_bootstrap-sprockets.scss +0 -9
  115. data/lib/flipper/ui/assets/stylesheets/_bootstrap.scss +0 -50
  116. data/lib/flipper/ui/assets/stylesheets/bootstrap/_alerts.scss +0 -73
  117. data/lib/flipper/ui/assets/stylesheets/bootstrap/_badges.scss +0 -68
  118. data/lib/flipper/ui/assets/stylesheets/bootstrap/_breadcrumbs.scss +0 -26
  119. data/lib/flipper/ui/assets/stylesheets/bootstrap/_button-groups.scss +0 -243
  120. data/lib/flipper/ui/assets/stylesheets/bootstrap/_component-animations.scss +0 -37
  121. data/lib/flipper/ui/assets/stylesheets/bootstrap/_dropdowns.scss +0 -214
  122. data/lib/flipper/ui/assets/stylesheets/bootstrap/_glyphicons.scss +0 -305
  123. data/lib/flipper/ui/assets/stylesheets/bootstrap/_input-groups.scss +0 -166
  124. data/lib/flipper/ui/assets/stylesheets/bootstrap/_labels.scss +0 -66
  125. data/lib/flipper/ui/assets/stylesheets/bootstrap/_modals.scss +0 -150
  126. data/lib/flipper/ui/assets/stylesheets/bootstrap/_navs.scss +0 -242
  127. data/lib/flipper/ui/assets/stylesheets/bootstrap/_normalize.scss +0 -427
  128. data/lib/flipper/ui/assets/stylesheets/bootstrap/_pager.scss +0 -54
  129. data/lib/flipper/ui/assets/stylesheets/bootstrap/_panels.scss +0 -265
  130. data/lib/flipper/ui/assets/stylesheets/bootstrap/_popovers.scss +0 -135
  131. data/lib/flipper/ui/assets/stylesheets/bootstrap/_progress-bars.scss +0 -87
  132. data/lib/flipper/ui/assets/stylesheets/bootstrap/_responsive-utilities.scss +0 -177
  133. data/lib/flipper/ui/assets/stylesheets/bootstrap/_scaffolding.scss +0 -162
  134. data/lib/flipper/ui/assets/stylesheets/bootstrap/_theme.scss +0 -273
  135. data/lib/flipper/ui/assets/stylesheets/bootstrap/_thumbnails.scss +0 -38
  136. data/lib/flipper/ui/assets/stylesheets/bootstrap/_wells.scss +0 -29
  137. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_alerts.scss +0 -14
  138. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_center-block.scss +0 -7
  139. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_hide-text.scss +0 -21
  140. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_labels.scss +0 -12
  141. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +0 -9
  142. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_opacity.scss +0 -8
  143. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_panels.scss +0 -24
  144. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +0 -10
  145. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +0 -8
  146. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +0 -21
  147. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +0 -9
  148. data/lib/flipper/ui/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +0 -222
  149. data/lib/flipper/ui/public/css/primer.css +0 -1
  150. data/lib/flipper/ui/public/css/primer/primer.css +0 -1933
  151. data/lib/flipper/ui/public/css/scss/primer.css +0 -1933
  152. data/lib/flipper/ui/public/js/bootstrap-sprockets.js +0 -12
  153. data/lib/flipper/ui/public/js/bootstrap.js +0 -2317
  154. data/lib/flipper/ui/public/js/bootstrap.min.js +0 -7
  155. data/lib/flipper/ui/public/js/bootstrap/affix.js +0 -162
  156. data/lib/flipper/ui/public/js/bootstrap/alert.js +0 -94
  157. data/lib/flipper/ui/public/js/bootstrap/button.js +0 -116
  158. data/lib/flipper/ui/public/js/bootstrap/carousel.js +0 -237
  159. data/lib/flipper/ui/public/js/bootstrap/collapse.js +0 -211
  160. data/lib/flipper/ui/public/js/bootstrap/dropdown.js +0 -161
  161. data/lib/flipper/ui/public/js/bootstrap/modal.js +0 -339
  162. data/lib/flipper/ui/public/js/bootstrap/popover.js +0 -108
  163. data/lib/flipper/ui/public/js/bootstrap/scrollspy.js +0 -172
  164. data/lib/flipper/ui/public/js/bootstrap/tab.js +0 -153
  165. data/lib/flipper/ui/public/js/bootstrap/tooltip.js +0 -476
  166. data/lib/flipper/ui/public/js/bootstrap/transition.js +0 -59
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 713aed3fc51f29f77c6e0e618aca6e8fa3014f7c
4
- data.tar.gz: 96bd90daecb30083a8e4c12b23de5b60b8e16ead
3
+ metadata.gz: 7b122e19a3a0cb52dd2c5b9ea28c5c10680db45c
4
+ data.tar.gz: 916b4f2b64cc84e6cbdaa6277d2593131f28a57b
5
5
  SHA512:
6
- metadata.gz: 947f188c57116cbb314daf4964d5f2ba966a4141d1f7cb7a85f4bcc4f302a9ae1f502caa2f6908a5c5172ba7be868e787f614ceff380a6de1ea059772d5492e9
7
- data.tar.gz: 20a786dfb7ad1e8d32e3c71f11a45e81d68da0dbc5e85947e1ea6e291d1dbc38e31740f68163c7997a4eb1fbbd225547eaa7307efe77b5f6ad052edd9070d000
6
+ metadata.gz: 8e491c3584d180f78d00a87b7e921f86c5d6654e7f5db6b3e344dcad229f5308ee4a54cacc1db2bbaed696e22117c3ad2d0b875d8252600019e46927a42d7a1d
7
+ data.tar.gz: ddac6f106ed0ef92ca9145c2a8d54498e598f713b5e72f0de7a5ab8103cdfaca488577160ba2bcc1453d904788f41ce376b7ca9f27550693088fa32639d5d404
data/docs/ui/README.md CHANGED
@@ -152,12 +152,30 @@ results in:
152
152
 
153
153
  ![configure](images/configured-ui.png)
154
154
 
155
+ ### Banner
156
+
157
+ Flipper UI can display a banner across the top of the page. The `banner_text` and `banner_class` can be configured by using the `Flipper::UI.configure` block as seen below.
158
+
159
+ ```ruby
160
+ Flipper::UI.configure do |config|
161
+ config.banner_text = 'Production Environment'
162
+ config.banner_class = 'danger'
163
+ end
164
+ ```
165
+
166
+ By default the `environment` is set to an empty string so no banner will show. If you wish to customize the look of the banner, you can set `banner_class` to one of the bootstrap color classes: `primary`, `secondary`, `success`, `danger`, `warning`, `info`, `light`, or `dark`. The default `banner_class` is `danger`.
167
+
168
+ The above configuration results in:
169
+
170
+ ![configure](images/environment-banner.png)
171
+
155
172
  ## Contributing
156
173
 
157
174
  1. Fork it
158
175
  2. Create your feature branch (`git checkout -b my-new-feature`)
159
176
  3. **Fire up the app** (`script/server`)
160
177
  4. **Start up guard** (`bundle exec guard` for automatic coffeescript/sass compilation and such).
161
- 5. Commit your changes (`git commit -am 'Added some feature'`)
162
- 6. Push to the branch (`git push origin my-new-feature`)
163
- 7. Create new Pull Request
178
+ 5. Run the tests `bundle exec rake`
179
+ 6. Commit your changes (`git commit -am 'Added some feature'`)
180
+ 7. Push to the branch (`git push origin my-new-feature`)
181
+ 8. Create new Pull Request
Binary file
Binary file
Binary file
@@ -0,0 +1,3 @@
1
+ $(() ->
2
+ $('[data-toggle="tooltip"]').tooltip();
3
+ );
@@ -1,58 +1,19 @@
1
+ html {
2
+ font-size: 0.8rem;
3
+ }
1
4
  body {
2
- padding-top: 20px;
5
+ padding-top: 1.5em;
6
+ padding-bottom: 1.5em;
3
7
  }
4
8
 
5
- @import "primer/primer";
6
-
7
- @import "bootstrap/variables";
8
- @import "bootstrap/mixins";
9
- @import "bootstrap/tables";
10
- @import "bootstrap/panels";
11
- @import "bootstrap/list-group";
12
- @import "bootstrap/breadcrumbs";
9
+ $light: #ddd;
10
+ @import "bootstrap/bootstrap";
13
11
 
14
12
  .flash {
15
13
  margin-bottom:15px;
16
14
  }
17
15
 
18
- .panel-heading .btn.btn-sm.right,
19
- .panel-heading form.right {
20
- margin-top:-5px;
21
- }
22
- .panel-heading p.right {
23
- margin-top:0;
24
- }
25
- .panel-heading form.right input[type=text],
26
- .panel-heading form.right select {
27
- width:150px;
28
- }
29
-
30
- .panel-body :first-child {
31
- margin-top:0;
32
- }
33
-
34
- .button-inv {
35
- background:none;
36
- border:0;
16
+ .row + .row {
17
+ margin-top: 1.5em;
37
18
  }
38
19
 
39
- .breadcrumb {
40
- background-color: #fff;
41
- border: 1px solid #ddd;
42
- }
43
-
44
- .header .btn.right {
45
- margin-top:5px;
46
- margin-right:15px;
47
- }
48
-
49
- .feature-state {
50
- width:40px;
51
- }
52
- .feature-enabled-gates {
53
- width:380px;
54
- }
55
-
56
- p.help {
57
- color: #999;
58
- }
@@ -0,0 +1,51 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ .alert {
6
+ position: relative;
7
+ padding: $alert-padding-y $alert-padding-x;
8
+ margin-bottom: $alert-margin-bottom;
9
+ border: $alert-border-width solid transparent;
10
+ @include border-radius($alert-border-radius);
11
+ }
12
+
13
+ // Headings for larger alerts
14
+ .alert-heading {
15
+ // Specified to prevent conflicts of changing $headings-color
16
+ color: inherit;
17
+ }
18
+
19
+ // Provide class for links that match alerts
20
+ .alert-link {
21
+ font-weight: $alert-link-font-weight;
22
+ }
23
+
24
+
25
+ // Dismissible alerts
26
+ //
27
+ // Expand the right padding and account for the close button's positioning.
28
+
29
+ .alert-dismissible {
30
+ padding-right: ($close-font-size + $alert-padding-x * 2);
31
+
32
+ // Adjust close link position
33
+ .close {
34
+ position: absolute;
35
+ top: 0;
36
+ right: 0;
37
+ padding: $alert-padding-y $alert-padding-x;
38
+ color: inherit;
39
+ }
40
+ }
41
+
42
+
43
+ // Alternate styles
44
+ //
45
+ // Generate contextual modifier classes for colorizing the alert.
46
+
47
+ @each $color, $value in $theme-colors {
48
+ .alert-#{$color} {
49
+ @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level));
50
+ }
51
+ }
@@ -0,0 +1,47 @@
1
+ // Base class
2
+ //
3
+ // Requires one of the contextual, color modifier classes for `color` and
4
+ // `background-color`.
5
+
6
+ .badge {
7
+ display: inline-block;
8
+ padding: $badge-padding-y $badge-padding-x;
9
+ font-size: $badge-font-size;
10
+ font-weight: $badge-font-weight;
11
+ line-height: 1;
12
+ text-align: center;
13
+ white-space: nowrap;
14
+ vertical-align: baseline;
15
+ @include border-radius($badge-border-radius);
16
+
17
+ // Empty badges collapse automatically
18
+ &:empty {
19
+ display: none;
20
+ }
21
+ }
22
+
23
+ // Quick fix for badges in buttons
24
+ .btn .badge {
25
+ position: relative;
26
+ top: -1px;
27
+ }
28
+
29
+ // Pill badges
30
+ //
31
+ // Make them extra rounded with a modifier to replace v3's badges.
32
+
33
+ .badge-pill {
34
+ padding-right: $badge-pill-padding-x;
35
+ padding-left: $badge-pill-padding-x;
36
+ @include border-radius($badge-pill-border-radius);
37
+ }
38
+
39
+ // Colors
40
+ //
41
+ // Contextual variations (linked badges get darker on :hover).
42
+
43
+ @each $color, $value in $theme-colors {
44
+ .badge-#{$color} {
45
+ @include badge-variant($value);
46
+ }
47
+ }
@@ -0,0 +1,38 @@
1
+ .breadcrumb {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ padding: $breadcrumb-padding-y $breadcrumb-padding-x;
5
+ margin-bottom: $breadcrumb-margin-bottom;
6
+ list-style: none;
7
+ background-color: $breadcrumb-bg;
8
+ @include border-radius($border-radius);
9
+ }
10
+
11
+ .breadcrumb-item {
12
+ // The separator between breadcrumbs (by default, a forward-slash: "/")
13
+ + .breadcrumb-item::before {
14
+ display: inline-block; // Suppress underlining of the separator in modern browsers
15
+ padding-right: $breadcrumb-item-padding;
16
+ padding-left: $breadcrumb-item-padding;
17
+ color: $breadcrumb-divider-color;
18
+ content: "#{$breadcrumb-divider}";
19
+ }
20
+
21
+ // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
22
+ // without `<ul>`s. The `::before` pseudo-element generates an element
23
+ // *within* the .breadcrumb-item and thereby inherits the `text-decoration`.
24
+ //
25
+ // To trick IE into suppressing the underline, we give the pseudo-element an
26
+ // underline and then immediately remove it.
27
+ + .breadcrumb-item:hover::before {
28
+ text-decoration: underline;
29
+ }
30
+ // stylelint-disable-next-line no-duplicate-selectors
31
+ + .breadcrumb-item:hover::before {
32
+ text-decoration: none;
33
+ }
34
+
35
+ &.active {
36
+ color: $breadcrumb-active-color;
37
+ }
38
+ }
@@ -0,0 +1,166 @@
1
+ // stylelint-disable selector-no-qualifying-type
2
+
3
+ // Make the div behave like a button
4
+ .btn-group,
5
+ .btn-group-vertical {
6
+ position: relative;
7
+ display: inline-flex;
8
+ vertical-align: middle; // match .btn alignment given font-size hack above
9
+
10
+ > .btn {
11
+ position: relative;
12
+ flex: 0 1 auto;
13
+
14
+ // Bring the hover, focused, and "active" buttons to the front to overlay
15
+ // the borders properly
16
+ @include hover {
17
+ z-index: 1;
18
+ }
19
+ &:focus,
20
+ &:active,
21
+ &.active {
22
+ z-index: 1;
23
+ }
24
+ }
25
+
26
+ // Prevent double borders when buttons are next to each other
27
+ .btn + .btn,
28
+ .btn + .btn-group,
29
+ .btn-group + .btn,
30
+ .btn-group + .btn-group {
31
+ margin-left: -$btn-border-width;
32
+ }
33
+ }
34
+
35
+ // Optional: Group multiple button groups together for a toolbar
36
+ .btn-toolbar {
37
+ display: flex;
38
+ flex-wrap: wrap;
39
+ justify-content: flex-start;
40
+
41
+ .input-group {
42
+ width: auto;
43
+ }
44
+ }
45
+
46
+ .btn-group {
47
+ > .btn:first-child {
48
+ margin-left: 0;
49
+ }
50
+
51
+ // Reset rounded corners
52
+ > .btn:not(:last-child):not(.dropdown-toggle),
53
+ > .btn-group:not(:last-child) > .btn {
54
+ @include border-right-radius(0);
55
+ }
56
+
57
+ > .btn:not(:first-child),
58
+ > .btn-group:not(:first-child) > .btn {
59
+ @include border-left-radius(0);
60
+ }
61
+ }
62
+
63
+ // Sizing
64
+ //
65
+ // Remix the default button sizing classes into new ones for easier manipulation.
66
+
67
+ .btn-group-sm > .btn { @extend .btn-sm; }
68
+ .btn-group-lg > .btn { @extend .btn-lg; }
69
+
70
+
71
+ //
72
+ // Split button dropdowns
73
+ //
74
+
75
+ .dropdown-toggle-split {
76
+ padding-right: $btn-padding-x * .75;
77
+ padding-left: $btn-padding-x * .75;
78
+
79
+ &::after {
80
+ margin-left: 0;
81
+ }
82
+ }
83
+
84
+ .btn-sm + .dropdown-toggle-split {
85
+ padding-right: $btn-padding-x-sm * .75;
86
+ padding-left: $btn-padding-x-sm * .75;
87
+ }
88
+
89
+ .btn-lg + .dropdown-toggle-split {
90
+ padding-right: $btn-padding-x-lg * .75;
91
+ padding-left: $btn-padding-x-lg * .75;
92
+ }
93
+
94
+
95
+ // The clickable button for toggling the menu
96
+ // Set the same inset shadow as the :active state
97
+ .btn-group.show .dropdown-toggle {
98
+ @include box-shadow($btn-active-box-shadow);
99
+
100
+ // Show no shadow for `.btn-link` since it has no other button styles.
101
+ &.btn-link {
102
+ @include box-shadow(none);
103
+ }
104
+ }
105
+
106
+
107
+ //
108
+ // Vertical button groups
109
+ //
110
+
111
+ .btn-group-vertical {
112
+ flex-direction: column;
113
+ align-items: flex-start;
114
+ justify-content: center;
115
+
116
+ .btn,
117
+ .btn-group {
118
+ width: 100%;
119
+ }
120
+
121
+ > .btn + .btn,
122
+ > .btn + .btn-group,
123
+ > .btn-group + .btn,
124
+ > .btn-group + .btn-group {
125
+ margin-top: -$btn-border-width;
126
+ margin-left: 0;
127
+ }
128
+
129
+ // Reset rounded corners
130
+ > .btn:not(:last-child):not(.dropdown-toggle),
131
+ > .btn-group:not(:last-child) > .btn {
132
+ @include border-bottom-radius(0);
133
+ }
134
+
135
+ > .btn:not(:first-child),
136
+ > .btn-group:not(:first-child) > .btn {
137
+ @include border-top-radius(0);
138
+ }
139
+ }
140
+
141
+
142
+ // Checkbox and radio options
143
+ //
144
+ // In order to support the browser's form validation feedback, powered by the
145
+ // `required` attribute, we have to "hide" the inputs via `clip`. We cannot use
146
+ // `display: none;` or `visibility: hidden;` as that also hides the popover.
147
+ // Simply visually hiding the inputs via `opacity` would leave them clickable in
148
+ // certain cases which is prevented by using `clip` and `pointer-events`.
149
+ // This way, we ensure a DOM element is visible to position the popover from.
150
+ //
151
+ // See https://github.com/twbs/bootstrap/pull/12794 and
152
+ // https://github.com/twbs/bootstrap/pull/14559 for more information.
153
+
154
+ .btn-group-toggle {
155
+ > .btn,
156
+ > .btn-group > .btn {
157
+ margin-bottom: 0; // Override default `<label>` value
158
+
159
+ input[type="radio"],
160
+ input[type="checkbox"] {
161
+ position: absolute;
162
+ clip: rect(0, 0, 0, 0);
163
+ pointer-events: none;
164
+ }
165
+ }
166
+ }
@@ -1,153 +1,136 @@
1
- //
2
- // Buttons
3
- // --------------------------------------------------
4
-
1
+ // stylelint-disable selector-no-qualifying-type
5
2
 
3
+ //
6
4
  // Base styles
7
- // --------------------------------------------------
5
+ //
8
6
 
9
7
  .btn {
10
8
  display: inline-block;
11
- margin-bottom: 0; // For input.btn
12
9
  font-weight: $btn-font-weight;
13
10
  text-align: center;
14
- vertical-align: middle;
15
- touch-action: manipulation;
16
- cursor: pointer;
17
- background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
18
- border: 1px solid transparent;
19
11
  white-space: nowrap;
20
- @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $border-radius-base);
21
- @include user-select(none);
22
-
23
- &,
24
- &:active,
25
- &.active {
26
- &:focus,
27
- &.focus {
28
- @include tab-focus;
29
- }
30
- }
12
+ vertical-align: middle;
13
+ user-select: none;
14
+ border: $btn-border-width solid transparent;
15
+ @include button-size($btn-padding-y, $btn-padding-x, $font-size-base, $btn-line-height, $btn-border-radius);
16
+ @include transition($btn-transition);
31
17
 
32
- &:hover,
33
- &:focus,
34
- &.focus {
35
- color: $btn-default-color;
18
+ // Share hover and focus styles
19
+ @include hover-focus {
36
20
  text-decoration: none;
37
21
  }
38
22
 
39
- &:active,
40
- &.active {
23
+ &:focus,
24
+ &.focus {
41
25
  outline: 0;
42
- background-image: none;
43
- @include box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
26
+ box-shadow: $btn-focus-box-shadow;
44
27
  }
45
28
 
29
+ // Disabled comes first so active can properly restyle
46
30
  &.disabled,
47
- &[disabled],
48
- fieldset[disabled] & {
49
- cursor: $cursor-disabled;
50
- pointer-events: none; // Future-proof disabling of clicks
51
- @include opacity(.65);
31
+ &:disabled {
32
+ opacity: $btn-disabled-opacity;
52
33
  @include box-shadow(none);
53
34
  }
54
- }
55
35
 
36
+ // Opinionated: add "hand" cursor to non-disabled .btn elements
37
+ &:not(:disabled):not(.disabled) {
38
+ cursor: pointer;
39
+ }
56
40
 
57
- // Alternate buttons
58
- // --------------------------------------------------
41
+ &:not(:disabled):not(.disabled):active,
42
+ &:not(:disabled):not(.disabled).active {
43
+ background-image: none;
44
+ @include box-shadow($btn-active-box-shadow);
59
45
 
60
- .btn-default {
61
- @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border);
62
- }
63
- .btn-primary {
64
- @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border);
65
- }
66
- // Success appears as green
67
- .btn-success {
68
- @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border);
46
+ &:focus {
47
+ @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
48
+ }
49
+ }
69
50
  }
70
- // Info appears as blue-green
71
- .btn-info {
72
- @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border);
51
+
52
+ // Future-proof disabling of clicks on `<a>` elements
53
+ a.btn.disabled,
54
+ fieldset:disabled a.btn {
55
+ pointer-events: none;
73
56
  }
74
- // Warning appears as orange
75
- .btn-warning {
76
- @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border);
57
+
58
+
59
+ //
60
+ // Alternate buttons
61
+ //
62
+
63
+ @each $color, $value in $theme-colors {
64
+ .btn-#{$color} {
65
+ @include button-variant($value, $value);
66
+ }
77
67
  }
78
- // Danger and error appear as red
79
- .btn-danger {
80
- @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border);
68
+
69
+ @each $color, $value in $theme-colors {
70
+ .btn-outline-#{$color} {
71
+ @include button-outline-variant($value);
72
+ }
81
73
  }
82
74
 
83
75
 
76
+ //
84
77
  // Link buttons
85
- // -------------------------
78
+ //
86
79
 
87
80
  // Make a button look and behave like a link
88
81
  .btn-link {
82
+ font-weight: $font-weight-normal;
89
83
  color: $link-color;
90
- font-weight: normal;
91
- border-radius: 0;
92
-
93
- &,
94
- &:active,
95
- &.active,
96
- &[disabled],
97
- fieldset[disabled] & {
84
+ background-color: transparent;
85
+
86
+ @include hover {
87
+ color: $link-hover-color;
88
+ text-decoration: $link-hover-decoration;
98
89
  background-color: transparent;
99
- @include box-shadow(none);
100
- }
101
- &,
102
- &:hover,
103
- &:focus,
104
- &:active {
105
90
  border-color: transparent;
106
91
  }
107
- &:hover,
108
- &:focus {
109
- color: $link-hover-color;
92
+
93
+ &:focus,
94
+ &.focus {
110
95
  text-decoration: $link-hover-decoration;
111
- background-color: transparent;
96
+ border-color: transparent;
97
+ box-shadow: none;
112
98
  }
113
- &[disabled],
114
- fieldset[disabled] & {
115
- &:hover,
116
- &:focus {
117
- color: $btn-link-disabled-color;
118
- text-decoration: none;
119
- }
99
+
100
+ &:disabled,
101
+ &.disabled {
102
+ color: $btn-link-disabled-color;
120
103
  }
104
+
105
+ // No need for an active state here
121
106
  }
122
107
 
123
108
 
109
+ //
124
110
  // Button Sizes
125
- // --------------------------------------------------
111
+ //
126
112
 
127
113
  .btn-lg {
128
- // line-height: ensure even-numbered height of button next to large input
129
- @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $border-radius-large);
114
+ @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $font-size-lg, $btn-line-height-lg, $btn-border-radius-lg);
130
115
  }
116
+
131
117
  .btn-sm {
132
- // line-height: ensure proper height of button next to small input
133
- @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $border-radius-small);
134
- }
135
- .btn-xs {
136
- @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $border-radius-small);
118
+ @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $font-size-sm, $btn-line-height-sm, $btn-border-radius-sm);
137
119
  }
138
120
 
139
121
 
122
+ //
140
123
  // Block button
141
- // --------------------------------------------------
124
+ //
142
125
 
143
126
  .btn-block {
144
127
  display: block;
145
128
  width: 100%;
146
- }
147
129
 
148
- // Vertically space out multiple block buttons
149
- .btn-block + .btn-block {
150
- margin-top: 5px;
130
+ // Vertically space out multiple block buttons
131
+ + .btn-block {
132
+ margin-top: $btn-block-spacing-y;
133
+ }
151
134
  }
152
135
 
153
136
  // Specificity overrides