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
@@ -0,0 +1,270 @@
1
+ //
2
+ // Base styles
3
+ //
4
+
5
+ .card {
6
+ position: relative;
7
+ display: flex;
8
+ flex-direction: column;
9
+ min-width: 0;
10
+ word-wrap: break-word;
11
+ background-color: $card-bg;
12
+ background-clip: border-box;
13
+ border: $card-border-width solid $card-border-color;
14
+ @include border-radius($card-border-radius);
15
+
16
+ > hr {
17
+ margin-right: 0;
18
+ margin-left: 0;
19
+ }
20
+
21
+ > .list-group:first-child {
22
+ .list-group-item:first-child {
23
+ @include border-top-radius($card-border-radius);
24
+ }
25
+ }
26
+
27
+ > .list-group:last-child {
28
+ .list-group-item:last-child {
29
+ @include border-bottom-radius($card-border-radius);
30
+ }
31
+ }
32
+ }
33
+
34
+ .card-body {
35
+ // Enable `flex-grow: 1` for decks and groups so that card blocks take up
36
+ // as much space as possible, ensuring footers are aligned to the bottom.
37
+ flex: 1 1 auto;
38
+ padding: $card-spacer-x;
39
+ }
40
+
41
+ .card-title {
42
+ margin-bottom: $card-spacer-y;
43
+ }
44
+
45
+ .card-subtitle {
46
+ margin-top: -($card-spacer-y / 2);
47
+ margin-bottom: 0;
48
+ }
49
+
50
+ .card-text:last-child {
51
+ margin-bottom: 0;
52
+ }
53
+
54
+ .card-link {
55
+ @include hover {
56
+ text-decoration: none;
57
+ }
58
+
59
+ + .card-link {
60
+ margin-left: $card-spacer-x;
61
+ }
62
+ }
63
+
64
+ //
65
+ // Optional textual caps
66
+ //
67
+
68
+ .card-header {
69
+ padding: $card-spacer-y $card-spacer-x;
70
+ margin-bottom: 0; // Removes the default margin-bottom of <hN>
71
+ background-color: $card-cap-bg;
72
+ border-bottom: $card-border-width solid $card-border-color;
73
+
74
+ &:first-child {
75
+ @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
76
+ }
77
+
78
+ + .list-group {
79
+ .list-group-item:first-child {
80
+ border-top: 0;
81
+ }
82
+ }
83
+ }
84
+
85
+ .card-footer {
86
+ padding: $card-spacer-y $card-spacer-x;
87
+ background-color: $card-cap-bg;
88
+ border-top: $card-border-width solid $card-border-color;
89
+
90
+ &:last-child {
91
+ @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius);
92
+ }
93
+ }
94
+
95
+
96
+ //
97
+ // Header navs
98
+ //
99
+
100
+ .card-header-tabs {
101
+ margin-right: -($card-spacer-x / 2);
102
+ margin-bottom: -$card-spacer-y;
103
+ margin-left: -($card-spacer-x / 2);
104
+ border-bottom: 0;
105
+ }
106
+
107
+ .card-header-pills {
108
+ margin-right: -($card-spacer-x / 2);
109
+ margin-left: -($card-spacer-x / 2);
110
+ }
111
+
112
+ // Card image
113
+ .card-img-overlay {
114
+ position: absolute;
115
+ top: 0;
116
+ right: 0;
117
+ bottom: 0;
118
+ left: 0;
119
+ padding: $card-img-overlay-padding;
120
+ }
121
+
122
+ .card-img {
123
+ width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
124
+ @include border-radius($card-inner-border-radius);
125
+ }
126
+
127
+ // Card image caps
128
+ .card-img-top {
129
+ width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
130
+ @include border-top-radius($card-inner-border-radius);
131
+ }
132
+
133
+ .card-img-bottom {
134
+ width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch
135
+ @include border-bottom-radius($card-inner-border-radius);
136
+ }
137
+
138
+
139
+ // Card deck
140
+
141
+ .card-deck {
142
+ display: flex;
143
+ flex-direction: column;
144
+
145
+ .card {
146
+ margin-bottom: $card-deck-margin;
147
+ }
148
+
149
+ @include media-breakpoint-up(sm) {
150
+ flex-flow: row wrap;
151
+ margin-right: -$card-deck-margin;
152
+ margin-left: -$card-deck-margin;
153
+
154
+ .card {
155
+ display: flex;
156
+ // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored
157
+ flex: 1 0 0%;
158
+ flex-direction: column;
159
+ margin-right: $card-deck-margin;
160
+ margin-bottom: 0; // Override the default
161
+ margin-left: $card-deck-margin;
162
+ }
163
+ }
164
+ }
165
+
166
+
167
+ //
168
+ // Card groups
169
+ //
170
+
171
+ .card-group {
172
+ display: flex;
173
+ flex-direction: column;
174
+
175
+ // The child selector allows nested `.card` within `.card-group`
176
+ // to display properly.
177
+ > .card {
178
+ margin-bottom: $card-group-margin;
179
+ }
180
+
181
+ @include media-breakpoint-up(sm) {
182
+ flex-flow: row wrap;
183
+ // The child selector allows nested `.card` within `.card-group`
184
+ // to display properly.
185
+ > .card {
186
+ // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored
187
+ flex: 1 0 0%;
188
+ margin-bottom: 0;
189
+
190
+ + .card {
191
+ margin-left: 0;
192
+ border-left: 0;
193
+ }
194
+
195
+ // Handle rounded corners
196
+ @if $enable-rounded {
197
+ &:first-child {
198
+ @include border-right-radius(0);
199
+
200
+ .card-img-top,
201
+ .card-header {
202
+ border-top-right-radius: 0;
203
+ }
204
+ .card-img-bottom,
205
+ .card-footer {
206
+ border-bottom-right-radius: 0;
207
+ }
208
+ }
209
+
210
+ &:last-child {
211
+ @include border-left-radius(0);
212
+
213
+ .card-img-top,
214
+ .card-header {
215
+ border-top-left-radius: 0;
216
+ }
217
+ .card-img-bottom,
218
+ .card-footer {
219
+ border-bottom-left-radius: 0;
220
+ }
221
+ }
222
+
223
+ &:only-child {
224
+ @include border-radius($card-border-radius);
225
+
226
+ .card-img-top,
227
+ .card-header {
228
+ @include border-top-radius($card-border-radius);
229
+ }
230
+ .card-img-bottom,
231
+ .card-footer {
232
+ @include border-bottom-radius($card-border-radius);
233
+ }
234
+ }
235
+
236
+ &:not(:first-child):not(:last-child):not(:only-child) {
237
+ @include border-radius(0);
238
+
239
+ .card-img-top,
240
+ .card-img-bottom,
241
+ .card-header,
242
+ .card-footer {
243
+ @include border-radius(0);
244
+ }
245
+ }
246
+ }
247
+ }
248
+ }
249
+ }
250
+
251
+
252
+ //
253
+ // Columns
254
+ //
255
+
256
+ .card-columns {
257
+ .card {
258
+ margin-bottom: $card-columns-margin;
259
+ }
260
+
261
+ @include media-breakpoint-up(sm) {
262
+ column-count: $card-columns-count;
263
+ column-gap: $card-columns-gap;
264
+
265
+ .card {
266
+ display: inline-block; // Don't let them vertically span multiple columns
267
+ width: 100%; // Don't let their width change
268
+ }
269
+ }
270
+ }
@@ -1,8 +1,3 @@
1
- //
2
- // Carousel
3
- // --------------------------------------------------
4
-
5
-
6
1
  // Wrapper for the slide container and indicators
7
2
  .carousel {
8
3
  position: relative;
@@ -10,260 +5,187 @@
10
5
 
11
6
  .carousel-inner {
12
7
  position: relative;
13
- overflow: hidden;
14
8
  width: 100%;
9
+ overflow: hidden;
10
+ }
15
11
 
16
- > .item {
17
- display: none;
18
- position: relative;
19
- @include transition(.6s ease-in-out left);
12
+ .carousel-item {
13
+ position: relative;
14
+ display: none;
15
+ align-items: center;
16
+ width: 100%;
17
+ @include transition($carousel-transition);
18
+ backface-visibility: hidden;
19
+ perspective: 1000px;
20
+ }
20
21
 
21
- // Account for jankitude on images
22
- > img,
23
- > a > img {
24
- @include img-responsive;
25
- line-height: 1;
26
- }
22
+ .carousel-item.active,
23
+ .carousel-item-next,
24
+ .carousel-item-prev {
25
+ display: block;
26
+ }
27
27
 
28
- // WebKit CSS3 transforms for supported devices
29
- @media all and (transform-3d), (-webkit-transform-3d) {
30
- @include transition-transform(0.6s ease-in-out);
31
- @include backface-visibility(hidden);
32
- @include perspective(1000);
28
+ .carousel-item-next,
29
+ .carousel-item-prev {
30
+ position: absolute;
31
+ top: 0;
32
+ }
33
33
 
34
- &.next,
35
- &.active.right {
36
- @include translate3d(100%, 0, 0);
37
- left: 0;
38
- }
39
- &.prev,
40
- &.active.left {
41
- @include translate3d(-100%, 0, 0);
42
- left: 0;
43
- }
44
- &.next.left,
45
- &.prev.right,
46
- &.active {
47
- @include translate3d(0, 0, 0);
48
- left: 0;
49
- }
50
- }
51
- }
34
+ // CSS3 transforms when supported by the browser
35
+ .carousel-item-next.carousel-item-left,
36
+ .carousel-item-prev.carousel-item-right {
37
+ transform: translateX(0);
52
38
 
53
- > .active,
54
- > .next,
55
- > .prev {
56
- display: block;
39
+ @supports (transform-style: preserve-3d) {
40
+ transform: translate3d(0, 0, 0);
57
41
  }
42
+ }
58
43
 
59
- > .active {
60
- left: 0;
61
- }
44
+ .carousel-item-next,
45
+ .active.carousel-item-right {
46
+ transform: translateX(100%);
62
47
 
63
- > .next,
64
- > .prev {
65
- position: absolute;
66
- top: 0;
67
- width: 100%;
48
+ @supports (transform-style: preserve-3d) {
49
+ transform: translate3d(100%, 0, 0);
68
50
  }
51
+ }
69
52
 
70
- > .next {
71
- left: 100%;
72
- }
73
- > .prev {
74
- left: -100%;
75
- }
76
- > .next.left,
77
- > .prev.right {
78
- left: 0;
79
- }
53
+ .carousel-item-prev,
54
+ .active.carousel-item-left {
55
+ transform: translateX(-100%);
80
56
 
81
- > .active.left {
82
- left: -100%;
83
- }
84
- > .active.right {
85
- left: 100%;
57
+ @supports (transform-style: preserve-3d) {
58
+ transform: translate3d(-100%, 0, 0);
86
59
  }
87
-
88
60
  }
89
61
 
62
+
63
+ //
90
64
  // Left/right controls for nav
91
- // ---------------------------
65
+ //
92
66
 
93
- .carousel-control {
67
+ .carousel-control-prev,
68
+ .carousel-control-next {
94
69
  position: absolute;
95
70
  top: 0;
96
- left: 0;
97
71
  bottom: 0;
72
+ // Use flex for alignment (1-3)
73
+ display: flex; // 1. allow flex styles
74
+ align-items: center; // 2. vertically center contents
75
+ justify-content: center; // 3. horizontally center contents
98
76
  width: $carousel-control-width;
99
- @include opacity($carousel-control-opacity);
100
- font-size: $carousel-control-font-size;
101
77
  color: $carousel-control-color;
102
78
  text-align: center;
103
- text-shadow: $carousel-text-shadow;
104
- // We can't have this transition here because WebKit cancels the carousel
79
+ opacity: $carousel-control-opacity;
80
+ // We can't have a transition here because WebKit cancels the carousel
105
81
  // animation if you trip this while in the middle of another animation.
106
82
 
107
- // Set gradients for backgrounds
108
- &.left {
109
- @include gradient-horizontal($start-color: rgba(0,0,0,.5), $end-color: rgba(0,0,0,.0001));
110
- }
111
- &.right {
112
- left: auto;
113
- right: 0;
114
- @include gradient-horizontal($start-color: rgba(0,0,0,.0001), $end-color: rgba(0,0,0,.5));
115
- }
116
-
117
83
  // Hover/focus state
118
- &:hover,
119
- &:focus {
120
- outline: 0;
84
+ @include hover-focus {
121
85
  color: $carousel-control-color;
122
86
  text-decoration: none;
123
- @include opacity(.9);
124
- }
125
-
126
- // Toggles
127
- .icon-prev,
128
- .icon-next,
129
- .glyphicon-chevron-left,
130
- .glyphicon-chevron-right {
131
- position: absolute;
132
- top: 50%;
133
- z-index: 5;
134
- display: inline-block;
135
- }
136
- .icon-prev,
137
- .glyphicon-chevron-left {
138
- left: 50%;
139
- margin-left: -10px;
87
+ outline: 0;
88
+ opacity: .9;
140
89
  }
141
- .icon-next,
142
- .glyphicon-chevron-right {
143
- right: 50%;
144
- margin-right: -10px;
90
+ }
91
+ .carousel-control-prev {
92
+ left: 0;
93
+ @if $enable-gradients {
94
+ background: linear-gradient(90deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001));
145
95
  }
146
- .icon-prev,
147
- .icon-next {
148
- width: 20px;
149
- height: 20px;
150
- margin-top: -10px;
151
- line-height: 1;
152
- font-family: serif;
96
+ }
97
+ .carousel-control-next {
98
+ right: 0;
99
+ @if $enable-gradients {
100
+ background: linear-gradient(270deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001));
153
101
  }
102
+ }
154
103
 
155
-
156
- .icon-prev {
157
- &:before {
158
- content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
159
- }
160
- }
161
- .icon-next {
162
- &:before {
163
- content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
164
- }
165
- }
104
+ // Icons for within
105
+ .carousel-control-prev-icon,
106
+ .carousel-control-next-icon {
107
+ display: inline-block;
108
+ width: $carousel-control-icon-width;
109
+ height: $carousel-control-icon-width;
110
+ background: transparent no-repeat center center;
111
+ background-size: 100% 100%;
166
112
  }
113
+ .carousel-control-prev-icon {
114
+ background-image: $carousel-control-prev-icon-bg;
115
+ }
116
+ .carousel-control-next-icon {
117
+ background-image: $carousel-control-next-icon-bg;
118
+ }
119
+
167
120
 
168
121
  // Optional indicator pips
169
122
  //
170
- // Add an unordered list with the following class and add a list item for each
123
+ // Add an ordered list with the following class and add a list item for each
171
124
  // slide your carousel holds.
172
125
 
173
126
  .carousel-indicators {
174
127
  position: absolute;
128
+ right: 0;
175
129
  bottom: 10px;
176
- left: 50%;
130
+ left: 0;
177
131
  z-index: 15;
178
- width: 60%;
179
- margin-left: -30%;
180
- padding-left: 0;
132
+ display: flex;
133
+ justify-content: center;
134
+ padding-left: 0; // override <ol> default
135
+ // Use the .carousel-control's width as margin so we don't overlay those
136
+ margin-right: $carousel-control-width;
137
+ margin-left: $carousel-control-width;
181
138
  list-style: none;
182
- text-align: center;
183
139
 
184
140
  li {
185
- display: inline-block;
186
- width: 10px;
187
- height: 10px;
188
- margin: 1px;
141
+ position: relative;
142
+ flex: 0 1 auto;
143
+ width: $carousel-indicator-width;
144
+ height: $carousel-indicator-height;
145
+ margin-right: $carousel-indicator-spacer;
146
+ margin-left: $carousel-indicator-spacer;
189
147
  text-indent: -999px;
190
- border: 1px solid $carousel-indicator-border-color;
191
- border-radius: 10px;
192
- cursor: pointer;
193
-
194
- // IE8-9 hack for event handling
195
- //
196
- // Internet Explorer 8-9 does not support clicks on elements without a set
197
- // `background-color`. We cannot use `filter` since that's not viewed as a
198
- // background color by the browser. Thus, a hack is needed.
199
- // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer
200
- //
201
- // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
202
- // set alpha transparency for the best results possible.
203
- background-color: #000 \9; // IE8
204
- background-color: rgba(0,0,0,0); // IE9
148
+ background-color: rgba($carousel-indicator-active-bg, .5);
149
+
150
+ // Use pseudo classes to increase the hit area by 10px on top and bottom.
151
+ &::before {
152
+ position: absolute;
153
+ top: -10px;
154
+ left: 0;
155
+ display: inline-block;
156
+ width: 100%;
157
+ height: 10px;
158
+ content: "";
159
+ }
160
+ &::after {
161
+ position: absolute;
162
+ bottom: -10px;
163
+ left: 0;
164
+ display: inline-block;
165
+ width: 100%;
166
+ height: 10px;
167
+ content: "";
168
+ }
205
169
  }
170
+
206
171
  .active {
207
- margin: 0;
208
- width: 12px;
209
- height: 12px;
210
172
  background-color: $carousel-indicator-active-bg;
211
173
  }
212
174
  }
213
175
 
176
+
214
177
  // Optional captions
215
- // -----------------------------
216
- // Hidden by default for smaller viewports
178
+ //
179
+ //
180
+
217
181
  .carousel-caption {
218
182
  position: absolute;
219
- left: 15%;
220
- right: 15%;
183
+ right: ((100% - $carousel-caption-width) / 2);
221
184
  bottom: 20px;
185
+ left: ((100% - $carousel-caption-width) / 2);
222
186
  z-index: 10;
223
187
  padding-top: 20px;
224
188
  padding-bottom: 20px;
225
189
  color: $carousel-caption-color;
226
190
  text-align: center;
227
- text-shadow: $carousel-text-shadow;
228
- & .btn {
229
- text-shadow: none; // No shadow for button elements in carousel-caption
230
- }
231
- }
232
-
233
-
234
- // Scale up controls for tablets and up
235
- @media screen and (min-width: $screen-sm-min) {
236
-
237
- // Scale up the controls a smidge
238
- .carousel-control {
239
- .glyphicon-chevron-left,
240
- .glyphicon-chevron-right,
241
- .icon-prev,
242
- .icon-next {
243
- width: 30px;
244
- height: 30px;
245
- margin-top: -15px;
246
- font-size: 30px;
247
- }
248
- .glyphicon-chevron-left,
249
- .icon-prev {
250
- margin-left: -15px;
251
- }
252
- .glyphicon-chevron-right,
253
- .icon-next {
254
- margin-right: -15px;
255
- }
256
- }
257
-
258
- // Show and left align the captions
259
- .carousel-caption {
260
- left: 20%;
261
- right: 20%;
262
- padding-bottom: 30px;
263
- }
264
-
265
- // Move up the indicators
266
- .carousel-indicators {
267
- bottom: 20px;
268
- }
269
191
  }