bootstrap 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of bootstrap might be problematic. Click here for more details.

Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/README.md +1 -1
  4. data/Rakefile +2 -0
  5. data/assets/javascripts/bootstrap-sprockets.js +6 -6
  6. data/assets/javascripts/bootstrap.js +3075 -3044
  7. data/assets/javascripts/bootstrap.min.js +2 -2
  8. data/assets/javascripts/bootstrap/alert.js +5 -5
  9. data/assets/javascripts/bootstrap/button.js +2 -2
  10. data/assets/javascripts/bootstrap/carousel.js +13 -11
  11. data/assets/javascripts/bootstrap/collapse.js +11 -19
  12. data/assets/javascripts/bootstrap/dropdown.js +34 -16
  13. data/assets/javascripts/bootstrap/modal.js +27 -24
  14. data/assets/javascripts/bootstrap/popover.js +7 -5
  15. data/assets/javascripts/bootstrap/scrollspy.js +6 -4
  16. data/assets/javascripts/bootstrap/tab.js +5 -5
  17. data/assets/javascripts/bootstrap/tooltip.js +15 -12
  18. data/assets/javascripts/bootstrap/util.js +28 -35
  19. data/assets/stylesheets/_bootstrap-grid.scss +1 -1
  20. data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
  21. data/assets/stylesheets/_bootstrap.scss +1 -1
  22. data/assets/stylesheets/bootstrap/_breadcrumb.scss +9 -6
  23. data/assets/stylesheets/bootstrap/_button-group.scss +7 -1
  24. data/assets/stylesheets/bootstrap/_buttons.scss +1 -0
  25. data/assets/stylesheets/bootstrap/_card.scss +33 -2
  26. data/assets/stylesheets/bootstrap/_carousel.scss +48 -4
  27. data/assets/stylesheets/bootstrap/_custom-forms.scss +126 -3
  28. data/assets/stylesheets/bootstrap/_dropdown.scss +36 -1
  29. data/assets/stylesheets/bootstrap/_forms.scss +3 -1
  30. data/assets/stylesheets/bootstrap/_functions.scss +1 -1
  31. data/assets/stylesheets/bootstrap/_input-group.scss +2 -2
  32. data/assets/stylesheets/bootstrap/_mixins.scss +0 -1
  33. data/assets/stylesheets/bootstrap/_modal.scss +2 -2
  34. data/assets/stylesheets/bootstrap/_navbar.scss +0 -12
  35. data/assets/stylesheets/bootstrap/_pagination.scss +2 -1
  36. data/assets/stylesheets/bootstrap/_print.scss +6 -6
  37. data/assets/stylesheets/bootstrap/_progress.scss +1 -0
  38. data/assets/stylesheets/bootstrap/_reboot.scss +3 -3
  39. data/assets/stylesheets/bootstrap/_tables.scss +11 -3
  40. data/assets/stylesheets/bootstrap/_transitions.scss +4 -18
  41. data/assets/stylesheets/bootstrap/_utilities.scss +1 -0
  42. data/assets/stylesheets/bootstrap/_variables.scss +75 -41
  43. data/assets/stylesheets/bootstrap/mixins/_caret.scss +1 -0
  44. data/assets/stylesheets/bootstrap/mixins/_forms.scss +1 -1
  45. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +7 -7
  46. data/assets/stylesheets/bootstrap/mixins/_hover.scss +1 -3
  47. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +1 -1
  48. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +2 -2
  49. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +1 -3
  50. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +2 -0
  51. data/assets/stylesheets/bootstrap/mixins/_transition.scss +4 -0
  52. data/assets/stylesheets/bootstrap/utilities/_flex.scss +5 -0
  53. data/assets/stylesheets/bootstrap/utilities/_position.scss +1 -0
  54. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +6 -0
  55. data/assets/stylesheets/bootstrap/utilities/_text.scss +7 -1
  56. data/lib/bootstrap/version.rb +2 -2
  57. metadata +3 -3
  58. data/assets/stylesheets/bootstrap/mixins/_navbar-align.scss +0 -10
@@ -4,11 +4,13 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
4
4
 
5
5
  function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
6
6
 
7
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
7
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
8
+
9
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8
10
 
9
11
  /**
10
12
  * --------------------------------------------------------------------------
11
- * Bootstrap (v4.0.0): popover.js
13
+ * Bootstrap (v4.1.0): popover.js
12
14
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
13
15
  * --------------------------------------------------------------------------
14
16
  */
@@ -19,21 +21,21 @@ var Popover = function ($) {
19
21
  * ------------------------------------------------------------------------
20
22
  */
21
23
  var NAME = 'popover';
22
- var VERSION = '4.0.0';
24
+ var VERSION = '4.1.0';
23
25
  var DATA_KEY = 'bs.popover';
24
26
  var EVENT_KEY = "." + DATA_KEY;
25
27
  var JQUERY_NO_CONFLICT = $.fn[NAME];
26
28
  var CLASS_PREFIX = 'bs-popover';
27
29
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
28
30
 
29
- var Default = _extends({}, Tooltip.Default, {
31
+ var Default = _objectSpread({}, Tooltip.Default, {
30
32
  placement: 'right',
31
33
  trigger: 'click',
32
34
  content: '',
33
35
  template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
34
36
  });
35
37
 
36
- var DefaultType = _extends({}, Tooltip.DefaultType, {
38
+ var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
37
39
  content: '(string|element|function)'
38
40
  });
39
41
 
@@ -1,4 +1,6 @@
1
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
1
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
2
+
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
4
 
3
5
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4
6
 
@@ -6,7 +8,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
6
8
 
7
9
  /**
8
10
  * --------------------------------------------------------------------------
9
- * Bootstrap (v4.0.0): scrollspy.js
11
+ * Bootstrap (v4.1.0): scrollspy.js
10
12
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
11
13
  * --------------------------------------------------------------------------
12
14
  */
@@ -17,7 +19,7 @@ var ScrollSpy = function ($) {
17
19
  * ------------------------------------------------------------------------
18
20
  */
19
21
  var NAME = 'scrollspy';
20
- var VERSION = '4.0.0';
22
+ var VERSION = '4.1.0';
21
23
  var DATA_KEY = 'bs.scrollspy';
22
24
  var EVENT_KEY = "." + DATA_KEY;
23
25
  var DATA_API_KEY = '.data-api';
@@ -144,7 +146,7 @@ var ScrollSpy = function ($) {
144
146
 
145
147
 
146
148
  _proto._getConfig = function _getConfig(config) {
147
- config = _extends({}, Default, config);
149
+ config = _objectSpread({}, Default, config);
148
150
 
149
151
  if (typeof config.target !== 'string') {
150
152
  var id = $(config.target).attr('id');
@@ -4,7 +4,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
4
4
 
5
5
  /**
6
6
  * --------------------------------------------------------------------------
7
- * Bootstrap (v4.0.0): tab.js
7
+ * Bootstrap (v4.1.0): tab.js
8
8
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
9
9
  * --------------------------------------------------------------------------
10
10
  */
@@ -15,12 +15,11 @@ var Tab = function ($) {
15
15
  * ------------------------------------------------------------------------
16
16
  */
17
17
  var NAME = 'tab';
18
- var VERSION = '4.0.0';
18
+ var VERSION = '4.1.0';
19
19
  var DATA_KEY = 'bs.tab';
20
20
  var EVENT_KEY = "." + DATA_KEY;
21
21
  var DATA_API_KEY = '.data-api';
22
22
  var JQUERY_NO_CONFLICT = $.fn[NAME];
23
- var TRANSITION_DURATION = 150;
24
23
  var Event = {
25
24
  HIDE: "hide" + EVENT_KEY,
26
25
  HIDDEN: "hidden" + EVENT_KEY,
@@ -139,14 +138,15 @@ var Tab = function ($) {
139
138
  }
140
139
 
141
140
  var active = activeElements[0];
142
- var isTransitioning = callback && Util.supportsTransitionEnd() && active && $(active).hasClass(ClassName.FADE);
141
+ var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);
143
142
 
144
143
  var complete = function complete() {
145
144
  return _this2._transitionComplete(element, active, callback);
146
145
  };
147
146
 
148
147
  if (active && isTransitioning) {
149
- $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
148
+ var transitionDuration = Util.getTransitionDurationFromElement(active);
149
+ $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
150
150
  } else {
151
151
  complete();
152
152
  }
@@ -1,4 +1,6 @@
1
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
1
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
2
+
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
4
 
3
5
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
4
6
 
@@ -6,7 +8,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
6
8
 
7
9
  /**
8
10
  * --------------------------------------------------------------------------
9
- * Bootstrap (v4.0.0): tooltip.js
11
+ * Bootstrap (v4.1.0): tooltip.js
10
12
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
11
13
  * --------------------------------------------------------------------------
12
14
  */
@@ -17,11 +19,10 @@ var Tooltip = function ($) {
17
19
  * ------------------------------------------------------------------------
18
20
  */
19
21
  var NAME = 'tooltip';
20
- var VERSION = '4.0.0';
22
+ var VERSION = '4.1.0';
21
23
  var DATA_KEY = 'bs.tooltip';
22
24
  var EVENT_KEY = "." + DATA_KEY;
23
25
  var JQUERY_NO_CONFLICT = $.fn[NAME];
24
- var TRANSITION_DURATION = 150;
25
26
  var CLASS_PREFIX = 'bs-tooltip';
26
27
  var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
27
28
  var DefaultType = {
@@ -267,7 +268,7 @@ var Tooltip = function ($) {
267
268
  // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
268
269
 
269
270
  if ('ontouchstart' in document.documentElement) {
270
- $('body').children().on('mouseover', null, $.noop);
271
+ $(document.body).children().on('mouseover', null, $.noop);
271
272
  }
272
273
 
273
274
  var complete = function complete() {
@@ -284,8 +285,9 @@ var Tooltip = function ($) {
284
285
  }
285
286
  };
286
287
 
287
- if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
288
- $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);
288
+ if ($(this.tip).hasClass(ClassName.FADE)) {
289
+ var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
290
+ $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
289
291
  } else {
290
292
  complete();
291
293
  }
@@ -328,15 +330,16 @@ var Tooltip = function ($) {
328
330
  // empty mouseover listeners we added for iOS support
329
331
 
330
332
  if ('ontouchstart' in document.documentElement) {
331
- $('body').children().off('mouseover', null, $.noop);
333
+ $(document.body).children().off('mouseover', null, $.noop);
332
334
  }
333
335
 
334
336
  this._activeTrigger[Trigger.CLICK] = false;
335
337
  this._activeTrigger[Trigger.FOCUS] = false;
336
338
  this._activeTrigger[Trigger.HOVER] = false;
337
339
 
338
- if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {
339
- $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
340
+ if ($(this.tip).hasClass(ClassName.FADE)) {
341
+ var transitionDuration = Util.getTransitionDurationFromElement(tip);
342
+ $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
340
343
  } else {
341
344
  complete();
342
345
  }
@@ -427,7 +430,7 @@ var Tooltip = function ($) {
427
430
  });
428
431
 
429
432
  if (this.config.selector) {
430
- this.config = _extends({}, this.config, {
433
+ this.config = _objectSpread({}, this.config, {
431
434
  trigger: 'manual',
432
435
  selector: ''
433
436
  });
@@ -521,7 +524,7 @@ var Tooltip = function ($) {
521
524
  };
522
525
 
523
526
  _proto._getConfig = function _getConfig(config) {
524
- config = _extends({}, this.constructor.Default, $(this.element).data(), config);
527
+ config = _objectSpread({}, this.constructor.Default, $(this.element).data(), config);
525
528
 
526
529
  if (typeof config.delay === 'number') {
527
530
  config.delay = {
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * --------------------------------------------------------------------------
3
- * Bootstrap (v4.0.0): util.js
3
+ * Bootstrap (v4.1.0): util.js
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
5
  * --------------------------------------------------------------------------
6
6
  */
@@ -10,17 +10,18 @@ var Util = function ($) {
10
10
  * Private TransitionEnd Helpers
11
11
  * ------------------------------------------------------------------------
12
12
  */
13
- var transition = false;
14
- var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
13
+ var TRANSITION_END = 'transitionend';
14
+ var MAX_UID = 1000000;
15
+ var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
15
16
 
16
17
  function toType(obj) {
17
- return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
18
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
18
19
  }
19
20
 
20
21
  function getSpecialTransitionEndEvent() {
21
22
  return {
22
- bindType: transition.end,
23
- delegateType: transition.end,
23
+ bindType: TRANSITION_END,
24
+ delegateType: TRANSITION_END,
24
25
  handle: function handle(event) {
25
26
  if ($(event.target).is(this)) {
26
27
  return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
@@ -31,16 +32,6 @@ var Util = function ($) {
31
32
  };
32
33
  }
33
34
 
34
- function transitionEndTest() {
35
- if (typeof window !== 'undefined' && window.QUnit) {
36
- return false;
37
- }
38
-
39
- return {
40
- end: 'transitionend'
41
- };
42
- }
43
-
44
35
  function transitionEndEmulator(duration) {
45
36
  var _this = this;
46
37
 
@@ -57,19 +48,8 @@ var Util = function ($) {
57
48
  }
58
49
 
59
50
  function setTransitionEndSupport() {
60
- transition = transitionEndTest();
61
51
  $.fn.emulateTransitionEnd = transitionEndEmulator;
62
-
63
- if (Util.supportsTransitionEnd()) {
64
- $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
65
- }
66
- }
67
-
68
- function escapeId(selector) {
69
- // We escape IDs in case of special selectors (selector = '#myId:something')
70
- // $.escapeSelector does not exist in jQuery < 3
71
- selector = typeof $.escapeSelector === 'function' ? $.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
72
- return selector;
52
+ $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
73
53
  }
74
54
  /**
75
55
  * --------------------------------------------------------------------------
@@ -93,11 +73,6 @@ var Util = function ($) {
93
73
 
94
74
  if (!selector || selector === '#') {
95
75
  selector = element.getAttribute('href') || '';
96
- } // If it's an ID
97
-
98
-
99
- if (selector.charAt(0) === '#') {
100
- selector = escapeId(selector);
101
76
  }
102
77
 
103
78
  try {
@@ -107,14 +82,32 @@ var Util = function ($) {
107
82
  return null;
108
83
  }
109
84
  },
85
+ getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
86
+ if (!element) {
87
+ return 0;
88
+ } // Get transition-duration of the element
89
+
90
+
91
+ var transitionDuration = $(element).css('transition-duration');
92
+ var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
93
+
94
+ if (!floatTransitionDuration) {
95
+ return 0;
96
+ } // If multiple durations are defined, take the first
97
+
98
+
99
+ transitionDuration = transitionDuration.split(',')[0];
100
+ return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
101
+ },
110
102
  reflow: function reflow(element) {
111
103
  return element.offsetHeight;
112
104
  },
113
105
  triggerTransitionEnd: function triggerTransitionEnd(element) {
114
- $(element).trigger(transition.end);
106
+ $(element).trigger(TRANSITION_END);
115
107
  },
108
+ // TODO: Remove in v5
116
109
  supportsTransitionEnd: function supportsTransitionEnd() {
117
- return Boolean(transition);
110
+ return Boolean(TRANSITION_END);
118
111
  },
119
112
  isElement: function isElement(obj) {
120
113
  return (obj[0] || obj).nodeType;
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap Grid v4.0.0 (https://getbootstrap.com)
2
+ * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2018 The Bootstrap Authors
4
4
  * Copyright 2011-2018 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
2
+ * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2018 The Bootstrap Authors
4
4
  * Copyright 2011-2018 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap v4.0.0 (https://getbootstrap.com)
2
+ * Bootstrap v4.1.0 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2018 The Bootstrap Authors
4
4
  * Copyright 2011-2018 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -5,17 +5,20 @@
5
5
  margin-bottom: $breadcrumb-margin-bottom;
6
6
  list-style: none;
7
7
  background-color: $breadcrumb-bg;
8
- @include border-radius($border-radius);
8
+ @include border-radius($breadcrumb-border-radius);
9
9
  }
10
10
 
11
11
  .breadcrumb-item {
12
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;
13
+ + .breadcrumb-item {
16
14
  padding-left: $breadcrumb-item-padding;
17
- color: $breadcrumb-divider-color;
18
- content: "#{$breadcrumb-divider}";
15
+
16
+ &::before {
17
+ display: inline-block; // Suppress underlining of the separator in modern browsers
18
+ padding-right: $breadcrumb-item-padding;
19
+ color: $breadcrumb-divider-color;
20
+ content: $breadcrumb-divider;
21
+ }
19
22
  }
20
23
 
21
24
  // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built
@@ -76,9 +76,15 @@
76
76
  padding-right: $btn-padding-x * .75;
77
77
  padding-left: $btn-padding-x * .75;
78
78
 
79
- &::after {
79
+ &::after,
80
+ .dropup &::after,
81
+ .dropright &::after {
80
82
  margin-left: 0;
81
83
  }
84
+
85
+ .dropleft &::before {
86
+ margin-right: 0;
87
+ }
82
88
  }
83
89
 
84
90
  .btn-sm + .dropdown-toggle-split {
@@ -100,6 +100,7 @@ fieldset:disabled a.btn {
100
100
  &:disabled,
101
101
  &.disabled {
102
102
  color: $btn-link-disabled-color;
103
+ pointer-events: none;
103
104
  }
104
105
 
105
106
  // No need for an active state here
@@ -153,7 +153,7 @@
153
153
 
154
154
  .card {
155
155
  display: flex;
156
- // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored
156
+ // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
157
157
  flex: 1 0 0%;
158
158
  flex-direction: column;
159
159
  margin-right: $card-deck-margin;
@@ -183,7 +183,7 @@
183
183
  // The child selector allows nested `.card` within `.card-group`
184
184
  // to display properly.
185
185
  > .card {
186
- // Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored
186
+ // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
187
187
  flex: 1 0 0%;
188
188
  margin-bottom: 0;
189
189
 
@@ -261,6 +261,8 @@
261
261
  @include media-breakpoint-up(sm) {
262
262
  column-count: $card-columns-count;
263
263
  column-gap: $card-columns-gap;
264
+ orphans: 1;
265
+ widows: 1;
264
266
 
265
267
  .card {
266
268
  display: inline-block; // Don't let them vertically span multiple columns
@@ -268,3 +270,32 @@
268
270
  }
269
271
  }
270
272
  }
273
+
274
+
275
+ //
276
+ // Accordion
277
+ //
278
+
279
+ .accordion {
280
+ .card:not(:first-of-type):not(:last-of-type) {
281
+ border-bottom: 0;
282
+ border-radius: 0;
283
+ }
284
+
285
+ .card:not(:first-of-type) {
286
+ .card-header:first-child {
287
+ border-radius: 0;
288
+ }
289
+ }
290
+
291
+ .card:first-of-type {
292
+ border-bottom: 0;
293
+ border-bottom-right-radius: 0;
294
+ border-bottom-left-radius: 0;
295
+ }
296
+
297
+ .card:last-of-type {
298
+ border-top-left-radius: 0;
299
+ border-top-right-radius: 0;
300
+ }
301
+ }