Update to Bootstrap 4.1 and rebuild

This commit is contained in:
Holger Könemann 2018-04-10 19:05:24 +02:00
parent 882cd19601
commit 79b418afb7
51 changed files with 16679 additions and 14855 deletions

View File

@ -1,2 +1,2 @@
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWVkaXRvci1zdHlsZS5jc3MiLCJzb3VyY2VzIjpbImN1c3RvbS1lZGl0b3Itc3R5bGUuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvL0FkZCB5b3VyIG93biBlZGl0b3Igc3R5bGVzIGhlcmUgb3IgY29tbWVudCBvdXQgdGhlIG5leHQgbGluZSBpZiB5b3Ugd2FudCB0byBwdWxsIGluIHRoZSB3aG9sZSBCb290c3RyYXAgc3R1ZmZcbi8vQGltcG9ydCBcInRoZW1lXCI7ICJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0= */ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJjdXN0b20tZWRpdG9yLXN0eWxlLmNzcyIsInNvdXJjZXNDb250ZW50IjpbXX0= */

File diff suppressed because one or more lines are too long

6
css/theme.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/**! /**!
* @fileOverview Kickass library to create and place poppers near their reference elements. * @fileOverview Kickass library to create and place poppers near their reference elements.
* @version 1.13.0 * @version 1.14.3
* @license * @license
* Copyright (c) 2016 Federico Zivolo and contributors * Copyright (c) 2016 Federico Zivolo and contributors
* *
@ -29,6 +29,7 @@
}(this, (function () { 'use strict'; }(this, (function () { 'use strict';
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
var timeoutDuration = 0; var timeoutDuration = 0;
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
@ -148,13 +149,33 @@ function getScrollParent(element) {
overflowX = _getStyleComputedProp.overflowX, overflowX = _getStyleComputedProp.overflowX,
overflowY = _getStyleComputedProp.overflowY; overflowY = _getStyleComputedProp.overflowY;
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) { if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
return element; return element;
} }
return getScrollParent(getParentNode(element)); return getScrollParent(getParentNode(element));
} }
var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
/**
* Determines if the browser is Internet Explorer
* @method
* @memberof Popper.Utils
* @param {Number} version to check
* @returns {Boolean} isIE
*/
function isIE(version) {
if (version === 11) {
return isIE11;
}
if (version === 10) {
return isIE10;
}
return isIE11 || isIE10;
}
/** /**
* Returns the offset parent of the given element * Returns the offset parent of the given element
* @method * @method
@ -163,16 +184,23 @@ function getScrollParent(element) {
* @returns {Element} offset parent * @returns {Element} offset parent
*/ */
function getOffsetParent(element) { function getOffsetParent(element) {
if (!element) {
return document.documentElement;
}
var noOffsetParent = isIE(10) ? document.body : null;
// NOTE: 1 DOM access here // NOTE: 1 DOM access here
var offsetParent = element && element.offsetParent; var offsetParent = element.offsetParent;
// Skip hidden elements which don't have an offsetParent
while (offsetParent === noOffsetParent && element.nextElementSibling) {
offsetParent = (element = element.nextElementSibling).offsetParent;
}
var nodeName = offsetParent && offsetParent.nodeName; var nodeName = offsetParent && offsetParent.nodeName;
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
if (element) { return element ? element.ownerDocument.documentElement : document.documentElement;
return element.ownerDocument.documentElement;
}
return document.documentElement;
} }
// .offsetParent will return the closest TD or TABLE in case // .offsetParent will return the closest TD or TABLE in case
@ -314,29 +342,14 @@ function getBordersSize(styles, axis) {
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10); return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
} }
/**
* Tells if you are running Internet Explorer 10
* @method
* @memberof Popper.Utils
* @returns {Boolean} isIE10
*/
var isIE10 = undefined;
var isIE10$1 = function () {
if (isIE10 === undefined) {
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
}
return isIE10;
};
function getSize(axis, body, html, computedStyle) { function getSize(axis, body, html, computedStyle) {
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0); return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
} }
function getWindowSizes() { function getWindowSizes() {
var body = document.body; var body = document.body;
var html = document.documentElement; var html = document.documentElement;
var computedStyle = isIE10$1() && getComputedStyle(html); var computedStyle = isIE(10) && getComputedStyle(html);
return { return {
height: getSize('Height', body, html, computedStyle), height: getSize('Height', body, html, computedStyle),
@ -428,8 +441,8 @@ function getBoundingClientRect(element) {
// IE10 10 FIX: Please, don't ask, the element isn't // IE10 10 FIX: Please, don't ask, the element isn't
// considered in DOM in some circumstances... // considered in DOM in some circumstances...
// This isn't reproducible in IE10 compatibility mode of IE11 // This isn't reproducible in IE10 compatibility mode of IE11
if (isIE10$1()) {
try { try {
if (isIE(10)) {
rect = element.getBoundingClientRect(); rect = element.getBoundingClientRect();
var scrollTop = getScroll(element, 'top'); var scrollTop = getScroll(element, 'top');
var scrollLeft = getScroll(element, 'left'); var scrollLeft = getScroll(element, 'left');
@ -437,10 +450,10 @@ function getBoundingClientRect(element) {
rect.left += scrollLeft; rect.left += scrollLeft;
rect.bottom += scrollTop; rect.bottom += scrollTop;
rect.right += scrollLeft; rect.right += scrollLeft;
} catch (err) {}
} else { } else {
rect = element.getBoundingClientRect(); rect = element.getBoundingClientRect();
} }
} catch (e) {}
var result = { var result = {
left: rect.left, left: rect.left,
@ -472,7 +485,9 @@ function getBoundingClientRect(element) {
} }
function getOffsetRectRelativeToArbitraryNode(children, parent) { function getOffsetRectRelativeToArbitraryNode(children, parent) {
var isIE10 = isIE10$1(); var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var isIE10 = isIE(10);
var isHTML = parent.nodeName === 'HTML'; var isHTML = parent.nodeName === 'HTML';
var childrenRect = getBoundingClientRect(children); var childrenRect = getBoundingClientRect(children);
var parentRect = getBoundingClientRect(parent); var parentRect = getBoundingClientRect(parent);
@ -482,6 +497,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
var borderTopWidth = parseFloat(styles.borderTopWidth, 10); var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
if (fixedPosition && parent.nodeName === 'HTML') {
parentRect.top = Math.max(parentRect.top, 0);
parentRect.left = Math.max(parentRect.left, 0);
}
var offsets = getClientRect({ var offsets = getClientRect({
top: childrenRect.top - parentRect.top - borderTopWidth, top: childrenRect.top - parentRect.top - borderTopWidth,
left: childrenRect.left - parentRect.left - borderLeftWidth, left: childrenRect.left - parentRect.left - borderLeftWidth,
@ -509,7 +529,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
offsets.marginLeft = marginLeft; offsets.marginLeft = marginLeft;
} }
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
offsets = includeScroll(offsets, parent); offsets = includeScroll(offsets, parent);
} }
@ -517,13 +537,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
} }
function getViewportOffsetRectRelativeToArtbitraryNode(element) { function getViewportOffsetRectRelativeToArtbitraryNode(element) {
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
var html = element.ownerDocument.documentElement; var html = element.ownerDocument.documentElement;
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
var width = Math.max(html.clientWidth, window.innerWidth || 0); var width = Math.max(html.clientWidth, window.innerWidth || 0);
var height = Math.max(html.clientHeight, window.innerHeight || 0); var height = Math.max(html.clientHeight, window.innerHeight || 0);
var scrollTop = getScroll(html); var scrollTop = !excludeScroll ? getScroll(html) : 0;
var scrollLeft = getScroll(html, 'left'); var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
var offset = { var offset = {
top: scrollTop - relativeOffset.top + relativeOffset.marginTop, top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
@ -554,6 +576,26 @@ function isFixed(element) {
return isFixed(getParentNode(element)); return isFixed(getParentNode(element));
} }
/**
* Finds the first parent of an element that has a transformed property defined
* @method
* @memberof Popper.Utils
* @argument {Element} element
* @returns {Element} first transformed parent or documentElement
*/
function getFixedPositionOffsetParent(element) {
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
if (!element || !element.parentElement || isIE()) {
return document.documentElement;
}
var el = element.parentElement;
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
el = el.parentElement;
}
return el || document.documentElement;
}
/** /**
* Computed the boundaries limits and return them * Computed the boundaries limits and return them
* @method * @method
@ -562,16 +604,20 @@ function isFixed(element) {
* @param {HTMLElement} reference * @param {HTMLElement} reference
* @param {number} padding * @param {number} padding
* @param {HTMLElement} boundariesElement - Element used to define the boundaries * @param {HTMLElement} boundariesElement - Element used to define the boundaries
* @param {Boolean} fixedPosition - Is in fixed position mode
* @returns {Object} Coordinates of the boundaries * @returns {Object} Coordinates of the boundaries
*/ */
function getBoundaries(popper, reference, padding, boundariesElement) { function getBoundaries(popper, reference, padding, boundariesElement) {
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
// NOTE: 1 DOM access here // NOTE: 1 DOM access here
var boundaries = { top: 0, left: 0 }; var boundaries = { top: 0, left: 0 };
var offsetParent = findCommonOffsetParent(popper, reference); var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
// Handle viewport case // Handle viewport case
if (boundariesElement === 'viewport') { if (boundariesElement === 'viewport') {
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent); boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
} else { } else {
// Handle other cases based on DOM element used as boundaries // Handle other cases based on DOM element used as boundaries
var boundariesNode = void 0; var boundariesNode = void 0;
@ -586,7 +632,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
boundariesNode = boundariesElement; boundariesNode = boundariesElement;
} }
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent); var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
// In case of HTML, we need a different computation // In case of HTML, we need a different computation
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
@ -687,11 +733,14 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
* @param {Object} state * @param {Object} state
* @param {Element} popper - the popper element * @param {Element} popper - the popper element
* @param {Element} reference - the reference element (the popper will be relative to this) * @param {Element} reference - the reference element (the popper will be relative to this)
* @param {Element} fixedPosition - is in fixed position mode
* @returns {Object} An object containing the offsets which will be applied to the popper * @returns {Object} An object containing the offsets which will be applied to the popper
*/ */
function getReferenceOffsets(state, popper, reference) { function getReferenceOffsets(state, popper, reference) {
var commonOffsetParent = findCommonOffsetParent(popper, reference); var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
} }
/** /**
@ -864,7 +913,7 @@ function update() {
}; };
// compute reference element offsets // compute reference element offsets
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference); data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
// compute auto placement, store placement inside the data object, // compute auto placement, store placement inside the data object,
// modifiers will be able to edit `placement` if needed // modifiers will be able to edit `placement` if needed
@ -874,9 +923,12 @@ function update() {
// store the computed placement inside `originalPlacement` // store the computed placement inside `originalPlacement`
data.originalPlacement = data.placement; data.originalPlacement = data.placement;
data.positionFixed = this.options.positionFixed;
// compute the popper offsets // compute the popper offsets
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
data.offsets.popper.position = 'absolute';
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
// run the modifiers // run the modifiers
data = runModifiers(this.modifiers, data); data = runModifiers(this.modifiers, data);
@ -916,7 +968,7 @@ function getSupportedPropertyName(property) {
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
var upperProp = property.charAt(0).toUpperCase() + property.slice(1); var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
for (var i = 0; i < prefixes.length - 1; i++) { for (var i = 0; i < prefixes.length; i++) {
var prefix = prefixes[i]; var prefix = prefixes[i];
var toCheck = prefix ? '' + prefix + upperProp : property; var toCheck = prefix ? '' + prefix + upperProp : property;
if (typeof document.body.style[toCheck] !== 'undefined') { if (typeof document.body.style[toCheck] !== 'undefined') {
@ -937,9 +989,12 @@ function destroy() {
// touch DOM only if `applyStyle` modifier is enabled // touch DOM only if `applyStyle` modifier is enabled
if (isModifierEnabled(this.modifiers, 'applyStyle')) { if (isModifierEnabled(this.modifiers, 'applyStyle')) {
this.popper.removeAttribute('x-placement'); this.popper.removeAttribute('x-placement');
this.popper.style.left = '';
this.popper.style.position = ''; this.popper.style.position = '';
this.popper.style.top = ''; this.popper.style.top = '';
this.popper.style.left = '';
this.popper.style.right = '';
this.popper.style.bottom = '';
this.popper.style.willChange = '';
this.popper.style[getSupportedPropertyName('transform')] = ''; this.popper.style[getSupportedPropertyName('transform')] = '';
} }
@ -1127,12 +1182,12 @@ function applyStyle(data) {
* @method * @method
* @memberof Popper.modifiers * @memberof Popper.modifiers
* @param {HTMLElement} reference - The reference element used to position the popper * @param {HTMLElement} reference - The reference element used to position the popper
* @param {HTMLElement} popper - The HTML element used as popper. * @param {HTMLElement} popper - The HTML element used as popper
* @param {Object} options - Popper.js options * @param {Object} options - Popper.js options
*/ */
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
// compute reference element offsets // compute reference element offsets
var referenceOffsets = getReferenceOffsets(state, popper, reference); var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
// compute auto placement, store placement inside the data object, // compute auto placement, store placement inside the data object,
// modifiers will be able to edit `placement` if needed // modifiers will be able to edit `placement` if needed
@ -1143,7 +1198,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
// Apply `position` to popper before anything else because // Apply `position` to popper before anything else because
// without the position applied we can't guarantee correct computations // without the position applied we can't guarantee correct computations
setStyles(popper, { position: 'absolute' }); setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
return options; return options;
} }
@ -1178,11 +1233,13 @@ function computeStyle(data, options) {
position: popper.position position: popper.position
}; };
// floor sides to avoid blurry text // Avoid blurry text by using full pixel integers.
// For pixel-perfect positioning, top/bottom prefers rounded
// values, while left/right prefers floored values.
var offsets = { var offsets = {
left: Math.floor(popper.left), left: Math.floor(popper.left),
top: Math.floor(popper.top), top: Math.round(popper.top),
bottom: Math.floor(popper.bottom), bottom: Math.round(popper.bottom),
right: Math.floor(popper.right) right: Math.floor(popper.right)
}; };
@ -1446,7 +1503,7 @@ function flip(data, options) {
return data; return data;
} }
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement); var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
var placement = data.placement.split('-')[0]; var placement = data.placement.split('-')[0];
var placementOpposite = getOppositePlacement(placement); var placementOpposite = getOppositePlacement(placement);
@ -1738,7 +1795,27 @@ function preventOverflow(data, options) {
boundariesElement = getOffsetParent(boundariesElement); boundariesElement = getOffsetParent(boundariesElement);
} }
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement); // NOTE: DOM access here
// resets the popper's position so that the document size can be calculated excluding
// the size of the popper element itself
var transformProp = getSupportedPropertyName('transform');
var popperStyles = data.instance.popper.style; // assignment to help minification
var top = popperStyles.top,
left = popperStyles.left,
transform = popperStyles[transformProp];
popperStyles.top = '';
popperStyles.left = '';
popperStyles[transformProp] = '';
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
// NOTE: DOM access here
// restores the original style properties after the offsets have been computed
popperStyles.top = top;
popperStyles.left = left;
popperStyles[transformProp] = transform;
options.boundaries = boundaries; options.boundaries = boundaries;
var order = options.priority; var order = options.priority;
@ -2235,6 +2312,12 @@ var Defaults = {
*/ */
placement: 'bottom', placement: 'bottom',
/**
* Set this to true if you want popper to position it self in 'fixed' mode
* @prop {Boolean} positionFixed=false
*/
positionFixed: false,
/** /**
* Whether events (resize, scroll) are initially enabled * Whether events (resize, scroll) are initially enabled
* @prop {Boolean} eventsEnabled=true * @prop {Boolean} eventsEnabled=true

4
js/popper.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
@ -28,22 +28,38 @@ function _createClass(Constructor, protoProps, staticProps) {
return Constructor; return Constructor;
} }
function _extends() { function _defineProperty(obj, key, value) {
_extends = Object.assign || function (target) { if (key in obj) {
for (var i = 1; i < arguments.length; i++) { Object.defineProperty(obj, key, {
var source = arguments[i]; value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
for (var key in source) { return obj;
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
} }
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; return target;
};
return _extends.apply(this, arguments);
} }
function _inheritsLoose(subClass, superClass) { function _inheritsLoose(subClass, superClass) {
@ -54,7 +70,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): util.js * Bootstrap (v4.1.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -65,17 +81,18 @@ var Util = function ($$$1) {
* Private TransitionEnd Helpers * Private TransitionEnd Helpers
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var TRANSITION_END = 'transitionend';
var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) var MAX_UID = 1000000;
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
} }
function getSpecialTransitionEndEvent() { function getSpecialTransitionEndEvent() {
return { return {
bindType: transition.end, bindType: TRANSITION_END,
delegateType: transition.end, delegateType: TRANSITION_END,
handle: function handle(event) { handle: function handle(event) {
if ($$$1(event.target).is(this)) { if ($$$1(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
@ -86,16 +103,6 @@ var Util = function ($$$1) {
}; };
} }
function transitionEndTest() {
if (typeof window !== 'undefined' && window.QUnit) {
return false;
}
return {
end: 'transitionend'
};
}
function transitionEndEmulator(duration) { function transitionEndEmulator(duration) {
var _this = this; var _this = this;
@ -112,20 +119,9 @@ var Util = function ($$$1) {
} }
function setTransitionEndSupport() { function setTransitionEndSupport() {
transition = transitionEndTest();
$$$1.fn.emulateTransitionEnd = transitionEndEmulator; $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
if (Util.supportsTransitionEnd()) {
$$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
} }
}
function escapeId(selector) {
// We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3
selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
return selector;
}
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Public Util Api * Public Util Api
@ -148,11 +144,6 @@ var Util = function ($$$1) {
if (!selector || selector === '#') { if (!selector || selector === '#') {
selector = element.getAttribute('href') || ''; selector = element.getAttribute('href') || '';
} // If it's an ID
if (selector.charAt(0) === '#') {
selector = escapeId(selector);
} }
try { try {
@ -162,14 +153,32 @@ var Util = function ($$$1) {
return null; return null;
} }
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
return 0;
} // Get transition-duration of the element
var transitionDuration = $$$1(element).css('transition-duration');
var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration) {
return 0;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
},
reflow: function reflow(element) { reflow: function reflow(element) {
return element.offsetHeight; return element.offsetHeight;
}, },
triggerTransitionEnd: function triggerTransitionEnd(element) { triggerTransitionEnd: function triggerTransitionEnd(element) {
$$$1(element).trigger(transition.end); $$$1(element).trigger(TRANSITION_END);
}, },
// TODO: Remove in v5
supportsTransitionEnd: function supportsTransitionEnd() { supportsTransitionEnd: function supportsTransitionEnd() {
return Boolean(transition); return Boolean(TRANSITION_END);
}, },
isElement: function isElement(obj) { isElement: function isElement(obj) {
return (obj[0] || obj).nodeType; return (obj[0] || obj).nodeType;
@ -194,7 +203,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): alert.js * Bootstrap (v4.1.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -206,12 +215,11 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Selector = { var Selector = {
DISMISS: '[data-dismiss="alert"]' DISMISS: '[data-dismiss="alert"]'
}; };
@ -289,15 +297,16 @@ var Alert = function ($$$1) {
$$$1(element).removeClass(ClassName.SHOW); $$$1(element).removeClass(ClassName.SHOW);
if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) { if (!$$$1(element).hasClass(ClassName.FADE)) {
this._destroyElement(element); this._destroyElement(element);
return; return;
} }
var transitionDuration = Util.getTransitionDurationFromElement(element);
$$$1(element).one(Util.TRANSITION_END, function (event) { $$$1(element).one(Util.TRANSITION_END, function (event) {
return _this._destroyElement(element, event); return _this._destroyElement(element, event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
}; };
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
@ -337,6 +346,7 @@ var Alert = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Alert; return Alert;
}(); }();
/** /**
@ -366,7 +376,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): button.js * Bootstrap (v4.1.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -378,7 +388,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -488,6 +498,7 @@ var Button = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Button; return Button;
}(); }();
/** /**
@ -529,7 +540,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): carousel.js * Bootstrap (v4.1.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -541,12 +552,11 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
@ -655,7 +665,7 @@ var Carousel = function ($$$1) {
this._isPaused = true; this._isPaused = true;
} }
if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) {
Util.triggerTransitionEnd(this._element); Util.triggerTransitionEnd(this._element);
this.cycle(true); this.cycle(true);
} }
@ -723,7 +733,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -894,11 +904,12 @@ var Carousel = function ($$$1) {
to: nextElementIndex to: nextElementIndex
}); });
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) { if ($$$1(this._element).hasClass(ClassName.SLIDE)) {
$$$1(nextElement).addClass(orderClassName); $$$1(nextElement).addClass(orderClassName);
Util.reflow(nextElement); Util.reflow(nextElement);
$$$1(activeElement).addClass(directionalClassName); $$$1(activeElement).addClass(directionalClassName);
$$$1(nextElement).addClass(directionalClassName); $$$1(nextElement).addClass(directionalClassName);
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
$$$1(activeElement).one(Util.TRANSITION_END, function () { $$$1(activeElement).one(Util.TRANSITION_END, function () {
$$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
$$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
@ -906,7 +917,7 @@ var Carousel = function ($$$1) {
setTimeout(function () { setTimeout(function () {
return $$$1(_this3._element).trigger(slidEvent); return $$$1(_this3._element).trigger(slidEvent);
}, 0); }, 0);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
$$$1(activeElement).removeClass(ClassName.ACTIVE); $$$1(activeElement).removeClass(ClassName.ACTIVE);
$$$1(nextElement).addClass(ClassName.ACTIVE); $$$1(nextElement).addClass(ClassName.ACTIVE);
@ -924,10 +935,10 @@ var Carousel = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Default, $$$1(this).data()); var _config = _objectSpread({}, Default, $$$1(this).data());
if (typeof config === 'object') { if (typeof config === 'object') {
_config = _extends({}, _config, config); _config = _objectSpread({}, _config, config);
} }
var action = typeof config === 'string' ? config : _config.slide; var action = typeof config === 'string' ? config : _config.slide;
@ -965,7 +976,8 @@ var Carousel = function ($$$1) {
return; return;
} }
var config = _extends({}, $$$1(target).data(), $$$1(this).data()); var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());
var slideIndex = this.getAttribute('data-slide-to'); var slideIndex = this.getAttribute('data-slide-to');
if (slideIndex) { if (slideIndex) {
@ -992,6 +1004,7 @@ var Carousel = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Carousel; return Carousel;
}(); }();
/** /**
@ -1028,7 +1041,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): collapse.js * Bootstrap (v4.1.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1040,12 +1053,11 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var Default = { var Default = {
toggle: true, toggle: true,
parent: '' parent: ''
@ -1187,14 +1199,10 @@ var Collapse = function ($$$1) {
$$$1(_this._element).trigger(Event.SHOWN); $$$1(_this._element).trigger(Event.SHOWN);
}; };
if (!Util.supportsTransitionEnd()) {
complete();
return;
}
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension; var scrollSize = "scroll" + capitalizedDimension;
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
this._element.style[dimension] = this._element[scrollSize] + "px"; this._element.style[dimension] = this._element[scrollSize] + "px";
}; };
@ -1242,13 +1250,8 @@ var Collapse = function ($$$1) {
}; };
this._element.style[dimension] = ''; this._element.style[dimension] = '';
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
if (!Util.supportsTransitionEnd()) { $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
complete();
return;
}
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
}; };
_proto.setTransitioning = function setTransitioning(isTransitioning) { _proto.setTransitioning = function setTransitioning(isTransitioning) {
@ -1266,7 +1269,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
@ -1321,7 +1324,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this); var $this = $$$1(this);
var data = $this.data(DATA_KEY); var data = $this.data(DATA_KEY);
var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config); var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config);
if (!data && _config.toggle && /show|hide/.test(config)) { if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@ -1353,6 +1356,7 @@ var Collapse = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Collapse; return Collapse;
}(); }();
/** /**
@ -1397,7 +1401,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): dropdown.js * Bootstrap (v4.1.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1409,7 +1413,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1452,7 +1456,7 @@ var Dropdown = function ($$$1) {
FORM_CHILD: '.dropdown form', FORM_CHILD: '.dropdown form',
MENU: '.dropdown-menu', MENU: '.dropdown-menu',
NAVBAR_NAV: '.navbar-nav', NAVBAR_NAV: '.navbar-nav',
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
}; };
var AttachmentMap = { var AttachmentMap = {
TOP: 'top-start', TOP: 'top-start',
@ -1467,12 +1471,16 @@ var Dropdown = function ($$$1) {
var Default = { var Default = {
offset: 0, offset: 0,
flip: true, flip: true,
boundary: 'scrollParent' boundary: 'scrollParent',
reference: 'toggle',
display: 'dynamic'
}; };
var DefaultType = { var DefaultType = {
offset: '(number|string|function)', offset: '(number|string|function)',
flip: 'boolean', flip: 'boolean',
boundary: '(string|element)' boundary: '(string|element)',
reference: '(string|element)',
display: 'string'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
@ -1533,11 +1541,15 @@ var Dropdown = function ($$$1) {
throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
} }
var element = this._element; // For dropup with alignment we use the parent as popper container var referenceElement = this._element;
if ($$$1(parent).hasClass(ClassName.DROPUP)) { if (this._config.reference === 'parent') {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { referenceElement = parent;
element = parent; } else if (Util.isElement(this._config.reference)) {
referenceElement = this._config.reference; // Check if it's jQuery element
if (typeof this._config.reference.jquery !== 'undefined') {
referenceElement = this._config.reference[0];
} }
} // If boundary is not `scrollParent`, then set position to `static` } // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries // to allow the menu to "escape" the scroll parent's boundaries
@ -1548,7 +1560,7 @@ var Dropdown = function ($$$1) {
$$$1(parent).addClass(ClassName.POSITION_STATIC); $$$1(parent).addClass(ClassName.POSITION_STATIC);
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
} // If this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
@ -1556,7 +1568,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
this._element.focus(); this._element.focus();
@ -1601,7 +1613,7 @@ var Dropdown = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config; return config;
}; };
@ -1648,7 +1660,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offsetConf.fn = function (data) {
data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
return data; return data;
}; };
} else { } else {
@ -1665,8 +1677,16 @@ var Dropdown = function ($$$1) {
preventOverflow: { preventOverflow: {
boundariesElement: this._config.boundary boundariesElement: this._config.boundary
} }
} } // Disable Popper.js if we have a static display
}; };
if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = {
enabled: false
};
}
return popperConfig; return popperConfig;
}; // Static }; // Static
@ -1731,7 +1751,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
toggles[i].setAttribute('aria-expanded', 'false'); toggles[i].setAttribute('aria-expanded', 'false');
@ -1826,6 +1846,7 @@ var Dropdown = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Dropdown; return Dropdown;
}(); }();
/** /**
@ -1862,7 +1883,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): modal.js * Bootstrap (v4.1.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1874,13 +1895,11 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 300;
var BACKDROP_TRANSITION_DURATION = 150;
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var Default = { var Default = {
@ -1941,7 +1960,6 @@ var Modal = function ($$$1) {
this._isShown = false; this._isShown = false;
this._isBodyOverflowing = false; this._isBodyOverflowing = false;
this._ignoreBackdropClick = false; this._ignoreBackdropClick = false;
this._originalBodyPadding = 0;
this._scrollbarWidth = 0; this._scrollbarWidth = 0;
} // Getters } // Getters
@ -1960,7 +1978,7 @@ var Modal = function ($$$1) {
return; return;
} }
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
this._isTransitioning = true; this._isTransitioning = true;
} }
@ -2022,7 +2040,7 @@ var Modal = function ($$$1) {
} }
this._isShown = false; this._isShown = false;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (transition) { if (transition) {
this._isTransitioning = true; this._isTransitioning = true;
@ -2038,9 +2056,10 @@ var Modal = function ($$$1) {
$$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);
if (transition) { if (transition) {
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, function (event) { $$$1(this._element).one(Util.TRANSITION_END, function (event) {
return _this2._hideModal(event); return _this2._hideModal(event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
this._hideModal(); this._hideModal();
} }
@ -2065,7 +2084,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -2073,7 +2092,7 @@ var Modal = function ($$$1) {
_proto._showElement = function _showElement(relatedTarget) { _proto._showElement = function _showElement(relatedTarget) {
var _this3 = this; var _this3 = this;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// Don't move modal's DOM position // Don't move modal's DOM position
@ -2110,7 +2129,8 @@ var Modal = function ($$$1) {
}; };
if (transition) { if (transition) {
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
} else { } else {
transitionComplete(); transitionComplete();
} }
@ -2188,7 +2208,6 @@ var Modal = function ($$$1) {
var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
if (this._isShown && this._config.backdrop) { if (this._isShown && this._config.backdrop) {
var doAnimate = Util.supportsTransitionEnd() && animate;
this._backdrop = document.createElement('div'); this._backdrop = document.createElement('div');
this._backdrop.className = ClassName.BACKDROP; this._backdrop.className = ClassName.BACKDROP;
@ -2214,7 +2233,7 @@ var Modal = function ($$$1) {
} }
}); });
if (doAnimate) { if (animate) {
Util.reflow(this._backdrop); Util.reflow(this._backdrop);
} }
@ -2224,12 +2243,13 @@ var Modal = function ($$$1) {
return; return;
} }
if (!doAnimate) { if (!animate) {
callback(); callback();
return; return;
} }
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
} else if (!this._isShown && this._backdrop) { } else if (!this._isShown && this._backdrop) {
$$$1(this._backdrop).removeClass(ClassName.SHOW); $$$1(this._backdrop).removeClass(ClassName.SHOW);
@ -2241,8 +2261,10 @@ var Modal = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
} else { } else {
callbackRemove(); callbackRemove();
} }
@ -2304,8 +2326,8 @@ var Modal = function ($$$1) {
}); // Adjust body padding }); // Adjust body padding
var actualPadding = document.body.style.paddingRight; var actualPadding = document.body.style.paddingRight;
var calculatedPadding = $$$1('body').css('padding-right'); var calculatedPadding = $$$1(document.body).css('padding-right');
$$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
} }
}; };
@ -2327,10 +2349,10 @@ var Modal = function ($$$1) {
} }
}); // Restore body padding }); // Restore body padding
var padding = $$$1('body').data('padding-right'); var padding = $$$1(document.body).data('padding-right');
if (typeof padding !== 'undefined') { if (typeof padding !== 'undefined') {
$$$1('body').css('padding-right', padding).removeData('padding-right'); $$$1(document.body).css('padding-right', padding).removeData('padding-right');
} }
}; };
@ -2349,7 +2371,7 @@ var Modal = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); var _config = _objectSpread({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
if (!data) { if (!data) {
data = new Modal(this, _config); data = new Modal(this, _config);
@ -2379,6 +2401,7 @@ var Modal = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Modal; return Modal;
}(); }();
/** /**
@ -2398,7 +2421,7 @@ var Modal = function ($$$1) {
target = $$$1(selector)[0]; target = $$$1(selector)[0];
} }
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data()); var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') { if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault(); event.preventDefault();
@ -2438,7 +2461,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tooltip.js * Bootstrap (v4.1.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2450,11 +2473,10 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var CLASS_PREFIX = 'bs-tooltip'; var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DefaultType = { var DefaultType = {
@ -2700,7 +2722,7 @@ var Tooltip = function ($$$1) {
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
var complete = function complete() { var complete = function complete() {
@ -2717,8 +2739,9 @@ var Tooltip = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2761,15 +2784,16 @@ var Tooltip = function ($$$1) {
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
this._activeTrigger[Trigger.CLICK] = false; this._activeTrigger[Trigger.CLICK] = false;
this._activeTrigger[Trigger.FOCUS] = false; this._activeTrigger[Trigger.FOCUS] = false;
this._activeTrigger[Trigger.HOVER] = false; this._activeTrigger[Trigger.HOVER] = false;
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(tip);
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2860,7 +2884,7 @@ var Tooltip = function ($$$1) {
}); });
if (this.config.selector) { if (this.config.selector) {
this.config = _extends({}, this.config, { this.config = _objectSpread({}, this.config, {
trigger: 'manual', trigger: 'manual',
selector: '' selector: ''
}); });
@ -2954,7 +2978,7 @@ var Tooltip = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), config);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3081,6 +3105,7 @@ var Tooltip = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Tooltip; return Tooltip;
}(); }();
/** /**
@ -3103,7 +3128,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): popover.js * Bootstrap (v4.1.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3115,21 +3140,24 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover'; var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = _extends({}, Tooltip.Default, {
var Default = _objectSpread({}, Tooltip.Default, {
placement: 'right', placement: 'right',
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
}); });
var DefaultType = _extends({}, Tooltip.DefaultType, {
var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
content: '(string|element|function)' content: '(string|element|function)'
}); });
var ClassName = { var ClassName = {
FADE: 'fade', FADE: 'fade',
SHOW: 'show' SHOW: 'show'
@ -3274,6 +3302,7 @@ var Popover = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Popover; return Popover;
}(Tooltip); }(Tooltip);
/** /**
@ -3296,7 +3325,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): scrollspy.js * Bootstrap (v4.1.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3308,7 +3337,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3435,7 +3464,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
if (typeof config.target !== 'string') { if (typeof config.target !== 'string') {
var id = $$$1(config.target).attr('id'); var id = $$$1(config.target).attr('id');
@ -3570,6 +3599,7 @@ var ScrollSpy = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return ScrollSpy; return ScrollSpy;
}(); }();
/** /**
@ -3607,7 +3637,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tab.js * Bootstrap (v4.1.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3619,12 +3649,11 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Event = { var Event = {
HIDE: "hide" + EVENT_KEY, HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY,
@ -3743,14 +3772,15 @@ var Tab = function ($$$1) {
} }
var active = activeElements[0]; var active = activeElements[0];
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);
var complete = function complete() { var complete = function complete() {
return _this2._transitionComplete(element, active, callback); return _this2._transitionComplete(element, active, callback);
}; };
if (active && isTransitioning) { if (active && isTransitioning) {
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(active);
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -3821,6 +3851,7 @@ var Tab = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Tab; return Tab;
}(); }();
/** /**
@ -3854,7 +3885,7 @@ var Tab = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.6): index.js * Bootstrap (v4.0.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3926,3 +3957,4 @@ Object.defineProperty(exports, '__esModule', { value: true });
}, false ); }, false );
} }
})(); })();

2
js/theme.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -27,7 +27,7 @@
}, },
"homepage": "https://understrap.com", "homepage": "https://understrap.com",
"dependencies": { "dependencies": {
"bootstrap": "4.0.0", "bootstrap": "4.1.0",
"browser-sync": "^2.23.6", "browser-sync": "^2.23.6",
"del": "^3.0.0", "del": "^3.0.0",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
@ -28,22 +28,38 @@ function _createClass(Constructor, protoProps, staticProps) {
return Constructor; return Constructor;
} }
function _extends() { function _defineProperty(obj, key, value) {
_extends = Object.assign || function (target) { if (key in obj) {
for (var i = 1; i < arguments.length; i++) { Object.defineProperty(obj, key, {
var source = arguments[i]; value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
for (var key in source) { return obj;
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
} }
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; return target;
};
return _extends.apply(this, arguments);
} }
function _inheritsLoose(subClass, superClass) { function _inheritsLoose(subClass, superClass) {
@ -54,7 +70,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): util.js * Bootstrap (v4.1.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -65,17 +81,18 @@ var Util = function ($$$1) {
* Private TransitionEnd Helpers * Private TransitionEnd Helpers
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var TRANSITION_END = 'transitionend';
var MAX_UID = 1000000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) var MAX_UID = 1000000;
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
} }
function getSpecialTransitionEndEvent() { function getSpecialTransitionEndEvent() {
return { return {
bindType: transition.end, bindType: TRANSITION_END,
delegateType: transition.end, delegateType: TRANSITION_END,
handle: function handle(event) { handle: function handle(event) {
if ($$$1(event.target).is(this)) { if ($$$1(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
@ -86,16 +103,6 @@ var Util = function ($$$1) {
}; };
} }
function transitionEndTest() {
if (typeof window !== 'undefined' && window.QUnit) {
return false;
}
return {
end: 'transitionend'
};
}
function transitionEndEmulator(duration) { function transitionEndEmulator(duration) {
var _this = this; var _this = this;
@ -112,20 +119,9 @@ var Util = function ($$$1) {
} }
function setTransitionEndSupport() { function setTransitionEndSupport() {
transition = transitionEndTest();
$$$1.fn.emulateTransitionEnd = transitionEndEmulator; $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
if (Util.supportsTransitionEnd()) {
$$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
} }
}
function escapeId(selector) {
// We escape IDs in case of special selectors (selector = '#myId:something')
// $.escapeSelector does not exist in jQuery < 3
selector = typeof $$$1.escapeSelector === 'function' ? $$$1.escapeSelector(selector).substr(1) : selector.replace(/(:|\.|\[|\]|,|=|@)/g, '\\$1');
return selector;
}
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Public Util Api * Public Util Api
@ -148,11 +144,6 @@ var Util = function ($$$1) {
if (!selector || selector === '#') { if (!selector || selector === '#') {
selector = element.getAttribute('href') || ''; selector = element.getAttribute('href') || '';
} // If it's an ID
if (selector.charAt(0) === '#') {
selector = escapeId(selector);
} }
try { try {
@ -162,14 +153,32 @@ var Util = function ($$$1) {
return null; return null;
} }
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) {
return 0;
} // Get transition-duration of the element
var transitionDuration = $$$1(element).css('transition-duration');
var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
if (!floatTransitionDuration) {
return 0;
} // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
},
reflow: function reflow(element) { reflow: function reflow(element) {
return element.offsetHeight; return element.offsetHeight;
}, },
triggerTransitionEnd: function triggerTransitionEnd(element) { triggerTransitionEnd: function triggerTransitionEnd(element) {
$$$1(element).trigger(transition.end); $$$1(element).trigger(TRANSITION_END);
}, },
// TODO: Remove in v5
supportsTransitionEnd: function supportsTransitionEnd() { supportsTransitionEnd: function supportsTransitionEnd() {
return Boolean(transition); return Boolean(TRANSITION_END);
}, },
isElement: function isElement(obj) { isElement: function isElement(obj) {
return (obj[0] || obj).nodeType; return (obj[0] || obj).nodeType;
@ -194,7 +203,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): alert.js * Bootstrap (v4.1.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -206,12 +215,11 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.alert'; var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Selector = { var Selector = {
DISMISS: '[data-dismiss="alert"]' DISMISS: '[data-dismiss="alert"]'
}; };
@ -289,15 +297,16 @@ var Alert = function ($$$1) {
$$$1(element).removeClass(ClassName.SHOW); $$$1(element).removeClass(ClassName.SHOW);
if (!Util.supportsTransitionEnd() || !$$$1(element).hasClass(ClassName.FADE)) { if (!$$$1(element).hasClass(ClassName.FADE)) {
this._destroyElement(element); this._destroyElement(element);
return; return;
} }
var transitionDuration = Util.getTransitionDurationFromElement(element);
$$$1(element).one(Util.TRANSITION_END, function (event) { $$$1(element).one(Util.TRANSITION_END, function (event) {
return _this._destroyElement(element, event); return _this._destroyElement(element, event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
}; };
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
@ -337,6 +346,7 @@ var Alert = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Alert; return Alert;
}(); }();
/** /**
@ -366,7 +376,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): button.js * Bootstrap (v4.1.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -378,7 +388,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -488,6 +498,7 @@ var Button = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Button; return Button;
}(); }();
/** /**
@ -529,7 +540,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): carousel.js * Bootstrap (v4.1.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -541,12 +552,11 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
@ -655,7 +665,7 @@ var Carousel = function ($$$1) {
this._isPaused = true; this._isPaused = true;
} }
if ($$$1(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { if ($$$1(this._element).find(Selector.NEXT_PREV)[0]) {
Util.triggerTransitionEnd(this._element); Util.triggerTransitionEnd(this._element);
this.cycle(true); this.cycle(true);
} }
@ -723,7 +733,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -894,11 +904,12 @@ var Carousel = function ($$$1) {
to: nextElementIndex to: nextElementIndex
}); });
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.SLIDE)) { if ($$$1(this._element).hasClass(ClassName.SLIDE)) {
$$$1(nextElement).addClass(orderClassName); $$$1(nextElement).addClass(orderClassName);
Util.reflow(nextElement); Util.reflow(nextElement);
$$$1(activeElement).addClass(directionalClassName); $$$1(activeElement).addClass(directionalClassName);
$$$1(nextElement).addClass(directionalClassName); $$$1(nextElement).addClass(directionalClassName);
var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
$$$1(activeElement).one(Util.TRANSITION_END, function () { $$$1(activeElement).one(Util.TRANSITION_END, function () {
$$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); $$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE);
$$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); $$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName);
@ -906,7 +917,7 @@ var Carousel = function ($$$1) {
setTimeout(function () { setTimeout(function () {
return $$$1(_this3._element).trigger(slidEvent); return $$$1(_this3._element).trigger(slidEvent);
}, 0); }, 0);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
$$$1(activeElement).removeClass(ClassName.ACTIVE); $$$1(activeElement).removeClass(ClassName.ACTIVE);
$$$1(nextElement).addClass(ClassName.ACTIVE); $$$1(nextElement).addClass(ClassName.ACTIVE);
@ -924,10 +935,10 @@ var Carousel = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Default, $$$1(this).data()); var _config = _objectSpread({}, Default, $$$1(this).data());
if (typeof config === 'object') { if (typeof config === 'object') {
_config = _extends({}, _config, config); _config = _objectSpread({}, _config, config);
} }
var action = typeof config === 'string' ? config : _config.slide; var action = typeof config === 'string' ? config : _config.slide;
@ -965,7 +976,8 @@ var Carousel = function ($$$1) {
return; return;
} }
var config = _extends({}, $$$1(target).data(), $$$1(this).data()); var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data());
var slideIndex = this.getAttribute('data-slide-to'); var slideIndex = this.getAttribute('data-slide-to');
if (slideIndex) { if (slideIndex) {
@ -992,6 +1004,7 @@ var Carousel = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Carousel; return Carousel;
}(); }();
/** /**
@ -1028,7 +1041,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): collapse.js * Bootstrap (v4.1.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1040,12 +1053,11 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 600;
var Default = { var Default = {
toggle: true, toggle: true,
parent: '' parent: ''
@ -1187,14 +1199,10 @@ var Collapse = function ($$$1) {
$$$1(_this._element).trigger(Event.SHOWN); $$$1(_this._element).trigger(Event.SHOWN);
}; };
if (!Util.supportsTransitionEnd()) {
complete();
return;
}
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
var scrollSize = "scroll" + capitalizedDimension; var scrollSize = "scroll" + capitalizedDimension;
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
this._element.style[dimension] = this._element[scrollSize] + "px"; this._element.style[dimension] = this._element[scrollSize] + "px";
}; };
@ -1242,13 +1250,8 @@ var Collapse = function ($$$1) {
}; };
this._element.style[dimension] = ''; this._element.style[dimension] = '';
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
if (!Util.supportsTransitionEnd()) { $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
complete();
return;
}
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
}; };
_proto.setTransitioning = function setTransitioning(isTransitioning) { _proto.setTransitioning = function setTransitioning(isTransitioning) {
@ -1266,7 +1269,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
config.toggle = Boolean(config.toggle); // Coerce string values config.toggle = Boolean(config.toggle); // Coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
@ -1321,7 +1324,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this); var $this = $$$1(this);
var data = $this.data(DATA_KEY); var data = $this.data(DATA_KEY);
var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config); var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config);
if (!data && _config.toggle && /show|hide/.test(config)) { if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@ -1353,6 +1356,7 @@ var Collapse = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Collapse; return Collapse;
}(); }();
/** /**
@ -1397,7 +1401,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): dropdown.js * Bootstrap (v4.1.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1409,7 +1413,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1452,7 +1456,7 @@ var Dropdown = function ($$$1) {
FORM_CHILD: '.dropdown form', FORM_CHILD: '.dropdown form',
MENU: '.dropdown-menu', MENU: '.dropdown-menu',
NAVBAR_NAV: '.navbar-nav', NAVBAR_NAV: '.navbar-nav',
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)' VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
}; };
var AttachmentMap = { var AttachmentMap = {
TOP: 'top-start', TOP: 'top-start',
@ -1467,12 +1471,16 @@ var Dropdown = function ($$$1) {
var Default = { var Default = {
offset: 0, offset: 0,
flip: true, flip: true,
boundary: 'scrollParent' boundary: 'scrollParent',
reference: 'toggle',
display: 'dynamic'
}; };
var DefaultType = { var DefaultType = {
offset: '(number|string|function)', offset: '(number|string|function)',
flip: 'boolean', flip: 'boolean',
boundary: '(string|element)' boundary: '(string|element)',
reference: '(string|element)',
display: 'string'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
@ -1533,11 +1541,15 @@ var Dropdown = function ($$$1) {
throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)');
} }
var element = this._element; // For dropup with alignment we use the parent as popper container var referenceElement = this._element;
if ($$$1(parent).hasClass(ClassName.DROPUP)) { if (this._config.reference === 'parent') {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { referenceElement = parent;
element = parent; } else if (Util.isElement(this._config.reference)) {
referenceElement = this._config.reference; // Check if it's jQuery element
if (typeof this._config.reference.jquery !== 'undefined') {
referenceElement = this._config.reference[0];
} }
} // If boundary is not `scrollParent`, then set position to `static` } // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries // to allow the menu to "escape" the scroll parent's boundaries
@ -1548,7 +1560,7 @@ var Dropdown = function ($$$1) {
$$$1(parent).addClass(ClassName.POSITION_STATIC); $$$1(parent).addClass(ClassName.POSITION_STATIC);
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());
} // If this is a touch-enabled device we add extra } // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
@ -1556,7 +1568,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
this._element.focus(); this._element.focus();
@ -1601,7 +1613,7 @@ var Dropdown = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config);
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config; return config;
}; };
@ -1648,7 +1660,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offsetConf.fn = function (data) {
data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {});
return data; return data;
}; };
} else { } else {
@ -1665,8 +1677,16 @@ var Dropdown = function ($$$1) {
preventOverflow: { preventOverflow: {
boundariesElement: this._config.boundary boundariesElement: this._config.boundary
} }
} } // Disable Popper.js if we have a static display
}; };
if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = {
enabled: false
};
}
return popperConfig; return popperConfig;
}; // Static }; // Static
@ -1731,7 +1751,7 @@ var Dropdown = function ($$$1) {
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
toggles[i].setAttribute('aria-expanded', 'false'); toggles[i].setAttribute('aria-expanded', 'false');
@ -1826,6 +1846,7 @@ var Dropdown = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Dropdown; return Dropdown;
}(); }();
/** /**
@ -1862,7 +1883,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): modal.js * Bootstrap (v4.1.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1874,13 +1895,11 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 300;
var BACKDROP_TRANSITION_DURATION = 150;
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
var Default = { var Default = {
@ -1941,7 +1960,6 @@ var Modal = function ($$$1) {
this._isShown = false; this._isShown = false;
this._isBodyOverflowing = false; this._isBodyOverflowing = false;
this._ignoreBackdropClick = false; this._ignoreBackdropClick = false;
this._originalBodyPadding = 0;
this._scrollbarWidth = 0; this._scrollbarWidth = 0;
} // Getters } // Getters
@ -1960,7 +1978,7 @@ var Modal = function ($$$1) {
return; return;
} }
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
this._isTransitioning = true; this._isTransitioning = true;
} }
@ -2022,7 +2040,7 @@ var Modal = function ($$$1) {
} }
this._isShown = false; this._isShown = false;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (transition) { if (transition) {
this._isTransitioning = true; this._isTransitioning = true;
@ -2038,9 +2056,10 @@ var Modal = function ($$$1) {
$$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); $$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS);
if (transition) { if (transition) {
var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._element).one(Util.TRANSITION_END, function (event) { $$$1(this._element).one(Util.TRANSITION_END, function (event) {
return _this2._hideModal(event); return _this2._hideModal(event);
}).emulateTransitionEnd(TRANSITION_DURATION); }).emulateTransitionEnd(transitionDuration);
} else { } else {
this._hideModal(); this._hideModal();
} }
@ -2065,7 +2084,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -2073,7 +2092,7 @@ var Modal = function ($$$1) {
_proto._showElement = function _showElement(relatedTarget) { _proto._showElement = function _showElement(relatedTarget) {
var _this3 = this; var _this3 = this;
var transition = Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE); var transition = $$$1(this._element).hasClass(ClassName.FADE);
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
// Don't move modal's DOM position // Don't move modal's DOM position
@ -2110,7 +2129,8 @@ var Modal = function ($$$1) {
}; };
if (transition) { if (transition) {
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this._element);
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
} else { } else {
transitionComplete(); transitionComplete();
} }
@ -2188,7 +2208,6 @@ var Modal = function ($$$1) {
var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
if (this._isShown && this._config.backdrop) { if (this._isShown && this._config.backdrop) {
var doAnimate = Util.supportsTransitionEnd() && animate;
this._backdrop = document.createElement('div'); this._backdrop = document.createElement('div');
this._backdrop.className = ClassName.BACKDROP; this._backdrop.className = ClassName.BACKDROP;
@ -2214,7 +2233,7 @@ var Modal = function ($$$1) {
} }
}); });
if (doAnimate) { if (animate) {
Util.reflow(this._backdrop); Util.reflow(this._backdrop);
} }
@ -2224,12 +2243,13 @@ var Modal = function ($$$1) {
return; return;
} }
if (!doAnimate) { if (!animate) {
callback(); callback();
return; return;
} }
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
} else if (!this._isShown && this._backdrop) { } else if (!this._isShown && this._backdrop) {
$$$1(this._backdrop).removeClass(ClassName.SHOW); $$$1(this._backdrop).removeClass(ClassName.SHOW);
@ -2241,8 +2261,10 @@ var Modal = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this._element).hasClass(ClassName.FADE)) { if ($$$1(this._element).hasClass(ClassName.FADE)) {
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
} else { } else {
callbackRemove(); callbackRemove();
} }
@ -2304,8 +2326,8 @@ var Modal = function ($$$1) {
}); // Adjust body padding }); // Adjust body padding
var actualPadding = document.body.style.paddingRight; var actualPadding = document.body.style.paddingRight;
var calculatedPadding = $$$1('body').css('padding-right'); var calculatedPadding = $$$1(document.body).css('padding-right');
$$$1('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); $$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
} }
}; };
@ -2327,10 +2349,10 @@ var Modal = function ($$$1) {
} }
}); // Restore body padding }); // Restore body padding
var padding = $$$1('body').data('padding-right'); var padding = $$$1(document.body).data('padding-right');
if (typeof padding !== 'undefined') { if (typeof padding !== 'undefined') {
$$$1('body').css('padding-right', padding).removeData('padding-right'); $$$1(document.body).css('padding-right', padding).removeData('padding-right');
} }
}; };
@ -2349,7 +2371,7 @@ var Modal = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); var _config = _objectSpread({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
if (!data) { if (!data) {
data = new Modal(this, _config); data = new Modal(this, _config);
@ -2379,6 +2401,7 @@ var Modal = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return Modal; return Modal;
}(); }();
/** /**
@ -2398,7 +2421,7 @@ var Modal = function ($$$1) {
target = $$$1(selector)[0]; target = $$$1(selector)[0];
} }
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data()); var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') { if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault(); event.preventDefault();
@ -2438,7 +2461,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tooltip.js * Bootstrap (v4.1.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2450,11 +2473,10 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var CLASS_PREFIX = 'bs-tooltip'; var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DefaultType = { var DefaultType = {
@ -2700,7 +2722,7 @@ var Tooltip = function ($$$1) {
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().on('mouseover', null, $$$1.noop); $$$1(document.body).children().on('mouseover', null, $$$1.noop);
} }
var complete = function complete() { var complete = function complete() {
@ -2717,8 +2739,9 @@ var Tooltip = function ($$$1) {
} }
}; };
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2761,15 +2784,16 @@ var Tooltip = function ($$$1) {
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
$$$1('body').children().off('mouseover', null, $$$1.noop); $$$1(document.body).children().off('mouseover', null, $$$1.noop);
} }
this._activeTrigger[Trigger.CLICK] = false; this._activeTrigger[Trigger.CLICK] = false;
this._activeTrigger[Trigger.FOCUS] = false; this._activeTrigger[Trigger.FOCUS] = false;
this._activeTrigger[Trigger.HOVER] = false; this._activeTrigger[Trigger.HOVER] = false;
if (Util.supportsTransitionEnd() && $$$1(this.tip).hasClass(ClassName.FADE)) { if ($$$1(this.tip).hasClass(ClassName.FADE)) {
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(tip);
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -2860,7 +2884,7 @@ var Tooltip = function ($$$1) {
}); });
if (this.config.selector) { if (this.config.selector) {
this.config = _extends({}, this.config, { this.config = _objectSpread({}, this.config, {
trigger: 'manual', trigger: 'manual',
selector: '' selector: ''
}); });
@ -2954,7 +2978,7 @@ var Tooltip = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config); config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), config);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3081,6 +3105,7 @@ var Tooltip = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Tooltip; return Tooltip;
}(); }();
/** /**
@ -3103,7 +3128,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): popover.js * Bootstrap (v4.1.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3115,21 +3140,24 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover'; var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = _extends({}, Tooltip.Default, {
var Default = _objectSpread({}, Tooltip.Default, {
placement: 'right', placement: 'right',
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
}); });
var DefaultType = _extends({}, Tooltip.DefaultType, {
var DefaultType = _objectSpread({}, Tooltip.DefaultType, {
content: '(string|element|function)' content: '(string|element|function)'
}); });
var ClassName = { var ClassName = {
FADE: 'fade', FADE: 'fade',
SHOW: 'show' SHOW: 'show'
@ -3274,6 +3302,7 @@ var Popover = function ($$$1) {
return DefaultType; return DefaultType;
} }
}]); }]);
return Popover; return Popover;
}(Tooltip); }(Tooltip);
/** /**
@ -3296,7 +3325,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): scrollspy.js * Bootstrap (v4.1.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3308,7 +3337,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3435,7 +3464,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _extends({}, Default, config); config = _objectSpread({}, Default, config);
if (typeof config.target !== 'string') { if (typeof config.target !== 'string') {
var id = $$$1(config.target).attr('id'); var id = $$$1(config.target).attr('id');
@ -3570,6 +3599,7 @@ var ScrollSpy = function ($$$1) {
return Default; return Default;
} }
}]); }]);
return ScrollSpy; return ScrollSpy;
}(); }();
/** /**
@ -3607,7 +3637,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0): tab.js * Bootstrap (v4.1.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3619,12 +3649,11 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0'; var VERSION = '4.1.0';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var TRANSITION_DURATION = 150;
var Event = { var Event = {
HIDE: "hide" + EVENT_KEY, HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY, HIDDEN: "hidden" + EVENT_KEY,
@ -3743,14 +3772,15 @@ var Tab = function ($$$1) {
} }
var active = activeElements[0]; var active = activeElements[0];
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE);
var complete = function complete() { var complete = function complete() {
return _this2._transitionComplete(element, active, callback); return _this2._transitionComplete(element, active, callback);
}; };
if (active && isTransitioning) { if (active && isTransitioning) {
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); var transitionDuration = Util.getTransitionDurationFromElement(active);
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
} else { } else {
complete(); complete();
} }
@ -3821,6 +3851,7 @@ var Tab = function ($$$1) {
return VERSION; return VERSION;
} }
}]); }]);
return Tab; return Tab;
}(); }();
/** /**
@ -3854,7 +3885,7 @@ var Tab = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-alpha.6): index.js * Bootstrap (v4.0.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */

File diff suppressed because one or more lines are too long

View File

@ -5,17 +5,20 @@
margin-bottom: $breadcrumb-margin-bottom; margin-bottom: $breadcrumb-margin-bottom;
list-style: none; list-style: none;
background-color: $breadcrumb-bg; background-color: $breadcrumb-bg;
@include border-radius($border-radius); @include border-radius($breadcrumb-border-radius);
} }
.breadcrumb-item { .breadcrumb-item {
// The separator between breadcrumbs (by default, a forward-slash: "/") // The separator between breadcrumbs (by default, a forward-slash: "/")
+ .breadcrumb-item::before { + .breadcrumb-item {
padding-left: $breadcrumb-item-padding;
&::before {
display: inline-block; // Suppress underlining of the separator in modern browsers display: inline-block; // Suppress underlining of the separator in modern browsers
padding-right: $breadcrumb-item-padding; padding-right: $breadcrumb-item-padding;
padding-left: $breadcrumb-item-padding;
color: $breadcrumb-divider-color; color: $breadcrumb-divider-color;
content: "#{$breadcrumb-divider}"; content: $breadcrumb-divider;
}
} }
// IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built

View File

@ -76,9 +76,15 @@
padding-right: $btn-padding-x * .75; padding-right: $btn-padding-x * .75;
padding-left: $btn-padding-x * .75; padding-left: $btn-padding-x * .75;
&::after { &::after,
.dropup &::after,
.dropright &::after {
margin-left: 0; margin-left: 0;
} }
.dropleft &::before {
margin-right: 0;
}
} }
.btn-sm + .dropdown-toggle-split { .btn-sm + .dropdown-toggle-split {

View File

@ -100,6 +100,7 @@ fieldset:disabled a.btn {
&:disabled, &:disabled,
&.disabled { &.disabled {
color: $btn-link-disabled-color; color: $btn-link-disabled-color;
pointer-events: none;
} }
// No need for an active state here // No need for an active state here

View File

@ -153,7 +153,7 @@
.card { .card {
display: flex; display: flex;
// Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%; flex: 1 0 0%;
flex-direction: column; flex-direction: column;
margin-right: $card-deck-margin; margin-right: $card-deck-margin;
@ -183,7 +183,7 @@
// The child selector allows nested `.card` within `.card-group` // The child selector allows nested `.card` within `.card-group`
// to display properly. // to display properly.
> .card { > .card {
// Flexbugs #4: https://github.com/philipwalton/flexbugs#4-flex-shorthand-declarations-with-unitless-flex-basis-values-are-ignored // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
flex: 1 0 0%; flex: 1 0 0%;
margin-bottom: 0; margin-bottom: 0;
@ -261,6 +261,8 @@
@include media-breakpoint-up(sm) { @include media-breakpoint-up(sm) {
column-count: $card-columns-count; column-count: $card-columns-count;
column-gap: $card-columns-gap; column-gap: $card-columns-gap;
orphans: 1;
widows: 1;
.card { .card {
display: inline-block; // Don't let them vertically span multiple columns display: inline-block; // Don't let them vertically span multiple columns
@ -268,3 +270,32 @@
} }
} }
} }
//
// Accordion
//
.accordion {
.card:not(:first-of-type):not(:last-of-type) {
border-bottom: 0;
border-radius: 0;
}
.card:not(:first-of-type) {
.card-header:first-child {
border-radius: 0;
}
}
.card:first-of-type {
border-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.card:last-of-type {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
}

View File

@ -1,4 +1,13 @@
// Wrapper for the slide container and indicators // Notes on the classes:
//
// 1. The .carousel-item-left and .carousel-item-right is used to indicate where
// the active slide is heading.
// 2. .active.carousel-item is the current slide.
// 3. .active.carousel-item-left and .active.carousel-item-right is the current
// slide in its in-transition state. Only one of these occurs at a time.
// 4. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right
// is the upcoming slide in transition.
.carousel { .carousel {
position: relative; position: relative;
} }
@ -31,7 +40,6 @@
top: 0; top: 0;
} }
// CSS3 transforms when supported by the browser
.carousel-item-next.carousel-item-left, .carousel-item-next.carousel-item-left,
.carousel-item-prev.carousel-item-right { .carousel-item-prev.carousel-item-right {
transform: translateX(0); transform: translateX(0);
@ -60,6 +68,42 @@
} }
//
// Alternate transitions
//
.carousel-fade {
.carousel-item {
opacity: 0;
transition-duration: .6s;
transition-property: opacity;
}
.carousel-item.active,
.carousel-item-next.carousel-item-left,
.carousel-item-prev.carousel-item-right {
opacity: 1;
}
.active.carousel-item-left,
.active.carousel-item-right {
opacity: 0;
}
.carousel-item-next,
.carousel-item-prev,
.carousel-item.active,
.active.carousel-item-left,
.active.carousel-item-prev {
transform: translateX(0);
@supports (transform-style: preserve-3d) {
transform: translate3d(0, 0, 0);
}
}
}
// //
// Left/right controls for nav // Left/right controls for nav
// //
@ -91,13 +135,13 @@
.carousel-control-prev { .carousel-control-prev {
left: 0; left: 0;
@if $enable-gradients { @if $enable-gradients {
background: linear-gradient(90deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001)); background: linear-gradient(90deg, rgba($black, .25), rgba($black, .001));
} }
} }
.carousel-control-next { .carousel-control-next {
right: 0; right: 0;
@if $enable-gradients { @if $enable-gradients {
background: linear-gradient(270deg, rgba(0, 0, 0, .25), rgba(0, 0, 0, .001)); background: linear-gradient(270deg, rgba($black, .25), rgba($black, .001));
} }
} }

View File

@ -157,7 +157,7 @@
// Select // Select
// //
// Replaces the browser default select with a custom one, mostly pulled from // Replaces the browser default select with a custom one, mostly pulled from
// http://primercss.io. // https://primer.github.io/.
// //
.custom-select { .custom-select {
@ -247,11 +247,11 @@
margin: 0; margin: 0;
opacity: 0; opacity: 0;
&:focus ~ .custom-file-control { &:focus ~ .custom-file-label {
border-color: $custom-file-focus-border-color; border-color: $custom-file-focus-border-color;
box-shadow: $custom-file-focus-box-shadow; box-shadow: $custom-file-focus-box-shadow;
&::before { &::after {
border-color: $custom-file-focus-border-color; border-color: $custom-file-focus-border-color;
} }
} }
@ -295,3 +295,126 @@
@include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0); @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);
} }
} }
// Range
//
// Style range inputs the same across browsers. Vendor-specific rules for psuedo
// elements cannot be mixed. As such, there are no shared styles for focus or
// active states on prefixed selectors.
.custom-range {
width: 100%;
padding-left: 0; // Firefox specific
background-color: transparent;
appearance: none;
&:focus {
outline: none;
}
&::-moz-focus-outer {
border: 0;
}
&::-webkit-slider-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
margin-top: -($custom-range-thumb-width * .25); // Webkit specific?
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
appearance: none;
&:focus {
outline: none;
box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
}
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-webkit-slider-runnable-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent; // Why?
cursor: $custom-range-track-cursor;
background-color: $custom-range-track-bg;
border-color: transparent;
@include border-radius($custom-range-track-border-radius);
@include box-shadow($custom-range-track-box-shadow);
}
&::-moz-range-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
appearance: none;
&:focus {
outline: none;
box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
}
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-moz-range-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent;
cursor: $custom-range-track-cursor;
background-color: $custom-range-track-bg;
border-color: transparent; // Firefox specific?
@include border-radius($custom-range-track-border-radius);
@include box-shadow($custom-range-track-box-shadow);
}
&::-ms-thumb {
width: $custom-range-thumb-width;
height: $custom-range-thumb-height;
@include gradient-bg($custom-range-thumb-bg);
border: $custom-range-thumb-border;
@include border-radius($custom-range-thumb-border-radius);
@include box-shadow($custom-range-thumb-box-shadow);
appearance: none;
&:focus {
outline: none;
box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
}
&:active {
@include gradient-bg($custom-range-thumb-active-bg);
}
}
&::-ms-track {
width: $custom-range-track-width;
height: $custom-range-track-height;
color: transparent;
cursor: $custom-range-track-cursor;
background-color: transparent;
border-color: transparent;
border-width: ($custom-range-thumb-height * .5);
@include box-shadow($custom-range-track-box-shadow);
}
&::-ms-fill-lower {
background-color: $custom-range-track-bg;
@include border-radius($custom-range-track-border-radius);
}
&::-ms-fill-upper {
margin-right: 15px; // arbitrary?
background-color: $custom-range-track-bg;
@include border-radius($custom-range-track-border-radius);
}
}

View File

@ -1,6 +1,8 @@
// The dropdown wrapper (`<div>`) // The dropdown wrapper (`<div>`)
.dropup, .dropup,
.dropdown { .dropright,
.dropdown,
.dropleft {
position: relative; position: relative;
} }
@ -31,10 +33,17 @@
@include box-shadow($dropdown-box-shadow); @include box-shadow($dropdown-box-shadow);
} }
.dropdown-menu-right {
right: 0;
left: auto;
}
// Allow for dropdowns to go bottom up (aka, dropup-menu) // Allow for dropdowns to go bottom up (aka, dropup-menu)
// Just add .dropup after the standard .dropdown class and you're set. // Just add .dropup after the standard .dropdown class and you're set.
.dropup { .dropup {
.dropdown-menu { .dropdown-menu {
top: auto;
bottom: 100%;
margin-top: 0; margin-top: 0;
margin-bottom: $dropdown-spacer; margin-bottom: $dropdown-spacer;
} }
@ -46,6 +55,9 @@
.dropright { .dropright {
.dropdown-menu { .dropdown-menu {
top: 0;
right: auto;
left: 100%;
margin-top: 0; margin-top: 0;
margin-left: $dropdown-spacer; margin-left: $dropdown-spacer;
} }
@ -60,6 +72,9 @@
.dropleft { .dropleft {
.dropdown-menu { .dropdown-menu {
top: 0;
right: 100%;
left: auto;
margin-top: 0; margin-top: 0;
margin-right: $dropdown-spacer; margin-right: $dropdown-spacer;
} }
@ -72,6 +87,19 @@
} }
} }
// When enabled Popper.js, reset basic dropdown position
// stylelint-disable no-duplicate-selectors
.dropdown-menu {
&[x-placement^="top"],
&[x-placement^="right"],
&[x-placement^="bottom"],
&[x-placement^="left"] {
right: auto;
bottom: auto;
}
}
// stylelint-enable no-duplicate-selectors
// Dividers (basically an `<hr>`) within the dropdown // Dividers (basically an `<hr>`) within the dropdown
.dropdown-divider { .dropdown-divider {
@include nav-divider($dropdown-divider-bg); @include nav-divider($dropdown-divider-bg);
@ -129,3 +157,10 @@
color: $dropdown-header-color; color: $dropdown-header-color;
white-space: nowrap; // as with > li > a white-space: nowrap; // as with > li > a
} }
// Dropdown text
.dropdown-item-text {
display: block;
padding: $dropdown-item-padding-y $dropdown-item-padding-x;
color: $dropdown-link-color;
}

View File

@ -121,6 +121,7 @@ select.form-control {
padding-bottom: $input-padding-y; padding-bottom: $input-padding-y;
margin-bottom: 0; // match inputs if this class comes on inputs with default margins margin-bottom: 0; // match inputs if this class comes on inputs with default margins
line-height: $input-line-height; line-height: $input-line-height;
color: $input-plaintext-color;
background-color: transparent; background-color: transparent;
border: solid transparent; border: solid transparent;
border-width: $input-border-width 0; border-width: $input-border-width 0;
@ -302,7 +303,8 @@ select.form-control-lg {
display: inline-block; display: inline-block;
} }
.input-group { .input-group,
.custom-select {
width: auto; width: auto;
} }

View File

@ -79,7 +79,7 @@
// Request a theme color level // Request a theme color level
@function theme-color-level($color-name: "primary", $level: 0) { @function theme-color-level($color-name: "primary", $level: 0) {
$color: theme-color($color-name); $color: theme-color($color-name);
$color-base: if($level > 0, #000, #fff); $color-base: if($level > 0, $black, $white);
$level: abs($level); $level: abs($level);
@return mix($color-base, $color, $level * $theme-color-interval); @return mix($color-base, $color, $level * $theme-color-interval);

View File

@ -46,9 +46,9 @@
align-items: center; align-items: center;
&:not(:last-child) .custom-file-label, &:not(:last-child) .custom-file-label,
&:not(:last-child) .custom-file-label::before { @include border-right-radius(0); } &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
&:not(:first-child) .custom-file-label, &:not(:first-child) .custom-file-label,
&:not(:first-child) .custom-file-label::before { @include border-left-radius(0); } &:not(:first-child) .custom-file-label::after { @include border-left-radius(0); }
} }
} }

View File

@ -36,7 +36,6 @@
// // Layout // // Layout
@import "mixins/clearfix"; @import "mixins/clearfix";
// @import "mixins/navbar-align";
@import "mixins/grid-framework"; @import "mixins/grid-framework";
@import "mixins/grid"; @import "mixins/grid";
@import "mixins/float"; @import "mixins/float";

View File

@ -67,7 +67,7 @@
background-color: $modal-content-bg; background-color: $modal-content-bg;
background-clip: padding-box; background-clip: padding-box;
border: $modal-content-border-width solid $modal-content-border-color; border: $modal-content-border-width solid $modal-content-border-color;
@include border-radius($border-radius-lg); @include border-radius($modal-content-border-radius);
@include box-shadow($modal-content-box-shadow-xs); @include box-shadow($modal-content-box-shadow-xs);
// Remove focus outline from opened modal // Remove focus outline from opened modal
outline: 0; outline: 0;
@ -96,7 +96,7 @@
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
padding: $modal-header-padding; padding: $modal-header-padding;
border-bottom: $modal-header-border-width solid $modal-header-border-color; border-bottom: $modal-header-border-width solid $modal-header-border-color;
@include border-top-radius($border-radius-lg); @include border-top-radius($modal-content-border-radius);
.close { .close {
padding: $modal-header-padding; padding: $modal-header-padding;

View File

@ -162,11 +162,6 @@
position: absolute; position: absolute;
} }
.dropdown-menu-right {
right: 0;
left: auto; // Reset the default from `.dropdown-menu`
}
.nav-link { .nav-link {
padding-right: $navbar-nav-link-padding-x; padding-right: $navbar-nav-link-padding-x;
padding-left: $navbar-nav-link-padding-x; padding-left: $navbar-nav-link-padding-x;
@ -189,13 +184,6 @@
.navbar-toggler { .navbar-toggler {
display: none; display: none;
} }
.dropup {
.dropdown-menu {
top: auto;
bottom: 100%;
}
}
} }
} }
} }

View File

@ -15,6 +15,7 @@
border: $pagination-border-width solid $pagination-border-color; border: $pagination-border-width solid $pagination-border-color;
&:hover { &:hover {
z-index: 2;
color: $pagination-hover-color; color: $pagination-hover-color;
text-decoration: none; text-decoration: none;
background-color: $pagination-hover-bg; background-color: $pagination-hover-bg;
@ -23,7 +24,7 @@
&:focus { &:focus {
z-index: 2; z-index: 2;
outline: 0; outline: $pagination-focus-outline;
box-shadow: $pagination-focus-box-shadow; box-shadow: $pagination-focus-box-shadow;
} }

View File

@ -5,7 +5,7 @@
// ========================================================================== // ==========================================================================
// Print styles. // Print styles.
// Inlined to avoid the additional HTTP request: // Inlined to avoid the additional HTTP request:
// http://www.phpied.com/delay-loading-your-print-css/ // https://www.phpied.com/delay-loading-your-print-css/
// ========================================================================== // ==========================================================================
@if $enable-print-styles { @if $enable-print-styles {
@ -14,7 +14,7 @@
*::before, *::before,
*::after { *::after {
// Bootstrap specific; comment out `color` and `background` // Bootstrap specific; comment out `color` and `background`
//color: #000 !important; // Black prints faster: http://www.sanbeiji.com/archives/953 //color: $black !important; // Black prints faster
text-shadow: none !important; text-shadow: none !important;
//background: transparent !important; //background: transparent !important;
box-shadow: none !important; box-shadow: none !important;
@ -51,7 +51,7 @@
} }
pre, pre,
blockquote { blockquote {
border: $border-width solid #999; // Bootstrap custom code; using `$border-width` instead of 1px border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px
page-break-inside: avoid; page-break-inside: avoid;
} }
@ -101,7 +101,7 @@
display: none; display: none;
} }
.badge { .badge {
border: $border-width solid #000; border: $border-width solid $black;
} }
.table { .table {
@ -109,13 +109,13 @@
td, td,
th { th {
background-color: #fff !important; background-color: $white !important;
} }
} }
.table-bordered { .table-bordered {
th, th,
td { td {
border: 1px solid #ddd !important; border: 1px solid $gray-300 !important;
} }
} }

View File

@ -19,6 +19,7 @@
justify-content: center; justify-content: center;
color: $progress-bar-color; color: $progress-bar-color;
text-align: center; text-align: center;
white-space: nowrap;
background-color: $progress-bar-bg; background-color: $progress-bar-bg;
@include transition($progress-bar-transition); @include transition($progress-bar-transition);
} }

View File

@ -30,7 +30,7 @@ html {
-webkit-text-size-adjust: 100%; // 4 -webkit-text-size-adjust: 100%; // 4
-ms-text-size-adjust: 100%; // 4 -ms-text-size-adjust: 100%; // 4
-ms-overflow-style: scrollbar; // 5 -ms-overflow-style: scrollbar; // 5
-webkit-tap-highlight-color: rgba(0, 0, 0, 0); // 6 -webkit-tap-highlight-color: rgba($black, 0); // 6
} }
// IE10+ doesn't honor `<meta name="viewport">` in some cases. // IE10+ doesn't honor `<meta name="viewport">` in some cases.
@ -290,7 +290,7 @@ table {
caption { caption {
padding-top: $table-cell-padding; padding-top: $table-cell-padding;
padding-bottom: $table-cell-padding; padding-bottom: $table-cell-padding;
color: $text-muted; color: $table-caption-color;
text-align: left; text-align: left;
caption-side: bottom; caption-side: bottom;
} }
@ -309,7 +309,7 @@ th {
label { label {
// Allow labels to use `margin` for spacing. // Allow labels to use `margin` for spacing.
display: inline-block; display: inline-block;
margin-bottom: .5rem; margin-bottom: $label-margin-bottom;
} }
// Remove the default `border-radius` that macOS Chrome adds. // Remove the default `border-radius` that macOS Chrome adds.

View File

@ -42,9 +42,9 @@
} }
// Bordered version // Border versions
// //
// Add borders all around the table and between all the columns. // Add or remove borders all around the table and between all the columns.
.table-bordered { .table-bordered {
border: $table-border-width solid $table-border-color; border: $table-border-width solid $table-border-color;
@ -62,13 +62,21 @@
} }
} }
.table-borderless {
th,
td,
thead th,
tbody + tbody {
border: 0;
}
}
// Zebra-striping // Zebra-striping
// //
// Default zebra-stripe styles (alternating gray and transparent backgrounds) // Default zebra-stripe styles (alternating gray and transparent backgrounds)
.table-striped { .table-striped {
tbody tr:nth-of-type(odd) { tbody tr:nth-of-type(#{$table-striped-order}) {
background-color: $table-accent-bg; background-color: $table-accent-bg;
} }
} }

View File

@ -1,30 +1,16 @@
// stylelint-disable selector-no-qualifying-type // stylelint-disable selector-no-qualifying-type
.fade { .fade {
opacity: 0;
@include transition($transition-fade); @include transition($transition-fade);
&.show { &:not(.show) {
opacity: 1; opacity: 0;
} }
} }
.collapse { .collapse {
&:not(.show) {
display: none; display: none;
&.show {
display: block;
}
}
tr {
&.collapse.show {
display: table-row;
}
}
tbody {
&.collapse.show {
display: table-row-group;
} }
} }

View File

@ -8,6 +8,7 @@
@import "utilities/float"; @import "utilities/float";
@import "utilities/position"; @import "utilities/position";
@import "utilities/screenreaders"; @import "utilities/screenreaders";
@import "utilities/shadows";
@import "utilities/sizing"; @import "utilities/sizing";
@import "utilities/spacing"; @import "utilities/spacing";
@import "utilities/text"; @import "utilities/text";

View File

@ -132,7 +132,8 @@ $sizes: map-merge((
25: 25%, 25: 25%,
50: 50%, 50: 50%,
75: 75%, 75: 75%,
100: 100% 100: 100%,
auto: auto
), $sizes); ), $sizes);
// stylelint-enable // stylelint-enable
@ -211,6 +212,10 @@ $border-radius: .25rem !default;
$border-radius-lg: .3rem !default; $border-radius-lg: .3rem !default;
$border-radius-sm: .2rem !default; $border-radius-sm: .2rem !default;
$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;
$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;
$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;
$component-active-color: $white !default; $component-active-color: $white !default;
$component-active-bg: theme-color("primary") !default; $component-active-bg: theme-color("primary") !default;
@ -317,6 +322,9 @@ $table-dark-hover-bg: rgba($white, .075) !default;
$table-dark-border-color: lighten($gray-900, 7.5%) !default; $table-dark-border-color: lighten($gray-900, 7.5%) !default;
$table-dark-color: $body-bg !default; $table-dark-color: $body-bg !default;
$table-striped-order: odd !default;
$table-caption-color: $text-muted !default;
// Buttons + Forms // Buttons + Forms
// //
@ -380,6 +388,8 @@ $btn-transition: color .15s ease-in-out, background-color .15s ease
// Forms // Forms
$label-margin-bottom: .5rem !default;
$input-padding-y: $input-btn-padding-y !default; $input-padding-y: $input-btn-padding-y !default;
$input-padding-x: $input-btn-padding-x !default; $input-padding-x: $input-btn-padding-x !default;
$input-line-height: $input-btn-line-height !default; $input-line-height: $input-btn-line-height !default;
@ -411,6 +421,7 @@ $input-focus-width: $input-btn-focus-width !default;
$input-focus-box-shadow: $input-btn-focus-box-shadow !default; $input-focus-box-shadow: $input-btn-focus-box-shadow !default;
$input-placeholder-color: $gray-600 !default; $input-placeholder-color: $gray-600 !default;
$input-plaintext-color: $body-color !default;
$input-height-border: $input-border-width * 2 !default; $input-height-border: $input-border-width * 2 !default;
@ -480,7 +491,7 @@ $custom-select-indicator-padding: 1rem !default; // Extra padding to account f
$custom-select-line-height: $input-btn-line-height !default; $custom-select-line-height: $input-btn-line-height !default;
$custom-select-color: $input-color !default; $custom-select-color: $input-color !default;
$custom-select-disabled-color: $gray-600 !default; $custom-select-disabled-color: $gray-600 !default;
$custom-select-bg: $white !default; $custom-select-bg: $input-bg !default;
$custom-select-disabled-bg: $gray-200 !default; $custom-select-disabled-bg: $gray-200 !default;
$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
$custom-select-indicator-color: $gray-800 !default; $custom-select-indicator-color: $gray-800 !default;
@ -498,6 +509,22 @@ $custom-select-height-sm: $input-height-sm !default;
$custom-select-font-size-lg: 125% !default; $custom-select-font-size-lg: 125% !default;
$custom-select-height-lg: $input-height-lg !default; $custom-select-height-lg: $input-height-lg !default;
$custom-range-track-width: 100% !default;
$custom-range-track-height: .5rem !default;
$custom-range-track-cursor: pointer !default;
$custom-range-track-bg: $gray-300 !default;
$custom-range-track-border-radius: 1rem !default;
$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;
$custom-range-thumb-width: 1rem !default;
$custom-range-thumb-height: $custom-range-thumb-width !default;
$custom-range-thumb-bg: $component-active-bg !default;
$custom-range-thumb-border: 0 !default;
$custom-range-thumb-border-radius: 1rem !default;
$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;
$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;
$custom-file-height: $input-height !default; $custom-file-height: $input-height !default;
$custom-file-focus-border-color: $input-focus-border-color !default; $custom-file-focus-border-color: $input-focus-border-color !default;
$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default; $custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;
@ -585,6 +612,9 @@ $nav-pills-border-radius: $border-radius !default;
$nav-pills-link-active-color: $component-active-color !default; $nav-pills-link-active-color: $component-active-color !default;
$nav-pills-link-active-bg: $component-active-bg !default; $nav-pills-link-active-bg: $component-active-bg !default;
$nav-divider-color: $gray-200 !default;
$nav-divider-margin-y: ($spacer / 2) !default;
// Navbar // Navbar
$navbar-padding-y: ($spacer / 2) !default; $navbar-padding-y: ($spacer / 2) !default;
@ -633,6 +663,7 @@ $pagination-border-width: $border-width !default;
$pagination-border-color: $gray-300 !default; $pagination-border-color: $gray-300 !default;
$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; $pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;
$pagination-focus-outline: 0 !default;
$pagination-hover-color: $link-hover-color !default; $pagination-hover-color: $link-hover-color !default;
$pagination-hover-bg: $gray-200 !default; $pagination-hover-bg: $gray-200 !default;
@ -744,6 +775,7 @@ $modal-title-line-height: $line-height-base !default;
$modal-content-bg: $white !default; $modal-content-bg: $white !default;
$modal-content-border-color: rgba($black, .2) !default; $modal-content-border-color: rgba($black, .2) !default;
$modal-content-border-width: $border-width !default; $modal-content-border-width: $border-width !default;
$modal-content-border-radius: $border-radius-lg !default;
$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default; $modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;
$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default; $modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
@ -842,7 +874,9 @@ $breadcrumb-margin-bottom: 1rem !default;
$breadcrumb-bg: $gray-200 !default; $breadcrumb-bg: $gray-200 !default;
$breadcrumb-divider-color: $gray-600 !default; $breadcrumb-divider-color: $gray-600 !default;
$breadcrumb-active-color: $gray-600 !default; $breadcrumb-active-color: $gray-600 !default;
$breadcrumb-divider: "/" !default; $breadcrumb-divider: quote("/") !default;
$breadcrumb-border-radius: $border-radius !default;
// Carousel // Carousel
@ -864,7 +898,7 @@ $carousel-control-icon-width: 20px !default;
$carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default; $carousel-control-prev-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default;
$carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default; $carousel-control-next-icon-bg: str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default;
$carousel-transition: transform .6s ease !default; $carousel-transition: transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)
// Close // Close

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap Grid v4.0.0 (https://getbootstrap.com) * Bootstrap Grid v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com) * Bootstrap Reboot v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0 (https://getbootstrap.com) * Bootstrap v4.1.0 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2018 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)

View File

@ -14,6 +14,7 @@
@mixin caret-right { @mixin caret-right {
border-top: $caret-width solid transparent; border-top: $caret-width solid transparent;
border-right: 0;
border-bottom: $caret-width solid transparent; border-bottom: $caret-width solid transparent;
border-left: $caret-width solid; border-left: $caret-width solid;
} }

View File

@ -45,7 +45,7 @@
margin-top: .1rem; margin-top: .1rem;
font-size: .875rem; font-size: .875rem;
line-height: 1; line-height: 1;
color: #fff; color: $white;
background-color: rgba($color, .8); background-color: rgba($color, .8);
border-radius: .2rem; border-radius: .2rem;
} }

View File

@ -11,7 +11,7 @@
// Horizontal gradient, from left to right // Horizontal gradient, from left to right
// //
// Creates two color stops, start and end, by specifying a color and position for each color stop. // Creates two color stops, start and end, by specifying a color and position for each color stop.
@mixin gradient-x($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) { @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);
background-repeat: repeat-x; background-repeat: repeat-x;
} }
@ -19,27 +19,27 @@
// Vertical gradient, from top to bottom // Vertical gradient, from top to bottom
// //
// Creates two color stops, start and end, by specifying a color and position for each color stop. // Creates two color stops, start and end, by specifying a color and position for each color stop.
@mixin gradient-y($start-color: #555, $end-color: #333, $start-percent: 0%, $end-percent: 100%) { @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {
background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);
background-repeat: repeat-x; background-repeat: repeat-x;
} }
@mixin gradient-directional($start-color: #555, $end-color: #333, $deg: 45deg) { @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {
background-image: linear-gradient($deg, $start-color, $end-color); background-image: linear-gradient($deg, $start-color, $end-color);
background-repeat: repeat-x; background-repeat: repeat-x;
} }
@mixin gradient-x-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color); background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
@mixin gradient-y-three-colors($start-color: #00b3ee, $mid-color: #7a43b6, $color-stop: 50%, $end-color: #c3325f) { @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {
background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color); background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
@mixin gradient-radial($inner-color: #555, $outer-color: #333) { @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {
background-image: radial-gradient(circle, $inner-color, $outer-color); background-image: radial-gradient(circle, $inner-color, $outer-color);
background-repeat: no-repeat; background-repeat: no-repeat;
} }
@mixin gradient-striped($color: rgba(255,255,255,.15), $angle: 45deg) { @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {
background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);
} }

View File

@ -1,9 +1,7 @@
// stylelint-disable indentation
// Hover mixin and `$enable-hover-media-query` are deprecated. // Hover mixin and `$enable-hover-media-query` are deprecated.
// //
// Origally added during our alphas and maintained during betas, this mixin was // Origally added during our alphas and maintained during betas, this mixin was
// designed to prevent `:hover` stickiness on iOSan issue where hover styles // designed to prevent `:hover` stickiness on iOS-an issue where hover styles
// would persist after initial touch. // would persist after initial touch.
// //
// For backward compatibility, we've kept these mixins and updated them to // For backward compatibility, we've kept these mixins and updated them to

View File

@ -12,7 +12,7 @@
} }
&.active { &.active {
color: #fff; color: $white;
background-color: $color; background-color: $color;
border-color: $color; border-color: $color;
} }

View File

@ -2,9 +2,9 @@
// //
// Dividers (basically an hr) within dropdowns and nav lists // Dividers (basically an hr) within dropdowns and nav lists
@mixin nav-divider($color: #e5e5e5) { @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y) {
height: 0; height: 0;
margin: ($spacer / 2) 0; margin: $margin-y 0;
overflow: hidden; overflow: hidden;
border-top: 1px solid $color; border-top: 1px solid $color;
} }

View File

@ -1,6 +1,6 @@
// Only display content to screen readers // Only display content to screen readers
// //
// See: http://a11yproject.com/posts/how-to-hide-content/ // See: https://a11yproject.com/posts/how-to-hide-content/
// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
@mixin sr-only { @mixin sr-only {
@ -11,7 +11,6 @@
overflow: hidden; overflow: hidden;
clip: rect(0, 0, 0, 0); clip: rect(0, 0, 0, 0);
white-space: nowrap; white-space: nowrap;
clip-path: inset(50%);
border: 0; border: 0;
} }
@ -30,6 +29,5 @@
overflow: visible; overflow: visible;
clip: auto; clip: auto;
white-space: normal; white-space: normal;
clip-path: none;
} }
} }

View File

@ -6,4 +6,6 @@
text-shadow: none; text-shadow: none;
background-color: transparent; background-color: transparent;
border: 0; border: 0;
@warn "The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5.";
} }

View File

@ -6,4 +6,8 @@
transition: $transition; transition: $transition;
} }
} }
@media screen and (prefers-reduced-motion: reduce) {
transition: none;
}
} }

View File

@ -16,6 +16,11 @@
.flex#{$infix}-wrap { flex-wrap: wrap !important; } .flex#{$infix}-wrap { flex-wrap: wrap !important; }
.flex#{$infix}-nowrap { flex-wrap: nowrap !important; } .flex#{$infix}-nowrap { flex-wrap: nowrap !important; }
.flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; }
.flex#{$infix}-fill { flex: 1 1 auto !important; }
.flex#{$infix}-grow-0 { flex-grow: 0 !important; }
.flex#{$infix}-grow-1 { flex-grow: 1 !important; }
.flex#{$infix}-shrink-0 { flex-shrink: 0 !important; }
.flex#{$infix}-shrink-1 { flex-shrink: 1 !important; }
.justify-content#{$infix}-start { justify-content: flex-start !important; } .justify-content#{$infix}-start { justify-content: flex-start !important; }
.justify-content#{$infix}-end { justify-content: flex-end !important; } .justify-content#{$infix}-end { justify-content: flex-end !important; }

View File

@ -3,6 +3,7 @@
// Common values // Common values
// Sass list not in variables since it's not intended for customization. // Sass list not in variables since it's not intended for customization.
// stylelint-disable-next-line scss/dollar-variable-default
$positions: static, relative, absolute, fixed, sticky; $positions: static, relative, absolute, fixed, sticky;
@each $position in $positions { @each $position in $positions {

View File

@ -0,0 +1,6 @@
// stylelint-disable declaration-no-important
.shadow-sm { box-shadow: $box-shadow-sm !important; }
.shadow { box-shadow: $box-shadow !important; }
.shadow-lg { box-shadow: $box-shadow-lg !important; }
.shadow-none { box-shadow: none !important; }

View File

@ -4,6 +4,8 @@
// Text // Text
// //
.text-monospace { font-family: $font-family-monospace; }
// Alignment // Alignment
.text-justify { text-align: justify !important; } .text-justify { text-align: justify !important; }
@ -37,14 +39,18 @@
// Contextual colors // Contextual colors
.text-white { color: #fff !important; } .text-white { color: $white !important; }
@each $color, $value in $theme-colors { @each $color, $value in $theme-colors {
@include text-emphasis-variant(".text-#{$color}", $value); @include text-emphasis-variant(".text-#{$color}", $value);
} }
.text-body { color: $body-color !important; }
.text-muted { color: $text-muted !important; } .text-muted { color: $text-muted !important; }
.text-black-50 { color: rgba($black, .5) !important; }
.text-white-50 { color: rgba($white, .5) !important; }
// Misc // Misc
.text-hide { .text-hide {