Update to Bootstrap 4.3.1

This commit is contained in:
KoenemannH 2019-02-15 09:27:15 +01:00
parent c33e8f6bae
commit 854098f7a7
65 changed files with 1804 additions and 955 deletions

File diff suppressed because one or more lines are too long

2
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,13 +1,13 @@
/*! /*!
* Bootstrap v4.2.1 (https://getbootstrap.com/) * Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2019 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)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
(factory((global.bootstrap = {}),global.jQuery)); (global = global || self, factory(global.bootstrap = {}, global.jQuery));
}(this, (function (exports,$) { 'use strict'; }(this, function (exports, $) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $; $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
@ -69,7 +69,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.2.1): util.js * Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -145,7 +145,11 @@
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
} }
return selector && document.querySelector(selector) ? selector : null; try {
return document.querySelector(selector) ? selector : null;
} catch (err) {
return null;
}
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) { if (!element) {
@ -225,7 +229,7 @@
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.2.1'; var VERSION = '4.3.1';
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';
@ -280,8 +284,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY); $.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // Private } // Private
;
_proto._getRootElement = function _getRootElement(element) { _proto._getRootElement = function _getRootElement(element) {
var selector = Util.getSelectorFromElement(element); var selector = Util.getSelectorFromElement(element);
@ -323,8 +327,8 @@
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove(); $(element).detach().trigger(Event.CLOSED).remove();
}; // Static } // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) { Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -390,7 +394,7 @@
*/ */
var NAME$1 = 'button'; var NAME$1 = 'button';
var VERSION$1 = '4.2.1'; var VERSION$1 = '4.3.1';
var DATA_KEY$1 = 'bs.button'; var DATA_KEY$1 = 'bs.button';
var EVENT_KEY$1 = "." + DATA_KEY$1; var EVENT_KEY$1 = "." + DATA_KEY$1;
var DATA_API_KEY$1 = '.data-api'; var DATA_API_KEY$1 = '.data-api';
@ -476,8 +480,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$1); $.removeData(this._element, DATA_KEY$1);
this._element = null; this._element = null;
}; // Static } // Static
;
Button._jQueryInterface = function _jQueryInterface(config) { Button._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -544,7 +548,7 @@
*/ */
var NAME$2 = 'carousel'; var NAME$2 = 'carousel';
var VERSION$2 = '4.2.1'; var VERSION$2 = '4.3.1';
var DATA_KEY$2 = 'bs.carousel'; var DATA_KEY$2 = 'bs.carousel';
var EVENT_KEY$2 = "." + DATA_KEY$2; var EVENT_KEY$2 = "." + DATA_KEY$2;
var DATA_API_KEY$2 = '.data-api'; var DATA_API_KEY$2 = '.data-api';
@ -739,8 +743,8 @@
this._isSliding = null; this._isSliding = null;
this._activeElement = null; this._activeElement = null;
this._indicatorsElement = null; this._indicatorsElement = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config); config = _objectSpread({}, Default, config);
@ -784,7 +788,9 @@
}); });
} }
this._addTouchEventListeners(); if (this._config.touch) {
this._addTouchEventListeners();
}
}; };
_proto._addTouchEventListeners = function _addTouchEventListeners() { _proto._addTouchEventListeners = function _addTouchEventListeners() {
@ -1025,8 +1031,8 @@
if (isCycling) { if (isCycling) {
this.cycle(); this.cycle();
} }
}; // Static } // Static
;
Carousel._jQueryInterface = function _jQueryInterface(config) { Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -1053,7 +1059,7 @@
} }
data[action](); data[action]();
} else if (_config.interval) { } else if (_config.interval && _config.ride) {
data.pause(); data.pause();
data.cycle(); data.cycle();
} }
@ -1142,7 +1148,7 @@
*/ */
var NAME$3 = 'collapse'; var NAME$3 = 'collapse';
var VERSION$3 = '4.2.1'; var VERSION$3 = '4.3.1';
var DATA_KEY$3 = 'bs.collapse'; var DATA_KEY$3 = 'bs.collapse';
var EVENT_KEY$3 = "." + DATA_KEY$3; var EVENT_KEY$3 = "." + DATA_KEY$3;
var DATA_API_KEY$3 = '.data-api'; var DATA_API_KEY$3 = '.data-api';
@ -1364,8 +1370,8 @@
this._element = null; this._element = null;
this._triggerArray = null; this._triggerArray = null;
this._isTransitioning = null; this._isTransitioning = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$1, config); config = _objectSpread({}, Default$1, config);
@ -1409,8 +1415,8 @@
if (triggerArray.length) { if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
} }
}; // Static } // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) { Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util.getSelectorFromElement(element); var selector = Util.getSelectorFromElement(element);
@ -1497,7 +1503,7 @@
/**! /**!
* @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.14.6 * @version 1.14.7
* @license * @license
* Copyright (c) 2016 Federico Zivolo and contributors * Copyright (c) 2016 Federico Zivolo and contributors
* *
@ -2065,7 +2071,11 @@
if (getStyleComputedProperty(element, 'position') === 'fixed') { if (getStyleComputedProperty(element, 'position') === 'fixed') {
return true; return true;
} }
return isFixed(getParentNode(element)); var parentNode = getParentNode(element);
if (!parentNode) {
return false;
}
return isFixed(parentNode);
} }
/** /**
@ -2721,18 +2731,23 @@
var _data$offsets = data.offsets, var _data$offsets = data.offsets,
popper = _data$offsets.popper, popper = _data$offsets.popper,
reference = _data$offsets.reference; reference = _data$offsets.reference;
var round = Math.round,
floor = Math.floor;
var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
var isVariation = data.placement.indexOf('-') !== -1;
var sameWidthOddness = reference.width % 2 === popper.width % 2;
var bothOddWidth = reference.width % 2 === 1 && popper.width % 2 === 1;
var noRound = function noRound(v) { var noRound = function noRound(v) {
return v; return v;
}; };
var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthOddness ? Math.round : Math.floor; var referenceWidth = round(reference.width);
var verticalToInteger = !shouldRound ? noRound : Math.round; var popperWidth = round(popper.width);
var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
var isVariation = data.placement.indexOf('-') !== -1;
var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
var verticalToInteger = !shouldRound ? noRound : round;
return { return {
left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
@ -4072,7 +4087,7 @@
*/ */
var NAME$4 = 'dropdown'; var NAME$4 = 'dropdown';
var VERSION$4 = '4.2.1'; var VERSION$4 = '4.3.1';
var DATA_KEY$4 = 'bs.dropdown'; var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4; var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api'; var DATA_API_KEY$4 = '.data-api';
@ -4301,8 +4316,8 @@
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // Private } // Private
;
_proto._addEventListeners = function _addEventListeners() { _proto._addEventListeners = function _addEventListeners() {
var _this = this; var _this = this;
@ -4358,24 +4373,28 @@
return $(this._element).closest('.navbar').length > 0; return $(this._element).closest('.navbar').length > 0;
}; };
_proto._getPopperConfig = function _getPopperConfig() { _proto._getOffset = function _getOffset() {
var _this2 = this; var _this2 = this;
var offsetConf = {}; var offset = {};
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
return data; return data;
}; };
} else { } else {
offsetConf.offset = this._config.offset; offset.offset = this._config.offset;
} }
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var popperConfig = { var popperConfig = {
placement: this._getPlacement(), placement: this._getPlacement(),
modifiers: { modifiers: {
offset: offsetConf, offset: this._getOffset(),
flip: { flip: {
enabled: this._config.flip enabled: this._config.flip
}, },
@ -4393,8 +4412,8 @@
} }
return popperConfig; return popperConfig;
}; // Static } // Static
;
Dropdown._jQueryInterface = function _jQueryInterface(config) { Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -4478,8 +4497,8 @@
} }
return parent || element.parentNode; return parent || element.parentNode;
}; // eslint-disable-next-line complexity } // eslint-disable-next-line complexity
;
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea: // If not input/textarea:
@ -4594,7 +4613,7 @@
*/ */
var NAME$5 = 'modal'; var NAME$5 = 'modal';
var VERSION$5 = '4.2.1'; var VERSION$5 = '4.3.1';
var DATA_KEY$5 = 'bs.modal'; var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5; var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api'; var DATA_API_KEY$5 = '.data-api';
@ -4627,6 +4646,7 @@
CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
}; };
var ClassName$5 = { var ClassName$5 = {
SCROLLABLE: 'modal-dialog-scrollable',
SCROLLBAR_MEASURER: 'modal-scrollbar-measure', SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop', BACKDROP: 'modal-backdrop',
OPEN: 'modal-open', OPEN: 'modal-open',
@ -4635,6 +4655,7 @@
}; };
var Selector$5 = { var Selector$5 = {
DIALOG: '.modal-dialog', DIALOG: '.modal-dialog',
MODAL_BODY: '.modal-body',
DATA_TOGGLE: '[data-toggle="modal"]', DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]', DATA_DISMISS: '[data-dismiss="modal"]',
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@ -4787,8 +4808,8 @@
_proto.handleUpdate = function handleUpdate() { _proto.handleUpdate = function handleUpdate() {
this._adjustDialog(); this._adjustDialog();
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$3, config); config = _objectSpread({}, Default$3, config);
@ -4812,7 +4833,11 @@
this._element.setAttribute('aria-modal', true); this._element.setAttribute('aria-modal', true);
this._element.scrollTop = 0; if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) { if (transition) {
Util.reflow(this._element); Util.reflow(this._element);
@ -4982,11 +5007,11 @@
} else if (callback) { } else if (callback) {
callback(); callback();
} }
}; // ---------------------------------------------------------------------- } // ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals // the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js // todo (fat): these should probably be refactored out of modal.js
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
;
_proto._adjustDialog = function _adjustDialog() { _proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@ -5071,8 +5096,8 @@
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv); document.body.removeChild(scrollDiv);
return scrollbarWidth; return scrollbarWidth;
}; // Static } // Static
;
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () { return this.each(function () {
@ -5163,6 +5188,127 @@
return Modal._jQueryInterface; return Modal._jQueryInterface;
}; };
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
};
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true;
}
}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i, len);
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
@ -5170,12 +5316,13 @@
*/ */
var NAME$6 = 'tooltip'; var NAME$6 = 'tooltip';
var VERSION$6 = '4.2.1'; var VERSION$6 = '4.3.1';
var DATA_KEY$6 = 'bs.tooltip'; var DATA_KEY$6 = 'bs.tooltip';
var EVENT_KEY$6 = "." + DATA_KEY$6; var EVENT_KEY$6 = "." + DATA_KEY$6;
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
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 DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType$4 = { var DefaultType$4 = {
animation: 'boolean', animation: 'boolean',
template: 'string', template: 'string',
@ -5185,10 +5332,13 @@
html: 'boolean', html: 'boolean',
selector: '(string|boolean)', selector: '(string|boolean)',
placement: '(string|function)', placement: '(string|function)',
offset: '(number|string)', offset: '(number|string|function)',
container: '(string|element|boolean)', container: '(string|element|boolean)',
fallbackPlacement: '(string|array)', fallbackPlacement: '(string|array)',
boundary: '(string|element)' boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object'
}; };
var AttachmentMap$1 = { var AttachmentMap$1 = {
AUTO: 'auto', AUTO: 'auto',
@ -5209,7 +5359,10 @@
offset: 0, offset: 0,
container: false, container: false,
fallbackPlacement: 'flip', fallbackPlacement: 'flip',
boundary: 'scrollParent' boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist
}; };
var HoverState = { var HoverState = {
SHOW: 'show', SHOW: 'show',
@ -5394,9 +5547,7 @@
this._popper = new Popper(this.element, tip, { this._popper = new Popper(this.element, tip, {
placement: attachment, placement: attachment,
modifiers: { modifiers: {
offset: { offset: this._getOffset(),
offset: this.config.offset
},
flip: { flip: {
behavior: this.config.fallbackPlacement behavior: this.config.fallbackPlacement
}, },
@ -5505,8 +5656,8 @@
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // Protected } // Protected
;
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle()); return Boolean(this.getTitle());
@ -5528,19 +5679,27 @@
}; };
_proto.setElementContent = function setElementContent($element, content) { _proto.setElementContent = function setElementContent($element, content) {
var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) { if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery // Content is a DOM node or a jQuery
if (html) { if (this.config.html) {
if (!$(content).parent().is($element)) { if (!$(content).parent().is($element)) {
$element.empty().append(content); $element.empty().append(content);
} }
} else { } else {
$element.text($(content).text()); $element.text($(content).text());
} }
return;
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
} else { } else {
$element[html ? 'html' : 'text'](content); $element.text(content);
} }
}; };
@ -5552,8 +5711,25 @@
} }
return title; return title;
}; // Private } // Private
;
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = {};
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
return data;
};
} else {
offset.offset = this.config.offset;
}
return offset;
};
_proto._getContainer = function _getContainer() { _proto._getContainer = function _getContainer() {
if (this.config.container === false) { if (this.config.container === false) {
@ -5572,27 +5748,27 @@
}; };
_proto._setListeners = function _setListeners() { _proto._setListeners = function _setListeners() {
var _this3 = this; var _this4 = this;
var triggers = this.config.trigger.split(' '); var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) { triggers.forEach(function (trigger) {
if (trigger === 'click') { if (trigger === 'click') {
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this3.toggle(event); return _this4.toggle(event);
}); });
} else if (trigger !== Trigger.MANUAL) { } else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
$(_this3.element).on(eventIn, _this3.config.selector, function (event) { $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
return _this3._enter(event); return _this4._enter(event);
}).on(eventOut, _this3.config.selector, function (event) { }).on(eventOut, _this4.config.selector, function (event) {
return _this3._leave(event); return _this4._leave(event);
}); });
} }
}); });
$(this.element).closest('.modal').on('hide.bs.modal', function () { $(this.element).closest('.modal').on('hide.bs.modal', function () {
if (_this3.element) { if (_this4.element) {
_this3.hide(); _this4.hide();
} }
}); });
@ -5691,7 +5867,13 @@
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {}); var dataAttributes = $(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -5709,6 +5891,11 @@
} }
Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config; return config;
}; };
@ -5757,8 +5944,8 @@
this.hide(); this.hide();
this.show(); this.show();
this.config.animation = initConfigAnimation; this.config.animation = initConfigAnimation;
}; // Static } // Static
;
Tooltip._jQueryInterface = function _jQueryInterface(config) { Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -5846,7 +6033,7 @@
*/ */
var NAME$7 = 'popover'; var NAME$7 = 'popover';
var VERSION$7 = '4.2.1'; var VERSION$7 = '4.3.1';
var DATA_KEY$7 = 'bs.popover'; var DATA_KEY$7 = 'bs.popover';
var EVENT_KEY$7 = "." + DATA_KEY$7; var EVENT_KEY$7 = "." + DATA_KEY$7;
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@ -5929,8 +6116,8 @@
this.setElementContent($tip.find(Selector$7.CONTENT), content); this.setElementContent($tip.find(Selector$7.CONTENT), content);
$tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
}; // Private } // Private
;
_proto._getContent = function _getContent() { _proto._getContent = function _getContent() {
return this.element.getAttribute('data-content') || this.config.content; return this.element.getAttribute('data-content') || this.config.content;
@ -5943,8 +6130,8 @@
if (tabClass !== null && tabClass.length > 0) { if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join('')); $tip.removeClass(tabClass.join(''));
} }
}; // Static } // Static
;
Popover._jQueryInterface = function _jQueryInterface(config) { Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6033,7 +6220,7 @@
*/ */
var NAME$8 = 'scrollspy'; var NAME$8 = 'scrollspy';
var VERSION$8 = '4.2.1'; var VERSION$8 = '4.3.1';
var DATA_KEY$8 = 'bs.scrollspy'; var DATA_KEY$8 = 'bs.scrollspy';
var EVENT_KEY$8 = "." + DATA_KEY$8; var EVENT_KEY$8 = "." + DATA_KEY$8;
var DATA_API_KEY$6 = '.data-api'; var DATA_API_KEY$6 = '.data-api';
@ -6156,8 +6343,8 @@
this._targets = null; this._targets = null;
this._activeTarget = null; this._activeTarget = null;
this._scrollHeight = null; this._scrollHeight = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@ -6264,8 +6451,8 @@
}).forEach(function (node) { }).forEach(function (node) {
return node.classList.remove(ClassName$8.ACTIVE); return node.classList.remove(ClassName$8.ACTIVE);
}); });
}; // Static } // Static
;
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6340,7 +6527,7 @@
*/ */
var NAME$9 = 'tab'; var NAME$9 = 'tab';
var VERSION$9 = '4.2.1'; var VERSION$9 = '4.3.1';
var DATA_KEY$9 = 'bs.tab'; var DATA_KEY$9 = 'bs.tab';
var EVENT_KEY$9 = "." + DATA_KEY$9; var EVENT_KEY$9 = "." + DATA_KEY$9;
var DATA_API_KEY$7 = '.data-api'; var DATA_API_KEY$7 = '.data-api';
@ -6448,8 +6635,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$9); $.removeData(this._element, DATA_KEY$9);
this._element = null; this._element = null;
}; // Private } // Private
;
_proto._activate = function _activate(element, container, callback) { _proto._activate = function _activate(element, container, callback) {
var _this2 = this; var _this2 = this;
@ -6491,7 +6678,10 @@
} }
Util.reflow(element); Util.reflow(element);
$(element).addClass(ClassName$9.SHOW);
if (element.classList.contains(ClassName$9.FADE)) {
element.classList.add(ClassName$9.SHOW);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) { if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0]; var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@ -6507,8 +6697,8 @@
if (callback) { if (callback) {
callback(); callback();
} }
}; // Static } // Static
;
Tab._jQueryInterface = function _jQueryInterface(config) { Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6572,7 +6762,7 @@
*/ */
var NAME$a = 'toast'; var NAME$a = 'toast';
var VERSION$a = '4.2.1'; var VERSION$a = '4.3.1';
var DATA_KEY$a = 'bs.toast'; var DATA_KEY$a = 'bs.toast';
var EVENT_KEY$a = "." + DATA_KEY$a; var EVENT_KEY$a = "." + DATA_KEY$a;
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a]; var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@ -6687,8 +6877,8 @@
$.removeData(this._element, DATA_KEY$a); $.removeData(this._element, DATA_KEY$a);
this._element = null; this._element = null;
this._config = null; this._config = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {}); config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@ -6721,8 +6911,8 @@
} else { } else {
complete(); complete();
} }
}; // Static } // Static
;
Toast._jQueryInterface = function _jQueryInterface(config) { Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6756,6 +6946,11 @@
get: function get() { get: function get() {
return DefaultType$7; return DefaultType$7;
} }
}, {
key: "Default",
get: function get() {
return Default$7;
}
}]); }]);
return Toast; return Toast;
@ -6777,7 +6972,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.2.1): index.js * Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -6814,7 +7009,7 @@
Object.defineProperty(exports, '__esModule', { value: true }); Object.defineProperty(exports, '__esModule', { value: true });
}))); }));
//# sourceMappingURL=bootstrap.bundle.js.map //# sourceMappingURL=bootstrap.bundle.js.map
/** /**

2
js/theme.min.js vendored

File diff suppressed because one or more lines are too long

7
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "understrap", "name": "understrap",
"version": "0.8.9", "version": "0.9.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -729,6 +729,11 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
}, },
"bootstrap": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz",
"integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag=="
},
"brace-expansion": { "brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",

View File

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

View File

@ -1,13 +1,13 @@
/*! /*!
* Bootstrap v4.2.1 (https://getbootstrap.com/) * Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2019 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)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) : typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery')) :
typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) : typeof define === 'function' && define.amd ? define(['exports', 'jquery'], factory) :
(factory((global.bootstrap = {}),global.jQuery)); (global = global || self, factory(global.bootstrap = {}, global.jQuery));
}(this, (function (exports,$) { 'use strict'; }(this, function (exports, $) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $; $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
@ -69,7 +69,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.2.1): util.js * Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -145,7 +145,11 @@
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
} }
return selector && document.querySelector(selector) ? selector : null; try {
return document.querySelector(selector) ? selector : null;
} catch (err) {
return null;
}
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) { if (!element) {
@ -225,7 +229,7 @@
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.2.1'; var VERSION = '4.3.1';
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';
@ -280,8 +284,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY); $.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // Private } // Private
;
_proto._getRootElement = function _getRootElement(element) { _proto._getRootElement = function _getRootElement(element) {
var selector = Util.getSelectorFromElement(element); var selector = Util.getSelectorFromElement(element);
@ -323,8 +327,8 @@
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove(); $(element).detach().trigger(Event.CLOSED).remove();
}; // Static } // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) { Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -390,7 +394,7 @@
*/ */
var NAME$1 = 'button'; var NAME$1 = 'button';
var VERSION$1 = '4.2.1'; var VERSION$1 = '4.3.1';
var DATA_KEY$1 = 'bs.button'; var DATA_KEY$1 = 'bs.button';
var EVENT_KEY$1 = "." + DATA_KEY$1; var EVENT_KEY$1 = "." + DATA_KEY$1;
var DATA_API_KEY$1 = '.data-api'; var DATA_API_KEY$1 = '.data-api';
@ -476,8 +480,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$1); $.removeData(this._element, DATA_KEY$1);
this._element = null; this._element = null;
}; // Static } // Static
;
Button._jQueryInterface = function _jQueryInterface(config) { Button._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -544,7 +548,7 @@
*/ */
var NAME$2 = 'carousel'; var NAME$2 = 'carousel';
var VERSION$2 = '4.2.1'; var VERSION$2 = '4.3.1';
var DATA_KEY$2 = 'bs.carousel'; var DATA_KEY$2 = 'bs.carousel';
var EVENT_KEY$2 = "." + DATA_KEY$2; var EVENT_KEY$2 = "." + DATA_KEY$2;
var DATA_API_KEY$2 = '.data-api'; var DATA_API_KEY$2 = '.data-api';
@ -739,8 +743,8 @@
this._isSliding = null; this._isSliding = null;
this._activeElement = null; this._activeElement = null;
this._indicatorsElement = null; this._indicatorsElement = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config); config = _objectSpread({}, Default, config);
@ -784,7 +788,9 @@
}); });
} }
this._addTouchEventListeners(); if (this._config.touch) {
this._addTouchEventListeners();
}
}; };
_proto._addTouchEventListeners = function _addTouchEventListeners() { _proto._addTouchEventListeners = function _addTouchEventListeners() {
@ -1025,8 +1031,8 @@
if (isCycling) { if (isCycling) {
this.cycle(); this.cycle();
} }
}; // Static } // Static
;
Carousel._jQueryInterface = function _jQueryInterface(config) { Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -1053,7 +1059,7 @@
} }
data[action](); data[action]();
} else if (_config.interval) { } else if (_config.interval && _config.ride) {
data.pause(); data.pause();
data.cycle(); data.cycle();
} }
@ -1142,7 +1148,7 @@
*/ */
var NAME$3 = 'collapse'; var NAME$3 = 'collapse';
var VERSION$3 = '4.2.1'; var VERSION$3 = '4.3.1';
var DATA_KEY$3 = 'bs.collapse'; var DATA_KEY$3 = 'bs.collapse';
var EVENT_KEY$3 = "." + DATA_KEY$3; var EVENT_KEY$3 = "." + DATA_KEY$3;
var DATA_API_KEY$3 = '.data-api'; var DATA_API_KEY$3 = '.data-api';
@ -1364,8 +1370,8 @@
this._element = null; this._element = null;
this._triggerArray = null; this._triggerArray = null;
this._isTransitioning = null; this._isTransitioning = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$1, config); config = _objectSpread({}, Default$1, config);
@ -1409,8 +1415,8 @@
if (triggerArray.length) { if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
} }
}; // Static } // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) { Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util.getSelectorFromElement(element); var selector = Util.getSelectorFromElement(element);
@ -1497,7 +1503,7 @@
/**! /**!
* @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.14.6 * @version 1.14.7
* @license * @license
* Copyright (c) 2016 Federico Zivolo and contributors * Copyright (c) 2016 Federico Zivolo and contributors
* *
@ -2065,7 +2071,11 @@
if (getStyleComputedProperty(element, 'position') === 'fixed') { if (getStyleComputedProperty(element, 'position') === 'fixed') {
return true; return true;
} }
return isFixed(getParentNode(element)); var parentNode = getParentNode(element);
if (!parentNode) {
return false;
}
return isFixed(parentNode);
} }
/** /**
@ -2721,18 +2731,23 @@
var _data$offsets = data.offsets, var _data$offsets = data.offsets,
popper = _data$offsets.popper, popper = _data$offsets.popper,
reference = _data$offsets.reference; reference = _data$offsets.reference;
var round = Math.round,
floor = Math.floor;
var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
var isVariation = data.placement.indexOf('-') !== -1;
var sameWidthOddness = reference.width % 2 === popper.width % 2;
var bothOddWidth = reference.width % 2 === 1 && popper.width % 2 === 1;
var noRound = function noRound(v) { var noRound = function noRound(v) {
return v; return v;
}; };
var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthOddness ? Math.round : Math.floor; var referenceWidth = round(reference.width);
var verticalToInteger = !shouldRound ? noRound : Math.round; var popperWidth = round(popper.width);
var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;
var isVariation = data.placement.indexOf('-') !== -1;
var sameWidthParity = referenceWidth % 2 === popperWidth % 2;
var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;
var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;
var verticalToInteger = !shouldRound ? noRound : round;
return { return {
left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),
@ -4072,7 +4087,7 @@
*/ */
var NAME$4 = 'dropdown'; var NAME$4 = 'dropdown';
var VERSION$4 = '4.2.1'; var VERSION$4 = '4.3.1';
var DATA_KEY$4 = 'bs.dropdown'; var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4; var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api'; var DATA_API_KEY$4 = '.data-api';
@ -4301,8 +4316,8 @@
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // Private } // Private
;
_proto._addEventListeners = function _addEventListeners() { _proto._addEventListeners = function _addEventListeners() {
var _this = this; var _this = this;
@ -4358,24 +4373,28 @@
return $(this._element).closest('.navbar').length > 0; return $(this._element).closest('.navbar').length > 0;
}; };
_proto._getPopperConfig = function _getPopperConfig() { _proto._getOffset = function _getOffset() {
var _this2 = this; var _this2 = this;
var offsetConf = {}; var offset = {};
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
return data; return data;
}; };
} else { } else {
offsetConf.offset = this._config.offset; offset.offset = this._config.offset;
} }
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var popperConfig = { var popperConfig = {
placement: this._getPlacement(), placement: this._getPlacement(),
modifiers: { modifiers: {
offset: offsetConf, offset: this._getOffset(),
flip: { flip: {
enabled: this._config.flip enabled: this._config.flip
}, },
@ -4393,8 +4412,8 @@
} }
return popperConfig; return popperConfig;
}; // Static } // Static
;
Dropdown._jQueryInterface = function _jQueryInterface(config) { Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -4478,8 +4497,8 @@
} }
return parent || element.parentNode; return parent || element.parentNode;
}; // eslint-disable-next-line complexity } // eslint-disable-next-line complexity
;
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea: // If not input/textarea:
@ -4594,7 +4613,7 @@
*/ */
var NAME$5 = 'modal'; var NAME$5 = 'modal';
var VERSION$5 = '4.2.1'; var VERSION$5 = '4.3.1';
var DATA_KEY$5 = 'bs.modal'; var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5; var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api'; var DATA_API_KEY$5 = '.data-api';
@ -4627,6 +4646,7 @@
CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
}; };
var ClassName$5 = { var ClassName$5 = {
SCROLLABLE: 'modal-dialog-scrollable',
SCROLLBAR_MEASURER: 'modal-scrollbar-measure', SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop', BACKDROP: 'modal-backdrop',
OPEN: 'modal-open', OPEN: 'modal-open',
@ -4635,6 +4655,7 @@
}; };
var Selector$5 = { var Selector$5 = {
DIALOG: '.modal-dialog', DIALOG: '.modal-dialog',
MODAL_BODY: '.modal-body',
DATA_TOGGLE: '[data-toggle="modal"]', DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]', DATA_DISMISS: '[data-dismiss="modal"]',
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@ -4787,8 +4808,8 @@
_proto.handleUpdate = function handleUpdate() { _proto.handleUpdate = function handleUpdate() {
this._adjustDialog(); this._adjustDialog();
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$3, config); config = _objectSpread({}, Default$3, config);
@ -4812,7 +4833,11 @@
this._element.setAttribute('aria-modal', true); this._element.setAttribute('aria-modal', true);
this._element.scrollTop = 0; if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) { if (transition) {
Util.reflow(this._element); Util.reflow(this._element);
@ -4982,11 +5007,11 @@
} else if (callback) { } else if (callback) {
callback(); callback();
} }
}; // ---------------------------------------------------------------------- } // ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals // the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js // todo (fat): these should probably be refactored out of modal.js
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
;
_proto._adjustDialog = function _adjustDialog() { _proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@ -5071,8 +5096,8 @@
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv); document.body.removeChild(scrollDiv);
return scrollbarWidth; return scrollbarWidth;
}; // Static } // Static
;
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () { return this.each(function () {
@ -5163,6 +5188,127 @@
return Modal._jQueryInterface; return Modal._jQueryInterface;
}; };
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
};
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true;
}
}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i, len);
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
@ -5170,12 +5316,13 @@
*/ */
var NAME$6 = 'tooltip'; var NAME$6 = 'tooltip';
var VERSION$6 = '4.2.1'; var VERSION$6 = '4.3.1';
var DATA_KEY$6 = 'bs.tooltip'; var DATA_KEY$6 = 'bs.tooltip';
var EVENT_KEY$6 = "." + DATA_KEY$6; var EVENT_KEY$6 = "." + DATA_KEY$6;
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
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 DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType$4 = { var DefaultType$4 = {
animation: 'boolean', animation: 'boolean',
template: 'string', template: 'string',
@ -5185,10 +5332,13 @@
html: 'boolean', html: 'boolean',
selector: '(string|boolean)', selector: '(string|boolean)',
placement: '(string|function)', placement: '(string|function)',
offset: '(number|string)', offset: '(number|string|function)',
container: '(string|element|boolean)', container: '(string|element|boolean)',
fallbackPlacement: '(string|array)', fallbackPlacement: '(string|array)',
boundary: '(string|element)' boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object'
}; };
var AttachmentMap$1 = { var AttachmentMap$1 = {
AUTO: 'auto', AUTO: 'auto',
@ -5209,7 +5359,10 @@
offset: 0, offset: 0,
container: false, container: false,
fallbackPlacement: 'flip', fallbackPlacement: 'flip',
boundary: 'scrollParent' boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist
}; };
var HoverState = { var HoverState = {
SHOW: 'show', SHOW: 'show',
@ -5394,9 +5547,7 @@
this._popper = new Popper(this.element, tip, { this._popper = new Popper(this.element, tip, {
placement: attachment, placement: attachment,
modifiers: { modifiers: {
offset: { offset: this._getOffset(),
offset: this.config.offset
},
flip: { flip: {
behavior: this.config.fallbackPlacement behavior: this.config.fallbackPlacement
}, },
@ -5505,8 +5656,8 @@
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // Protected } // Protected
;
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle()); return Boolean(this.getTitle());
@ -5528,19 +5679,27 @@
}; };
_proto.setElementContent = function setElementContent($element, content) { _proto.setElementContent = function setElementContent($element, content) {
var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) { if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery // Content is a DOM node or a jQuery
if (html) { if (this.config.html) {
if (!$(content).parent().is($element)) { if (!$(content).parent().is($element)) {
$element.empty().append(content); $element.empty().append(content);
} }
} else { } else {
$element.text($(content).text()); $element.text($(content).text());
} }
return;
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
} else { } else {
$element[html ? 'html' : 'text'](content); $element.text(content);
} }
}; };
@ -5552,8 +5711,25 @@
} }
return title; return title;
}; // Private } // Private
;
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = {};
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
return data;
};
} else {
offset.offset = this.config.offset;
}
return offset;
};
_proto._getContainer = function _getContainer() { _proto._getContainer = function _getContainer() {
if (this.config.container === false) { if (this.config.container === false) {
@ -5572,27 +5748,27 @@
}; };
_proto._setListeners = function _setListeners() { _proto._setListeners = function _setListeners() {
var _this3 = this; var _this4 = this;
var triggers = this.config.trigger.split(' '); var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) { triggers.forEach(function (trigger) {
if (trigger === 'click') { if (trigger === 'click') {
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this3.toggle(event); return _this4.toggle(event);
}); });
} else if (trigger !== Trigger.MANUAL) { } else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
$(_this3.element).on(eventIn, _this3.config.selector, function (event) { $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
return _this3._enter(event); return _this4._enter(event);
}).on(eventOut, _this3.config.selector, function (event) { }).on(eventOut, _this4.config.selector, function (event) {
return _this3._leave(event); return _this4._leave(event);
}); });
} }
}); });
$(this.element).closest('.modal').on('hide.bs.modal', function () { $(this.element).closest('.modal').on('hide.bs.modal', function () {
if (_this3.element) { if (_this4.element) {
_this3.hide(); _this4.hide();
} }
}); });
@ -5691,7 +5867,13 @@
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {}); var dataAttributes = $(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -5709,6 +5891,11 @@
} }
Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config; return config;
}; };
@ -5757,8 +5944,8 @@
this.hide(); this.hide();
this.show(); this.show();
this.config.animation = initConfigAnimation; this.config.animation = initConfigAnimation;
}; // Static } // Static
;
Tooltip._jQueryInterface = function _jQueryInterface(config) { Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -5846,7 +6033,7 @@
*/ */
var NAME$7 = 'popover'; var NAME$7 = 'popover';
var VERSION$7 = '4.2.1'; var VERSION$7 = '4.3.1';
var DATA_KEY$7 = 'bs.popover'; var DATA_KEY$7 = 'bs.popover';
var EVENT_KEY$7 = "." + DATA_KEY$7; var EVENT_KEY$7 = "." + DATA_KEY$7;
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@ -5929,8 +6116,8 @@
this.setElementContent($tip.find(Selector$7.CONTENT), content); this.setElementContent($tip.find(Selector$7.CONTENT), content);
$tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
}; // Private } // Private
;
_proto._getContent = function _getContent() { _proto._getContent = function _getContent() {
return this.element.getAttribute('data-content') || this.config.content; return this.element.getAttribute('data-content') || this.config.content;
@ -5943,8 +6130,8 @@
if (tabClass !== null && tabClass.length > 0) { if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join('')); $tip.removeClass(tabClass.join(''));
} }
}; // Static } // Static
;
Popover._jQueryInterface = function _jQueryInterface(config) { Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6033,7 +6220,7 @@
*/ */
var NAME$8 = 'scrollspy'; var NAME$8 = 'scrollspy';
var VERSION$8 = '4.2.1'; var VERSION$8 = '4.3.1';
var DATA_KEY$8 = 'bs.scrollspy'; var DATA_KEY$8 = 'bs.scrollspy';
var EVENT_KEY$8 = "." + DATA_KEY$8; var EVENT_KEY$8 = "." + DATA_KEY$8;
var DATA_API_KEY$6 = '.data-api'; var DATA_API_KEY$6 = '.data-api';
@ -6156,8 +6343,8 @@
this._targets = null; this._targets = null;
this._activeTarget = null; this._activeTarget = null;
this._scrollHeight = null; this._scrollHeight = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@ -6264,8 +6451,8 @@
}).forEach(function (node) { }).forEach(function (node) {
return node.classList.remove(ClassName$8.ACTIVE); return node.classList.remove(ClassName$8.ACTIVE);
}); });
}; // Static } // Static
;
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6340,7 +6527,7 @@
*/ */
var NAME$9 = 'tab'; var NAME$9 = 'tab';
var VERSION$9 = '4.2.1'; var VERSION$9 = '4.3.1';
var DATA_KEY$9 = 'bs.tab'; var DATA_KEY$9 = 'bs.tab';
var EVENT_KEY$9 = "." + DATA_KEY$9; var EVENT_KEY$9 = "." + DATA_KEY$9;
var DATA_API_KEY$7 = '.data-api'; var DATA_API_KEY$7 = '.data-api';
@ -6448,8 +6635,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$9); $.removeData(this._element, DATA_KEY$9);
this._element = null; this._element = null;
}; // Private } // Private
;
_proto._activate = function _activate(element, container, callback) { _proto._activate = function _activate(element, container, callback) {
var _this2 = this; var _this2 = this;
@ -6491,7 +6678,10 @@
} }
Util.reflow(element); Util.reflow(element);
$(element).addClass(ClassName$9.SHOW);
if (element.classList.contains(ClassName$9.FADE)) {
element.classList.add(ClassName$9.SHOW);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) { if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0]; var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@ -6507,8 +6697,8 @@
if (callback) { if (callback) {
callback(); callback();
} }
}; // Static } // Static
;
Tab._jQueryInterface = function _jQueryInterface(config) { Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6572,7 +6762,7 @@
*/ */
var NAME$a = 'toast'; var NAME$a = 'toast';
var VERSION$a = '4.2.1'; var VERSION$a = '4.3.1';
var DATA_KEY$a = 'bs.toast'; var DATA_KEY$a = 'bs.toast';
var EVENT_KEY$a = "." + DATA_KEY$a; var EVENT_KEY$a = "." + DATA_KEY$a;
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a]; var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@ -6687,8 +6877,8 @@
$.removeData(this._element, DATA_KEY$a); $.removeData(this._element, DATA_KEY$a);
this._element = null; this._element = null;
this._config = null; this._config = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {}); config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@ -6721,8 +6911,8 @@
} else { } else {
complete(); complete();
} }
}; // Static } // Static
;
Toast._jQueryInterface = function _jQueryInterface(config) { Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -6756,6 +6946,11 @@
get: function get() { get: function get() {
return DefaultType$7; return DefaultType$7;
} }
}, {
key: "Default",
get: function get() {
return Default$7;
}
}]); }]);
return Toast; return Toast;
@ -6777,7 +6972,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.2.1): index.js * Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -6814,5 +7009,5 @@
Object.defineProperty(exports, '__esModule', { value: true }); Object.defineProperty(exports, '__esModule', { value: true });
}))); }));
//# sourceMappingURL=bootstrap.bundle.js.map //# sourceMappingURL=bootstrap.bundle.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,16 +1,16 @@
/*! /*!
* Bootstrap v4.2.1 (https://getbootstrap.com/) * Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2019 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)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('popper.js'), require('jquery')) : typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
typeof define === 'function' && define.amd ? define(['exports', 'popper.js', 'jquery'], factory) : typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
(factory((global.bootstrap = {}),global.Popper,global.jQuery)); (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));
}(this, (function (exports,Popper,$) { 'use strict'; }(this, function (exports, $, Popper) { 'use strict';
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
$ = $ && $.hasOwnProperty('default') ? $['default'] : $; $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
function _defineProperties(target, props) { function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) { for (var i = 0; i < props.length; i++) {
@ -70,7 +70,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.2.1): util.js * Bootstrap (v4.3.1): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -146,7 +146,11 @@
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
} }
return selector && document.querySelector(selector) ? selector : null; try {
return document.querySelector(selector) ? selector : null;
} catch (err) {
return null;
}
}, },
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
if (!element) { if (!element) {
@ -226,7 +230,7 @@
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.2.1'; var VERSION = '4.3.1';
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';
@ -281,8 +285,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY); $.removeData(this._element, DATA_KEY);
this._element = null; this._element = null;
}; // Private } // Private
;
_proto._getRootElement = function _getRootElement(element) { _proto._getRootElement = function _getRootElement(element) {
var selector = Util.getSelectorFromElement(element); var selector = Util.getSelectorFromElement(element);
@ -324,8 +328,8 @@
_proto._destroyElement = function _destroyElement(element) { _proto._destroyElement = function _destroyElement(element) {
$(element).detach().trigger(Event.CLOSED).remove(); $(element).detach().trigger(Event.CLOSED).remove();
}; // Static } // Static
;
Alert._jQueryInterface = function _jQueryInterface(config) { Alert._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -391,7 +395,7 @@
*/ */
var NAME$1 = 'button'; var NAME$1 = 'button';
var VERSION$1 = '4.2.1'; var VERSION$1 = '4.3.1';
var DATA_KEY$1 = 'bs.button'; var DATA_KEY$1 = 'bs.button';
var EVENT_KEY$1 = "." + DATA_KEY$1; var EVENT_KEY$1 = "." + DATA_KEY$1;
var DATA_API_KEY$1 = '.data-api'; var DATA_API_KEY$1 = '.data-api';
@ -477,8 +481,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$1); $.removeData(this._element, DATA_KEY$1);
this._element = null; this._element = null;
}; // Static } // Static
;
Button._jQueryInterface = function _jQueryInterface(config) { Button._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -545,7 +549,7 @@
*/ */
var NAME$2 = 'carousel'; var NAME$2 = 'carousel';
var VERSION$2 = '4.2.1'; var VERSION$2 = '4.3.1';
var DATA_KEY$2 = 'bs.carousel'; var DATA_KEY$2 = 'bs.carousel';
var EVENT_KEY$2 = "." + DATA_KEY$2; var EVENT_KEY$2 = "." + DATA_KEY$2;
var DATA_API_KEY$2 = '.data-api'; var DATA_API_KEY$2 = '.data-api';
@ -740,8 +744,8 @@
this._isSliding = null; this._isSliding = null;
this._activeElement = null; this._activeElement = null;
this._indicatorsElement = null; this._indicatorsElement = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default, config); config = _objectSpread({}, Default, config);
@ -785,7 +789,9 @@
}); });
} }
this._addTouchEventListeners(); if (this._config.touch) {
this._addTouchEventListeners();
}
}; };
_proto._addTouchEventListeners = function _addTouchEventListeners() { _proto._addTouchEventListeners = function _addTouchEventListeners() {
@ -1026,8 +1032,8 @@
if (isCycling) { if (isCycling) {
this.cycle(); this.cycle();
} }
}; // Static } // Static
;
Carousel._jQueryInterface = function _jQueryInterface(config) { Carousel._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -1054,7 +1060,7 @@
} }
data[action](); data[action]();
} else if (_config.interval) { } else if (_config.interval && _config.ride) {
data.pause(); data.pause();
data.cycle(); data.cycle();
} }
@ -1143,7 +1149,7 @@
*/ */
var NAME$3 = 'collapse'; var NAME$3 = 'collapse';
var VERSION$3 = '4.2.1'; var VERSION$3 = '4.3.1';
var DATA_KEY$3 = 'bs.collapse'; var DATA_KEY$3 = 'bs.collapse';
var EVENT_KEY$3 = "." + DATA_KEY$3; var EVENT_KEY$3 = "." + DATA_KEY$3;
var DATA_API_KEY$3 = '.data-api'; var DATA_API_KEY$3 = '.data-api';
@ -1365,8 +1371,8 @@
this._element = null; this._element = null;
this._triggerArray = null; this._triggerArray = null;
this._isTransitioning = null; this._isTransitioning = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$1, config); config = _objectSpread({}, Default$1, config);
@ -1410,8 +1416,8 @@
if (triggerArray.length) { if (triggerArray.length) {
$(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
} }
}; // Static } // Static
;
Collapse._getTargetFromElement = function _getTargetFromElement(element) { Collapse._getTargetFromElement = function _getTargetFromElement(element) {
var selector = Util.getSelectorFromElement(element); var selector = Util.getSelectorFromElement(element);
@ -1503,7 +1509,7 @@
*/ */
var NAME$4 = 'dropdown'; var NAME$4 = 'dropdown';
var VERSION$4 = '4.2.1'; var VERSION$4 = '4.3.1';
var DATA_KEY$4 = 'bs.dropdown'; var DATA_KEY$4 = 'bs.dropdown';
var EVENT_KEY$4 = "." + DATA_KEY$4; var EVENT_KEY$4 = "." + DATA_KEY$4;
var DATA_API_KEY$4 = '.data-api'; var DATA_API_KEY$4 = '.data-api';
@ -1732,8 +1738,8 @@
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // Private } // Private
;
_proto._addEventListeners = function _addEventListeners() { _proto._addEventListeners = function _addEventListeners() {
var _this = this; var _this = this;
@ -1789,24 +1795,28 @@
return $(this._element).closest('.navbar').length > 0; return $(this._element).closest('.navbar').length > 0;
}; };
_proto._getPopperConfig = function _getPopperConfig() { _proto._getOffset = function _getOffset() {
var _this2 = this; var _this2 = this;
var offsetConf = {}; var offset = {};
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});
return data; return data;
}; };
} else { } else {
offsetConf.offset = this._config.offset; offset.offset = this._config.offset;
} }
return offset;
};
_proto._getPopperConfig = function _getPopperConfig() {
var popperConfig = { var popperConfig = {
placement: this._getPlacement(), placement: this._getPlacement(),
modifiers: { modifiers: {
offset: offsetConf, offset: this._getOffset(),
flip: { flip: {
enabled: this._config.flip enabled: this._config.flip
}, },
@ -1824,8 +1834,8 @@
} }
return popperConfig; return popperConfig;
}; // Static } // Static
;
Dropdown._jQueryInterface = function _jQueryInterface(config) { Dropdown._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -1909,8 +1919,8 @@
} }
return parent || element.parentNode; return parent || element.parentNode;
}; // eslint-disable-next-line complexity } // eslint-disable-next-line complexity
;
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
// If not input/textarea: // If not input/textarea:
@ -2025,7 +2035,7 @@
*/ */
var NAME$5 = 'modal'; var NAME$5 = 'modal';
var VERSION$5 = '4.2.1'; var VERSION$5 = '4.3.1';
var DATA_KEY$5 = 'bs.modal'; var DATA_KEY$5 = 'bs.modal';
var EVENT_KEY$5 = "." + DATA_KEY$5; var EVENT_KEY$5 = "." + DATA_KEY$5;
var DATA_API_KEY$5 = '.data-api'; var DATA_API_KEY$5 = '.data-api';
@ -2058,6 +2068,7 @@
CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5 CLICK_DATA_API: "click" + EVENT_KEY$5 + DATA_API_KEY$5
}; };
var ClassName$5 = { var ClassName$5 = {
SCROLLABLE: 'modal-dialog-scrollable',
SCROLLBAR_MEASURER: 'modal-scrollbar-measure', SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
BACKDROP: 'modal-backdrop', BACKDROP: 'modal-backdrop',
OPEN: 'modal-open', OPEN: 'modal-open',
@ -2066,6 +2077,7 @@
}; };
var Selector$5 = { var Selector$5 = {
DIALOG: '.modal-dialog', DIALOG: '.modal-dialog',
MODAL_BODY: '.modal-body',
DATA_TOGGLE: '[data-toggle="modal"]', DATA_TOGGLE: '[data-toggle="modal"]',
DATA_DISMISS: '[data-dismiss="modal"]', DATA_DISMISS: '[data-dismiss="modal"]',
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
@ -2218,8 +2230,8 @@
_proto.handleUpdate = function handleUpdate() { _proto.handleUpdate = function handleUpdate() {
this._adjustDialog(); this._adjustDialog();
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$3, config); config = _objectSpread({}, Default$3, config);
@ -2243,7 +2255,11 @@
this._element.setAttribute('aria-modal', true); this._element.setAttribute('aria-modal', true);
this._element.scrollTop = 0; if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {
this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;
} else {
this._element.scrollTop = 0;
}
if (transition) { if (transition) {
Util.reflow(this._element); Util.reflow(this._element);
@ -2413,11 +2429,11 @@
} else if (callback) { } else if (callback) {
callback(); callback();
} }
}; // ---------------------------------------------------------------------- } // ----------------------------------------------------------------------
// the following methods are used to handle overflowing modals // the following methods are used to handle overflowing modals
// todo (fat): these should probably be refactored out of modal.js // todo (fat): these should probably be refactored out of modal.js
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
;
_proto._adjustDialog = function _adjustDialog() { _proto._adjustDialog = function _adjustDialog() {
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
@ -2502,8 +2518,8 @@
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv); document.body.removeChild(scrollDiv);
return scrollbarWidth; return scrollbarWidth;
}; // Static } // Static
;
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
return this.each(function () { return this.each(function () {
@ -2594,6 +2610,127 @@
return Modal._jQueryInterface; return Modal._jQueryInterface;
}; };
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.3.1): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
a: ['target', 'href', 'title', 'rel'],
area: [],
b: [],
br: [],
col: [],
code: [],
div: [],
em: [],
hr: [],
h1: [],
h2: [],
h3: [],
h4: [],
h5: [],
h6: [],
i: [],
img: ['src', 'alt', 'title', 'width', 'height'],
li: [],
ol: [],
p: [],
pre: [],
s: [],
small: [],
span: [],
sub: [],
sup: [],
strong: [],
u: [],
ul: []
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
};
var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
*/
var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
function allowedAttribute(attr, allowedAttributeList) {
var attrName = attr.nodeName.toLowerCase();
if (allowedAttributeList.indexOf(attrName) !== -1) {
if (uriAttrs.indexOf(attrName) !== -1) {
return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
}
return true;
}
var regExp = allowedAttributeList.filter(function (attrRegex) {
return attrRegex instanceof RegExp;
}); // Check if a regular expression validates the attribute.
for (var i = 0, l = regExp.length; i < l; i++) {
if (attrName.match(regExp[i])) {
return true;
}
}
return false;
}
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
if (unsafeHtml.length === 0) {
return unsafeHtml;
}
if (sanitizeFn && typeof sanitizeFn === 'function') {
return sanitizeFn(unsafeHtml);
}
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
var attributeList = [].slice.call(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName);
}
});
};
for (var i = 0, len = elements.length; i < len; i++) {
var _ret = _loop(i, len);
if (_ret === "continue") continue;
}
return createdDocument.body.innerHTML;
}
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Constants * Constants
@ -2601,12 +2738,13 @@
*/ */
var NAME$6 = 'tooltip'; var NAME$6 = 'tooltip';
var VERSION$6 = '4.2.1'; var VERSION$6 = '4.3.1';
var DATA_KEY$6 = 'bs.tooltip'; var DATA_KEY$6 = 'bs.tooltip';
var EVENT_KEY$6 = "." + DATA_KEY$6; var EVENT_KEY$6 = "." + DATA_KEY$6;
var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6]; var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];
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 DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
var DefaultType$4 = { var DefaultType$4 = {
animation: 'boolean', animation: 'boolean',
template: 'string', template: 'string',
@ -2616,10 +2754,13 @@
html: 'boolean', html: 'boolean',
selector: '(string|boolean)', selector: '(string|boolean)',
placement: '(string|function)', placement: '(string|function)',
offset: '(number|string)', offset: '(number|string|function)',
container: '(string|element|boolean)', container: '(string|element|boolean)',
fallbackPlacement: '(string|array)', fallbackPlacement: '(string|array)',
boundary: '(string|element)' boundary: '(string|element)',
sanitize: 'boolean',
sanitizeFn: '(null|function)',
whiteList: 'object'
}; };
var AttachmentMap$1 = { var AttachmentMap$1 = {
AUTO: 'auto', AUTO: 'auto',
@ -2640,7 +2781,10 @@
offset: 0, offset: 0,
container: false, container: false,
fallbackPlacement: 'flip', fallbackPlacement: 'flip',
boundary: 'scrollParent' boundary: 'scrollParent',
sanitize: true,
sanitizeFn: null,
whiteList: DefaultWhitelist
}; };
var HoverState = { var HoverState = {
SHOW: 'show', SHOW: 'show',
@ -2825,9 +2969,7 @@
this._popper = new Popper(this.element, tip, { this._popper = new Popper(this.element, tip, {
placement: attachment, placement: attachment,
modifiers: { modifiers: {
offset: { offset: this._getOffset(),
offset: this.config.offset
},
flip: { flip: {
behavior: this.config.fallbackPlacement behavior: this.config.fallbackPlacement
}, },
@ -2936,8 +3078,8 @@
if (this._popper !== null) { if (this._popper !== null) {
this._popper.scheduleUpdate(); this._popper.scheduleUpdate();
} }
}; // Protected } // Protected
;
_proto.isWithContent = function isWithContent() { _proto.isWithContent = function isWithContent() {
return Boolean(this.getTitle()); return Boolean(this.getTitle());
@ -2959,19 +3101,27 @@
}; };
_proto.setElementContent = function setElementContent($element, content) { _proto.setElementContent = function setElementContent($element, content) {
var html = this.config.html;
if (typeof content === 'object' && (content.nodeType || content.jquery)) { if (typeof content === 'object' && (content.nodeType || content.jquery)) {
// Content is a DOM node or a jQuery // Content is a DOM node or a jQuery
if (html) { if (this.config.html) {
if (!$(content).parent().is($element)) { if (!$(content).parent().is($element)) {
$element.empty().append(content); $element.empty().append(content);
} }
} else { } else {
$element.text($(content).text()); $element.text($(content).text());
} }
return;
}
if (this.config.html) {
if (this.config.sanitize) {
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
$element.html(content);
} else { } else {
$element[html ? 'html' : 'text'](content); $element.text(content);
} }
}; };
@ -2983,8 +3133,25 @@
} }
return title; return title;
}; // Private } // Private
;
_proto._getOffset = function _getOffset() {
var _this3 = this;
var offset = {};
if (typeof this.config.offset === 'function') {
offset.fn = function (data) {
data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});
return data;
};
} else {
offset.offset = this.config.offset;
}
return offset;
};
_proto._getContainer = function _getContainer() { _proto._getContainer = function _getContainer() {
if (this.config.container === false) { if (this.config.container === false) {
@ -3003,27 +3170,27 @@
}; };
_proto._setListeners = function _setListeners() { _proto._setListeners = function _setListeners() {
var _this3 = this; var _this4 = this;
var triggers = this.config.trigger.split(' '); var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) { triggers.forEach(function (trigger) {
if (trigger === 'click') { if (trigger === 'click') {
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this3.toggle(event); return _this4.toggle(event);
}); });
} else if (trigger !== Trigger.MANUAL) { } else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
$(_this3.element).on(eventIn, _this3.config.selector, function (event) { $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
return _this3._enter(event); return _this4._enter(event);
}).on(eventOut, _this3.config.selector, function (event) { }).on(eventOut, _this4.config.selector, function (event) {
return _this3._leave(event); return _this4._leave(event);
}); });
} }
}); });
$(this.element).closest('.modal').on('hide.bs.modal', function () { $(this.element).closest('.modal').on('hide.bs.modal', function () {
if (_this3.element) { if (_this4.element) {
_this3.hide(); _this4.hide();
} }
}); });
@ -3122,7 +3289,13 @@
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {}); var dataAttributes = $(this.element).data();
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3140,6 +3313,11 @@
} }
Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
}
return config; return config;
}; };
@ -3188,8 +3366,8 @@
this.hide(); this.hide();
this.show(); this.show();
this.config.animation = initConfigAnimation; this.config.animation = initConfigAnimation;
}; // Static } // Static
;
Tooltip._jQueryInterface = function _jQueryInterface(config) { Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -3277,7 +3455,7 @@
*/ */
var NAME$7 = 'popover'; var NAME$7 = 'popover';
var VERSION$7 = '4.2.1'; var VERSION$7 = '4.3.1';
var DATA_KEY$7 = 'bs.popover'; var DATA_KEY$7 = 'bs.popover';
var EVENT_KEY$7 = "." + DATA_KEY$7; var EVENT_KEY$7 = "." + DATA_KEY$7;
var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7]; var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];
@ -3360,8 +3538,8 @@
this.setElementContent($tip.find(Selector$7.CONTENT), content); this.setElementContent($tip.find(Selector$7.CONTENT), content);
$tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW); $tip.removeClass(ClassName$7.FADE + " " + ClassName$7.SHOW);
}; // Private } // Private
;
_proto._getContent = function _getContent() { _proto._getContent = function _getContent() {
return this.element.getAttribute('data-content') || this.config.content; return this.element.getAttribute('data-content') || this.config.content;
@ -3374,8 +3552,8 @@
if (tabClass !== null && tabClass.length > 0) { if (tabClass !== null && tabClass.length > 0) {
$tip.removeClass(tabClass.join('')); $tip.removeClass(tabClass.join(''));
} }
}; // Static } // Static
;
Popover._jQueryInterface = function _jQueryInterface(config) { Popover._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -3464,7 +3642,7 @@
*/ */
var NAME$8 = 'scrollspy'; var NAME$8 = 'scrollspy';
var VERSION$8 = '4.2.1'; var VERSION$8 = '4.3.1';
var DATA_KEY$8 = 'bs.scrollspy'; var DATA_KEY$8 = 'bs.scrollspy';
var EVENT_KEY$8 = "." + DATA_KEY$8; var EVENT_KEY$8 = "." + DATA_KEY$8;
var DATA_API_KEY$6 = '.data-api'; var DATA_API_KEY$6 = '.data-api';
@ -3587,8 +3765,8 @@
this._targets = null; this._targets = null;
this._activeTarget = null; this._activeTarget = null;
this._scrollHeight = null; this._scrollHeight = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {}); config = _objectSpread({}, Default$6, typeof config === 'object' && config ? config : {});
@ -3695,8 +3873,8 @@
}).forEach(function (node) { }).forEach(function (node) {
return node.classList.remove(ClassName$8.ACTIVE); return node.classList.remove(ClassName$8.ACTIVE);
}); });
}; // Static } // Static
;
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -3771,7 +3949,7 @@
*/ */
var NAME$9 = 'tab'; var NAME$9 = 'tab';
var VERSION$9 = '4.2.1'; var VERSION$9 = '4.3.1';
var DATA_KEY$9 = 'bs.tab'; var DATA_KEY$9 = 'bs.tab';
var EVENT_KEY$9 = "." + DATA_KEY$9; var EVENT_KEY$9 = "." + DATA_KEY$9;
var DATA_API_KEY$7 = '.data-api'; var DATA_API_KEY$7 = '.data-api';
@ -3879,8 +4057,8 @@
_proto.dispose = function dispose() { _proto.dispose = function dispose() {
$.removeData(this._element, DATA_KEY$9); $.removeData(this._element, DATA_KEY$9);
this._element = null; this._element = null;
}; // Private } // Private
;
_proto._activate = function _activate(element, container, callback) { _proto._activate = function _activate(element, container, callback) {
var _this2 = this; var _this2 = this;
@ -3922,7 +4100,10 @@
} }
Util.reflow(element); Util.reflow(element);
$(element).addClass(ClassName$9.SHOW);
if (element.classList.contains(ClassName$9.FADE)) {
element.classList.add(ClassName$9.SHOW);
}
if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) { if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {
var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0]; var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];
@ -3938,8 +4119,8 @@
if (callback) { if (callback) {
callback(); callback();
} }
}; // Static } // Static
;
Tab._jQueryInterface = function _jQueryInterface(config) { Tab._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -4003,7 +4184,7 @@
*/ */
var NAME$a = 'toast'; var NAME$a = 'toast';
var VERSION$a = '4.2.1'; var VERSION$a = '4.3.1';
var DATA_KEY$a = 'bs.toast'; var DATA_KEY$a = 'bs.toast';
var EVENT_KEY$a = "." + DATA_KEY$a; var EVENT_KEY$a = "." + DATA_KEY$a;
var JQUERY_NO_CONFLICT$a = $.fn[NAME$a]; var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];
@ -4118,8 +4299,8 @@
$.removeData(this._element, DATA_KEY$a); $.removeData(this._element, DATA_KEY$a);
this._element = null; this._element = null;
this._config = null; this._config = null;
}; // Private } // Private
;
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {}); config = _objectSpread({}, Default$7, $(this._element).data(), typeof config === 'object' && config ? config : {});
@ -4152,8 +4333,8 @@
} else { } else {
complete(); complete();
} }
}; // Static } // Static
;
Toast._jQueryInterface = function _jQueryInterface(config) { Toast._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
@ -4187,6 +4368,11 @@
get: function get() { get: function get() {
return DefaultType$7; return DefaultType$7;
} }
}, {
key: "Default",
get: function get() {
return Default$7;
}
}]); }]);
return Toast; return Toast;
@ -4208,7 +4394,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.2.1): index.js * Bootstrap (v4.3.1): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -4245,5 +4431,5 @@
Object.defineProperty(exports, '__esModule', { value: true }); Object.defineProperty(exports, '__esModule', { value: true });
}))); }));
//# sourceMappingURL=bootstrap.js.map //# sourceMappingURL=bootstrap.js.map

File diff suppressed because one or more lines are too long

View File

@ -6,13 +6,14 @@
.badge { .badge {
display: inline-block; display: inline-block;
padding: $badge-padding-y $badge-padding-x; padding: $badge-padding-y $badge-padding-x;
font-size: $badge-font-size; @include font-size($badge-font-size);
font-weight: $badge-font-weight; font-weight: $badge-font-weight;
line-height: 1; line-height: 1;
text-align: center; text-align: center;
white-space: nowrap; white-space: nowrap;
vertical-align: baseline; vertical-align: baseline;
@include border-radius($badge-border-radius); @include border-radius($badge-border-radius);
@include transition($badge-transition);
@at-root a#{&} { @at-root a#{&} {
@include hover-focus { @include hover-focus {

View File

@ -6,6 +6,7 @@
.btn { .btn {
display: inline-block; display: inline-block;
font-family: $btn-font-family;
font-weight: $btn-font-weight; font-weight: $btn-font-weight;
color: $body-color; color: $body-color;
text-align: center; text-align: center;
@ -34,11 +35,6 @@
@include box-shadow(none); @include box-shadow(none);
} }
// Opinionated: add "hand" cursor to non-disabled .btn elements
&:not(:disabled):not(.disabled) {
cursor: pointer;
}
&:not(:disabled):not(.disabled):active, &:not(:disabled):not(.disabled):active,
&:not(:disabled):not(.disabled).active { &:not(:disabled):not(.disabled).active {
@include box-shadow($btn-active-box-shadow); @include box-shadow($btn-active-box-shadow);
@ -81,6 +77,7 @@ fieldset:disabled a.btn {
.btn-link { .btn-link {
font-weight: $font-weight-normal; font-weight: $font-weight-normal;
color: $link-color; color: $link-color;
text-decoration: $link-decoration;
@include hover { @include hover {
color: $link-hover-color; color: $link-hover-color;

View File

@ -6,7 +6,7 @@
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-width: 0; min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106
word-wrap: break-word; word-wrap: break-word;
background-color: $card-bg; background-color: $card-bg;
background-clip: border-box; background-clip: border-box;
@ -36,6 +36,7 @@
// as much space as possible, ensuring footers are aligned to the bottom. // as much space as possible, ensuring footers are aligned to the bottom.
flex: 1 1 auto; flex: 1 1 auto;
padding: $card-spacer-x; padding: $card-spacer-x;
color: $card-color;
} }
.card-title { .card-title {
@ -195,55 +196,35 @@
// Handle rounded corners // Handle rounded corners
@if $enable-rounded { @if $enable-rounded {
&:first-child { &:not(:last-child) {
@include border-right-radius(0); @include border-right-radius(0);
.card-img-top, .card-img-top,
.card-header { .card-header {
// stylelint-disable-next-line property-blacklist
border-top-right-radius: 0; border-top-right-radius: 0;
} }
.card-img-bottom, .card-img-bottom,
.card-footer { .card-footer {
// stylelint-disable-next-line property-blacklist
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
} }
&:last-child { &:not(:first-child) {
@include border-left-radius(0); @include border-left-radius(0);
.card-img-top, .card-img-top,
.card-header { .card-header {
// stylelint-disable-next-line property-blacklist
border-top-left-radius: 0; border-top-left-radius: 0;
} }
.card-img-bottom, .card-img-bottom,
.card-footer { .card-footer {
// stylelint-disable-next-line property-blacklist
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
} }
&:only-child {
@include border-radius($card-border-radius);
.card-img-top,
.card-header {
@include border-top-radius($card-border-radius);
}
.card-img-bottom,
.card-footer {
@include border-bottom-radius($card-border-radius);
}
}
&:not(:first-child):not(:last-child):not(:only-child) {
@include border-radius(0);
.card-img-top,
.card-img-bottom,
.card-header,
.card-footer {
@include border-radius(0);
}
}
} }
} }
} }
@ -278,29 +259,27 @@
// //
.accordion { .accordion {
.card { > .card {
overflow: hidden; overflow: hidden;
&:not(:first-of-type) { &:not(:first-of-type) {
.card-header:first-child { .card-header:first-child {
border-radius: 0; @include border-radius(0);
} }
&:not(:last-of-type) { &:not(:last-of-type) {
border-bottom: 0; border-bottom: 0;
border-radius: 0; @include border-radius(0);
} }
} }
&:first-of-type { &:first-of-type {
border-bottom: 0; border-bottom: 0;
border-bottom-right-radius: 0; @include border-bottom-radius(0);
border-bottom-left-radius: 0;
} }
&:last-of-type { &:last-of-type {
border-top-left-radius: 0; @include border-top-radius(0);
border-top-right-radius: 0;
} }
.card-header { .card-header {

View File

@ -127,8 +127,7 @@
display: inline-block; display: inline-block;
width: $carousel-control-icon-width; width: $carousel-control-icon-width;
height: $carousel-control-icon-width; height: $carousel-control-icon-width;
background: transparent no-repeat center center; background: no-repeat 50% / 100% 100%;
background-size: 100% 100%;
} }
.carousel-control-prev-icon { .carousel-control-prev-icon {
background-image: $carousel-control-prev-icon-bg; background-image: $carousel-control-prev-icon-bg;

View File

@ -1,6 +1,6 @@
.close { .close {
float: right; float: right;
font-size: $close-font-size; @include font-size($close-font-size);
font-weight: $close-font-weight; font-weight: $close-font-weight;
line-height: 1; line-height: 1;
color: $close-color; color: $close-color;
@ -17,9 +17,6 @@
@include hover-focus { @include hover-focus {
opacity: .75; opacity: .75;
} }
// Opinionated: add "hand" cursor to non-disabled .close elements
cursor: pointer;
} }
} }

View File

@ -1,6 +1,6 @@
// Inline code // Inline code
code { code {
font-size: $code-font-size; @include font-size($code-font-size);
color: $code-color; color: $code-color;
word-break: break-word; word-break: break-word;
@ -13,7 +13,7 @@ code {
// User input typically entered via keyboard // User input typically entered via keyboard
kbd { kbd {
padding: $kbd-padding-y $kbd-padding-x; padding: $kbd-padding-y $kbd-padding-x;
font-size: $kbd-font-size; @include font-size($kbd-font-size);
color: $kbd-color; color: $kbd-color;
background-color: $kbd-bg; background-color: $kbd-bg;
@include border-radius($border-radius-sm); @include border-radius($border-radius-sm);
@ -21,7 +21,7 @@ kbd {
kbd { kbd {
padding: 0; padding: 0;
font-size: 100%; @include font-size(100%);
font-weight: $nested-kbd-font-weight; font-weight: $nested-kbd-font-weight;
@include box-shadow(none); @include box-shadow(none);
} }
@ -30,12 +30,12 @@ kbd {
// Blocks of code // Blocks of code
pre { pre {
display: block; display: block;
font-size: $code-font-size; @include font-size($code-font-size);
color: $pre-color; color: $pre-color;
// Account for some code outputs that place code tags in pre tags // Account for some code outputs that place code tags in pre tags
code { code {
font-size: inherit; @include font-size(inherit);
color: inherit; color: inherit;
word-break: normal; word-break: normal;
} }

View File

@ -95,9 +95,7 @@
width: $custom-control-indicator-size; width: $custom-control-indicator-size;
height: $custom-control-indicator-size; height: $custom-control-indicator-size;
content: ""; content: "";
background-repeat: no-repeat; background: no-repeat 50% / #{$custom-control-indicator-bg-size};
background-position: center center;
background-size: $custom-control-indicator-bg-size;
} }
} }
@ -144,6 +142,7 @@
.custom-radio { .custom-radio {
.custom-control-label::before { .custom-control-label::before {
// stylelint-disable-next-line property-blacklist
border-radius: $custom-radio-indicator-border-radius; border-radius: $custom-radio-indicator-border-radius;
} }
@ -173,6 +172,7 @@
left: -($custom-switch-width + $custom-control-gutter); left: -($custom-switch-width + $custom-control-gutter);
width: $custom-switch-width; width: $custom-switch-width;
pointer-events: all; pointer-events: all;
// stylelint-disable-next-line property-blacklist
border-radius: $custom-switch-indicator-border-radius; border-radius: $custom-switch-indicator-border-radius;
} }
@ -182,6 +182,7 @@
width: $custom-switch-indicator-size; width: $custom-switch-indicator-size;
height: $custom-switch-indicator-size; height: $custom-switch-indicator-size;
background-color: $custom-control-indicator-border-color; background-color: $custom-control-indicator-border-color;
// stylelint-disable-next-line property-blacklist
border-radius: $custom-switch-indicator-border-radius; border-radius: $custom-switch-indicator-border-radius;
@include transition(transform .15s ease-in-out, $custom-forms-transition); @include transition(transform .15s ease-in-out, $custom-forms-transition);
} }
@ -213,6 +214,8 @@
width: 100%; width: 100%;
height: $custom-select-height; height: $custom-select-height;
padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x; padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x;
font-family: $custom-select-font-family;
@include font-size($custom-select-font-size);
font-weight: $custom-select-font-weight; font-weight: $custom-select-font-weight;
line-height: $custom-select-line-height; line-height: $custom-select-line-height;
color: $custom-select-color; color: $custom-select-color;
@ -220,11 +223,7 @@
background: $custom-select-background; background: $custom-select-background;
background-color: $custom-select-bg; background-color: $custom-select-bg;
border: $custom-select-border-width solid $custom-select-border-color; border: $custom-select-border-width solid $custom-select-border-color;
@if $enable-rounded { @include border-radius($custom-select-border-radius, 0);
border-radius: $custom-select-border-radius;
} @else {
border-radius: 0;
}
@include box-shadow($custom-select-box-shadow); @include box-shadow($custom-select-box-shadow);
appearance: none; appearance: none;
@ -262,7 +261,7 @@
// Hides the default caret in IE11 // Hides the default caret in IE11
&::-ms-expand { &::-ms-expand {
opacity: 0; display: none;
} }
} }
@ -271,7 +270,7 @@
padding-top: $custom-select-padding-y-sm; padding-top: $custom-select-padding-y-sm;
padding-bottom: $custom-select-padding-y-sm; padding-bottom: $custom-select-padding-y-sm;
padding-left: $custom-select-padding-x-sm; padding-left: $custom-select-padding-x-sm;
font-size: $custom-select-font-size-sm; @include font-size($custom-select-font-size-sm);
} }
.custom-select-lg { .custom-select-lg {
@ -279,7 +278,7 @@
padding-top: $custom-select-padding-y-lg; padding-top: $custom-select-padding-y-lg;
padding-bottom: $custom-select-padding-y-lg; padding-bottom: $custom-select-padding-y-lg;
padding-left: $custom-select-padding-x-lg; padding-left: $custom-select-padding-x-lg;
font-size: $custom-select-font-size-lg; @include font-size($custom-select-font-size-lg);
} }
@ -331,6 +330,7 @@
z-index: 1; z-index: 1;
height: $custom-file-height; height: $custom-file-height;
padding: $custom-file-padding-y $custom-file-padding-x; padding: $custom-file-padding-y $custom-file-padding-x;
font-family: $custom-file-font-family;
font-weight: $custom-file-font-weight; font-weight: $custom-file-font-weight;
line-height: $custom-file-line-height; line-height: $custom-file-line-height;
color: $custom-file-color; color: $custom-file-color;

View File

@ -7,6 +7,8 @@
} }
.dropdown-toggle { .dropdown-toggle {
white-space: nowrap;
// Generate the caret automatically // Generate the caret automatically
@include caret; @include caret;
} }
@ -22,8 +24,8 @@
min-width: $dropdown-min-width; min-width: $dropdown-min-width;
padding: $dropdown-padding-y 0; padding: $dropdown-padding-y 0;
margin: $dropdown-spacer 0 0; // override default ul margin: $dropdown-spacer 0 0; // override default ul
font-size: $font-size-base; // Redeclare because nesting can cause inheritance issues @include font-size($dropdown-font-size);
color: $body-color; color: $dropdown-color;
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
list-style: none; list-style: none;
background-color: $dropdown-bg; background-color: $dropdown-bg;
@ -33,17 +35,6 @@
@include box-shadow($dropdown-box-shadow); @include box-shadow($dropdown-box-shadow);
} }
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.dropdown-menu#{$infix}-right {
right: 0;
left: auto;
}
}
}
@each $breakpoint in map-keys($grid-breakpoints) { @each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) { @include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints); $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
@ -52,6 +43,11 @@
right: auto; right: auto;
left: 0; left: 0;
} }
.dropdown-menu#{$infix}-right {
right: 0;
left: auto;
}
} }
} }
@ -118,7 +114,7 @@
// 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, $dropdown-divider-margin-y);
} }
// Links, buttons, and more within the dropdown menu // Links, buttons, and more within the dropdown menu
@ -136,12 +132,16 @@
background-color: transparent; // For `<button>`s background-color: transparent; // For `<button>`s
border: 0; // For `<button>`s border: 0; // For `<button>`s
&:first-child { // Prevent dropdown overflow if there's no padding
@include border-top-radius($dropdown-inner-border-radius); // See https://github.com/twbs/bootstrap/pull/27703
} @if $dropdown-padding-y == 0 {
&:first-child {
@include border-top-radius($dropdown-inner-border-radius);
}
&:last-child { &:last-child {
@include border-bottom-radius($dropdown-inner-border-radius); @include border-bottom-radius($dropdown-inner-border-radius);
}
} }
@include hover-focus { @include hover-focus {
@ -178,7 +178,7 @@
display: block; display: block;
padding: $dropdown-padding-y $dropdown-item-padding-x; padding: $dropdown-padding-y $dropdown-item-padding-x;
margin-bottom: 0; // for use with heading elements margin-bottom: 0; // for use with heading elements
font-size: $font-size-sm; @include font-size($font-size-sm);
color: $dropdown-header-color; color: $dropdown-header-color;
white-space: nowrap; // as with > li > a white-space: nowrap; // as with > li > a
} }

View File

@ -9,7 +9,8 @@
width: 100%; width: 100%;
height: $input-height; height: $input-height;
padding: $input-padding-y $input-padding-x; padding: $input-padding-y $input-padding-x;
font-size: $input-font-size; font-family: $input-font-family;
@include font-size($input-font-size);
font-weight: $input-font-weight; font-weight: $input-font-weight;
line-height: $input-line-height; line-height: $input-line-height;
color: $input-color; color: $input-color;
@ -18,13 +19,7 @@
border: $input-border-width solid $input-border-color; border: $input-border-width solid $input-border-color;
// Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS. // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.
@if $enable-rounded { @include border-radius($input-border-radius, 0);
// Manually use the if/else instead of the mixin to account for iOS override
border-radius: $input-border-radius;
} @else {
// Otherwise undo the iOS default
border-radius: 0;
}
@include box-shadow($input-box-shadow); @include box-shadow($input-box-shadow);
@include transition($input-transition); @include transition($input-transition);
@ -88,21 +83,21 @@ select.form-control {
padding-top: calc(#{$input-padding-y} + #{$input-border-width}); padding-top: calc(#{$input-padding-y} + #{$input-border-width});
padding-bottom: calc(#{$input-padding-y} + #{$input-border-width}); padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});
margin-bottom: 0; // Override the `<label>/<legend>` default margin-bottom: 0; // Override the `<label>/<legend>` default
font-size: inherit; // Override the `<legend>` default @include font-size(inherit); // Override the `<legend>` default
line-height: $input-line-height; line-height: $input-line-height;
} }
.col-form-label-lg { .col-form-label-lg {
padding-top: calc(#{$input-padding-y-lg} + #{$input-border-width}); padding-top: calc(#{$input-padding-y-lg} + #{$input-border-width});
padding-bottom: calc(#{$input-padding-y-lg} + #{$input-border-width}); padding-bottom: calc(#{$input-padding-y-lg} + #{$input-border-width});
font-size: $input-font-size-lg; @include font-size($input-font-size-lg);
line-height: $input-line-height-lg; line-height: $input-line-height-lg;
} }
.col-form-label-sm { .col-form-label-sm {
padding-top: calc(#{$input-padding-y-sm} + #{$input-border-width}); padding-top: calc(#{$input-padding-y-sm} + #{$input-border-width});
padding-bottom: calc(#{$input-padding-y-sm} + #{$input-border-width}); padding-bottom: calc(#{$input-padding-y-sm} + #{$input-border-width});
font-size: $input-font-size-sm; @include font-size($input-font-size-sm);
line-height: $input-line-height-sm; line-height: $input-line-height-sm;
} }
@ -142,7 +137,7 @@ select.form-control {
.form-control-sm { .form-control-sm {
height: $input-height-sm; height: $input-height-sm;
padding: $input-padding-y-sm $input-padding-x-sm; padding: $input-padding-y-sm $input-padding-x-sm;
font-size: $input-font-size-sm; @include font-size($input-font-size-sm);
line-height: $input-line-height-sm; line-height: $input-line-height-sm;
@include border-radius($input-border-radius-sm); @include border-radius($input-border-radius-sm);
} }
@ -150,7 +145,7 @@ select.form-control {
.form-control-lg { .form-control-lg {
height: $input-height-lg; height: $input-height-lg;
padding: $input-padding-y-lg $input-padding-x-lg; padding: $input-padding-y-lg $input-padding-x-lg;
font-size: $input-font-size-lg; @include font-size($input-font-size-lg);
line-height: $input-line-height-lg; line-height: $input-line-height-lg;
@include border-radius($input-border-radius-lg); @include border-radius($input-border-radius-lg);
} }
@ -163,7 +158,6 @@ select.form-control {
} }
} }
// stylelint-disable-next-line no-duplicate-selectors
textarea.form-control { textarea.form-control {
height: auto; height: auto;
} }
@ -248,8 +242,9 @@ textarea.form-control {
// pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for
// server side validation. // server side validation.
@include form-validation-state("valid", $form-feedback-valid-color); @each $state, $data in $form-validation-states {
@include form-validation-state("invalid", $form-feedback-invalid-color); @include form-validation-state($state, map-get($data, color), map-get($data, icon));
}
// Inline forms // Inline forms
// //
@ -318,6 +313,7 @@ textarea.form-control {
} }
.form-check-input { .form-check-input {
position: relative; position: relative;
flex-shrink: 0;
margin-top: 0; margin-top: 0;
margin-right: $form-check-input-margin-x; margin-right: $form-check-input-margin-x;
margin-left: 0; margin-left: 0;

View File

@ -21,12 +21,12 @@
} }
// Starts at zero // Starts at zero
// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0. // Used to ensure the min-width of the lowest breakpoint starts at 0.
@mixin _assert-starts-at-zero($map) { @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") {
$values: map-values($map); $values: map-values($map);
$first-value: nth($values, 1); $first-value: nth($values, 1);
@if $first-value != 0 { @if $first-value != 0 {
@warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}.";
} }
} }

View File

@ -37,6 +37,6 @@
} }
.figure-caption { .figure-caption {
font-size: $figure-caption-font-size; @include font-size($figure-caption-font-size);
color: $figure-caption-color; color: $figure-caption-color;
} }

View File

@ -104,7 +104,7 @@
align-items: center; align-items: center;
padding: $input-padding-y $input-padding-x; padding: $input-padding-y $input-padding-x;
margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom
font-size: $font-size-base; // Match inputs @include font-size($input-font-size); // Match inputs
font-weight: $font-weight-normal; font-weight: $font-weight-normal;
line-height: $input-line-height; line-height: $input-line-height;
color: $input-group-addon-color; color: $input-group-addon-color;
@ -139,7 +139,7 @@
.input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-prepend > .btn,
.input-group-lg > .input-group-append > .btn { .input-group-lg > .input-group-append > .btn {
padding: $input-padding-y-lg $input-padding-x-lg; padding: $input-padding-y-lg $input-padding-x-lg;
font-size: $input-font-size-lg; @include font-size($input-font-size-lg);
line-height: $input-line-height-lg; line-height: $input-line-height-lg;
@include border-radius($input-border-radius-lg); @include border-radius($input-border-radius-lg);
} }
@ -156,7 +156,7 @@
.input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-prepend > .btn,
.input-group-sm > .input-group-append > .btn { .input-group-sm > .input-group-append > .btn {
padding: $input-padding-y-sm $input-padding-x-sm; padding: $input-padding-y-sm $input-padding-x-sm;
font-size: $input-font-size-sm; @include font-size($input-font-size-sm);
line-height: $input-line-height-sm; line-height: $input-line-height-sm;
@include border-radius($input-border-radius-sm); @include border-radius($input-border-radius-sm);
} }

View File

@ -1,6 +1,7 @@
.jumbotron { .jumbotron {
padding: $jumbotron-padding ($jumbotron-padding / 2); padding: $jumbotron-padding ($jumbotron-padding / 2);
margin-bottom: $jumbotron-padding; margin-bottom: $jumbotron-padding;
color: $jumbotron-color;
background-color: $jumbotron-bg; background-color: $jumbotron-bg;
@include border-radius($border-radius-lg); @include border-radius($border-radius-lg);

View File

@ -24,6 +24,7 @@
// Hover state // Hover state
@include hover-focus { @include hover-focus {
z-index: 1; // Place hover/focus items above their siblings for proper border styling
color: $list-group-action-hover-color; color: $list-group-action-hover-color;
text-decoration: none; text-decoration: none;
background-color: $list-group-hover-bg; background-color: $list-group-hover-bg;
@ -46,6 +47,7 @@
padding: $list-group-item-padding-y $list-group-item-padding-x; padding: $list-group-item-padding-y $list-group-item-padding-x;
// Place the border on the list items and negative margin up for better styling // Place the border on the list items and negative margin up for better styling
margin-bottom: -$list-group-border-width; margin-bottom: -$list-group-border-width;
color: $list-group-color;
background-color: $list-group-bg; background-color: $list-group-bg;
border: $list-group-border-width solid $list-group-border-color; border: $list-group-border-width solid $list-group-border-color;
@ -58,11 +60,6 @@
@include border-bottom-radius($list-group-border-radius); @include border-bottom-radius($list-group-border-radius);
} }
@include hover-focus {
z-index: 1; // Place hover/active items above their siblings for proper border styling
text-decoration: none;
}
&.disabled, &.disabled,
&:disabled { &:disabled {
color: $list-group-disabled-color; color: $list-group-disabled-color;
@ -80,6 +77,37 @@
} }
// Horizontal
//
// Change the layout of list group items from vertical (default) to horizontal.
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.list-group-horizontal#{$infix} {
flex-direction: row;
.list-group-item {
margin-right: -$list-group-border-width;
margin-bottom: 0;
&:first-child {
@include border-left-radius($list-group-border-radius);
@include border-top-right-radius(0);
}
&:last-child {
margin-right: 0;
@include border-right-radius($list-group-border-radius);
@include border-bottom-left-radius(0);
}
}
}
}
}
// Flush list items // Flush list items
// //
// Remove borders and border-radius to keep list group items edge-to-edge. Most // Remove borders and border-radius to keep list group items edge-to-edge. Most

View File

@ -2,6 +2,12 @@
// //
// Used in conjunction with global variables to enable certain theme features. // Used in conjunction with global variables to enable certain theme features.
// Vendor
@import "vendor/rfs";
// Deprecate
@import "mixins/deprecate";
// Utilities // Utilities
@import "mixins/breakpoints"; @import "mixins/breakpoints";
@import "mixins/hover"; @import "mixins/hover";

View File

@ -50,17 +50,51 @@
} }
} }
.modal-dialog-scrollable {
display: flex; // IE10/11
max-height: calc(100% - #{$modal-dialog-margin * 2});
.modal-content {
max-height: calc(100vh - #{$modal-dialog-margin * 2}); // IE10/11
overflow: hidden;
}
.modal-header,
.modal-footer {
flex-shrink: 0;
}
.modal-body {
overflow-y: auto;
}
}
.modal-dialog-centered { .modal-dialog-centered {
display: flex; display: flex;
align-items: center; align-items: center;
min-height: calc(100% - (#{$modal-dialog-margin} * 2)); min-height: calc(100% - #{$modal-dialog-margin * 2});
// Ensure `modal-dialog-centered` extends the full height of the view (IE10/11) // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11)
&::before { &::before {
display: block; // IE10 display: block; // IE10
height: calc(100vh - (#{$modal-dialog-margin} * 2)); height: calc(100vh - #{$modal-dialog-margin * 2});
content: ""; content: "";
} }
// Ensure `.modal-body` shows scrollbar (IE10/11)
&.modal-dialog-scrollable {
flex-direction: column;
justify-content: center;
height: 100%;
.modal-content {
max-height: none;
}
&::before {
content: none;
}
}
} }
// Actual modal // Actual modal
@ -70,6 +104,7 @@
flex-direction: column; flex-direction: column;
width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog` width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`
// counteract the pointer-events: none; in the .modal-dialog // counteract the pointer-events: none; in the .modal-dialog
color: $modal-content-color;
pointer-events: auto; pointer-events: auto;
background-color: $modal-content-bg; background-color: $modal-content-bg;
background-clip: padding-box; background-clip: padding-box;
@ -159,11 +194,19 @@
margin: $modal-dialog-margin-y-sm-up auto; margin: $modal-dialog-margin-y-sm-up auto;
} }
.modal-dialog-scrollable {
max-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
.modal-content {
max-height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
}
}
.modal-dialog-centered { .modal-dialog-centered {
min-height: calc(100% - (#{$modal-dialog-margin-y-sm-up} * 2)); min-height: calc(100% - #{$modal-dialog-margin-y-sm-up * 2});
&::before { &::before {
height: calc(100vh - (#{$modal-dialog-margin-y-sm-up} * 2)); height: calc(100vh - #{$modal-dialog-margin-y-sm-up * 2});
} }
} }

View File

@ -44,7 +44,7 @@
padding-top: $navbar-brand-padding-y; padding-top: $navbar-brand-padding-y;
padding-bottom: $navbar-brand-padding-y; padding-bottom: $navbar-brand-padding-y;
margin-right: $navbar-padding-x; margin-right: $navbar-padding-x;
font-size: $navbar-brand-font-size; @include font-size($navbar-brand-font-size);
line-height: inherit; line-height: inherit;
white-space: nowrap; white-space: nowrap;
@ -107,7 +107,7 @@
// Button for toggling the navbar when in its collapsed state // Button for toggling the navbar when in its collapsed state
.navbar-toggler { .navbar-toggler {
padding: $navbar-toggler-padding-y $navbar-toggler-padding-x; padding: $navbar-toggler-padding-y $navbar-toggler-padding-x;
font-size: $navbar-toggler-font-size; @include font-size($navbar-toggler-font-size);
line-height: 1; line-height: 1;
background-color: transparent; // remove default button style background-color: transparent; // remove default button style
border: $border-width solid transparent; // remove default button style border: $border-width solid transparent; // remove default button style
@ -116,11 +116,6 @@
@include hover-focus { @include hover-focus {
text-decoration: none; text-decoration: none;
} }
// Opinionated: add "hand" cursor to non-disabled .navbar-toggler elements
&:not(:disabled):not(.disabled) {
cursor: pointer;
}
} }
// Keep as a separate element so folks can easily override it with another icon // Keep as a separate element so folks can easily override it with another icon
@ -175,7 +170,7 @@
} }
.navbar-collapse { .navbar-collapse {
display: flex !important; // stylelint-disable-line declaration-no-important display: flex !important; // stylelint-disable-line declaration-no-important
// Changes flex-bases to auto because of an IE10 bug // Changes flex-bases to auto because of an IE10 bug
flex-basis: auto; flex-basis: auto;

View File

@ -27,11 +27,6 @@
outline: $pagination-focus-outline; outline: $pagination-focus-outline;
box-shadow: $pagination-focus-box-shadow; box-shadow: $pagination-focus-box-shadow;
} }
// Opinionated: add "hand" cursor to non-disabled .page-link elements
&:not(:disabled):not(.disabled) {
cursor: pointer;
}
} }
.page-item { .page-item {

View File

@ -8,7 +8,7 @@
// Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
// So reset our font and text properties to avoid inheriting weird values. // So reset our font and text properties to avoid inheriting weird values.
@include reset-text(); @include reset-text();
font-size: $popover-font-size; @include font-size($popover-font-size);
// Allow breaking very long words so they don't overflow the popover's bounds // Allow breaking very long words so they don't overflow the popover's bounds
word-wrap: break-word; word-wrap: break-word;
background-color: $popover-bg; background-color: $popover-bg;
@ -38,72 +38,63 @@
.bs-popover-top { .bs-popover-top {
margin-bottom: $popover-arrow-height; margin-bottom: $popover-arrow-height;
.arrow { > .arrow {
bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1); bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
}
.arrow::before, &::before {
.arrow::after { bottom: 0;
border-width: $popover-arrow-height ($popover-arrow-width / 2) 0; border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
} border-top-color: $popover-arrow-outer-color;
}
.arrow::before { &::after {
bottom: 0; bottom: $popover-border-width;
border-top-color: $popover-arrow-outer-color; border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
} border-top-color: $popover-arrow-color;
}
.arrow::after {
bottom: $popover-border-width;
border-top-color: $popover-arrow-color;
} }
} }
.bs-popover-right { .bs-popover-right {
margin-left: $popover-arrow-height; margin-left: $popover-arrow-height;
.arrow { > .arrow {
left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1); left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
width: $popover-arrow-height; width: $popover-arrow-height;
height: $popover-arrow-width; height: $popover-arrow-width;
margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
}
.arrow::before, &::before {
.arrow::after { left: 0;
border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0; border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
} border-right-color: $popover-arrow-outer-color;
}
.arrow::before { &::after {
left: 0; left: $popover-border-width;
border-right-color: $popover-arrow-outer-color; border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
} border-right-color: $popover-arrow-color;
}
.arrow::after {
left: $popover-border-width;
border-right-color: $popover-arrow-color;
} }
} }
.bs-popover-bottom { .bs-popover-bottom {
margin-top: $popover-arrow-height; margin-top: $popover-arrow-height;
.arrow { > .arrow {
top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1); top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
}
.arrow::before, &::before {
.arrow::after { top: 0;
border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2); border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
} border-bottom-color: $popover-arrow-outer-color;
}
.arrow::before { &::after {
top: 0; top: $popover-border-width;
border-bottom-color: $popover-arrow-outer-color; border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
} border-bottom-color: $popover-arrow-color;
}
.arrow::after {
top: $popover-border-width;
border-bottom-color: $popover-arrow-color;
} }
// This will remove the popover-header's border just below the arrow // This will remove the popover-header's border just below the arrow
@ -122,26 +113,23 @@
.bs-popover-left { .bs-popover-left {
margin-right: $popover-arrow-height; margin-right: $popover-arrow-height;
.arrow { > .arrow {
right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1); right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
width: $popover-arrow-height; width: $popover-arrow-height;
height: $popover-arrow-width; height: $popover-arrow-width;
margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
}
.arrow::before, &::before {
.arrow::after { right: 0;
border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height; border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
} border-left-color: $popover-arrow-outer-color;
}
.arrow::before { &::after {
right: 0; right: $popover-border-width;
border-left-color: $popover-arrow-outer-color; border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
} border-left-color: $popover-arrow-color;
}
.arrow::after {
right: $popover-border-width;
border-left-color: $popover-arrow-color;
} }
} }
@ -165,7 +153,7 @@
.popover-header { .popover-header {
padding: $popover-header-padding-y $popover-header-padding-x; padding: $popover-header-padding-y $popover-header-padding-x;
margin-bottom: 0; // Reset the default from Reboot margin-bottom: 0; // Reset the default from Reboot
font-size: $font-size-base; @include font-size($font-size-base);
color: $popover-header-color; color: $popover-header-color;
background-color: $popover-header-bg; background-color: $popover-header-bg;
border-bottom: $popover-border-width solid darken($popover-header-bg, 5%); border-bottom: $popover-border-width solid darken($popover-header-bg, 5%);

View File

@ -51,7 +51,7 @@
} }
pre, pre,
blockquote { blockquote {
border: $border-width solid $gray-500; // 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;
} }

View File

@ -1,13 +1,16 @@
@keyframes progress-bar-stripes { // Disable animation if transitions are disabled
from { background-position: $progress-height 0; } @if $enable-transitions {
to { background-position: 0 0; } @keyframes progress-bar-stripes {
from { background-position: $progress-height 0; }
to { background-position: 0 0; }
}
} }
.progress { .progress {
display: flex; display: flex;
height: $progress-height; height: $progress-height;
overflow: hidden; // force rounded corners by cropping it overflow: hidden; // force rounded corners by cropping it
font-size: $progress-font-size; @include font-size($progress-font-size);
background-color: $progress-bg; background-color: $progress-bg;
@include border-radius($progress-border-radius); @include border-radius($progress-border-radius);
@include box-shadow($progress-box-shadow); @include box-shadow($progress-box-shadow);
@ -29,6 +32,12 @@
background-size: $progress-height $progress-height; background-size: $progress-height $progress-height;
} }
.progress-bar-animated { @if $enable-transitions {
animation: progress-bar-stripes $progress-bar-animation-timing; .progress-bar-animated {
animation: progress-bar-stripes $progress-bar-animation-timing;
@media (prefers-reduced-motion: reduce) {
animation: none;
}
}
} }

View File

@ -46,7 +46,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
body { body {
margin: 0; // 1 margin: 0; // 1
font-family: $font-family-base; font-family: $font-family-base;
font-size: $font-size-base; @include font-size($font-size-base);
font-weight: $font-weight-base; font-weight: $font-weight-base;
line-height: $line-height-base; line-height: $line-height-base;
color: $body-color; color: $body-color;
@ -155,7 +155,7 @@ strong {
} }
small { small {
font-size: 80%; // Add the correct font size in all browsers @include font-size(80%); // Add the correct font size in all browsers
} }
// //
@ -166,7 +166,7 @@ small {
sub, sub,
sup { sup {
position: relative; position: relative;
font-size: 75%; @include font-size(75%);
line-height: 0; line-height: 0;
vertical-align: baseline; vertical-align: baseline;
} }
@ -220,7 +220,7 @@ code,
kbd, kbd,
samp { samp {
font-family: $font-family-monospace; font-family: $font-family-monospace;
font-size: 1em; // Correct the odd `em` font sizing in all browsers. @include font-size(1em); // Correct the odd `em` font sizing in all browsers.
} }
pre { pre {
@ -297,6 +297,7 @@ label {
// //
// Details at https://github.com/twbs/bootstrap/issues/24093 // Details at https://github.com/twbs/bootstrap/issues/24093
button { button {
// stylelint-disable-next-line property-blacklist
border-radius: 0; border-radius: 0;
} }
@ -316,7 +317,7 @@ optgroup,
textarea { textarea {
margin: 0; // Remove the margin in Firefox and Safari margin: 0; // Remove the margin in Firefox and Safari
font-family: inherit; font-family: inherit;
font-size: inherit; @include font-size(inherit);
line-height: inherit; line-height: inherit;
} }
@ -330,6 +331,14 @@ select {
text-transform: none; // Remove the inheritance of text transform in Firefox text-transform: none; // Remove the inheritance of text transform in Firefox
} }
// Remove the inheritance of word-wrap in Safari.
//
// Details at https://github.com/twbs/bootstrap/issues/24990
select {
word-wrap: normal;
}
// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` // 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
// controls in Android 4. // controls in Android 4.
// 2. Correct the inability to style clickable types in iOS and Safari. // 2. Correct the inability to style clickable types in iOS and Safari.
@ -340,6 +349,18 @@ button,
-webkit-appearance: button; // 2 -webkit-appearance: button; // 2
} }
// Opinionated: add "hand" cursor to non-disabled button elements.
@if $enable-pointer-cursor-for-buttons {
button,
[type="button"],
[type="reset"],
[type="submit"] {
&:not(:disabled) {
cursor: pointer;
}
}
}
// Remove inner border and padding from Firefox, but don't restore the outline like Normalize. // Remove inner border and padding from Firefox, but don't restore the outline like Normalize.
button::-moz-focus-inner, button::-moz-focus-inner,
[type="button"]::-moz-focus-inner, [type="button"]::-moz-focus-inner,
@ -395,7 +416,7 @@ legend {
max-width: 100%; // 1 max-width: 100%; // 1
padding: 0; padding: 0;
margin-bottom: .5rem; margin-bottom: .5rem;
font-size: 1.5rem; @include font-size(1.5rem);
line-height: inherit; line-height: inherit;
color: inherit; // 2 color: inherit; // 2
white-space: normal; // 1 white-space: normal; // 1
@ -421,7 +442,7 @@ progress {
} }
// //
// Remove the inner padding and cancel buttons in Chrome and Safari on macOS. // Remove the inner padding in Chrome and Safari on macOS.
// //
[type="search"]::-webkit-search-decoration { [type="search"]::-webkit-search-decoration {

View File

@ -13,6 +13,7 @@
vertical-align: text-bottom; vertical-align: text-bottom;
border: $spinner-border-width solid currentColor; border: $spinner-border-width solid currentColor;
border-right-color: transparent; border-right-color: transparent;
// stylelint-disable-next-line property-blacklist
border-radius: 50%; border-radius: 50%;
animation: spinner-border .75s linear infinite; animation: spinner-border .75s linear infinite;
} }
@ -42,6 +43,7 @@
height: $spinner-height; height: $spinner-height;
vertical-align: text-bottom; vertical-align: text-bottom;
background-color: currentColor; background-color: currentColor;
// stylelint-disable-next-line property-blacklist
border-radius: 50%; border-radius: 50%;
opacity: 0; opacity: 0;
animation: spinner-grow .75s linear infinite; animation: spinner-grow .75s linear infinite;

View File

@ -5,6 +5,7 @@
.table { .table {
width: 100%; width: 100%;
margin-bottom: $spacer; margin-bottom: $spacer;
color: $table-color;
background-color: $table-bg; // Reset for nesting within parents with `background-color`. background-color: $table-bg; // Reset for nesting within parents with `background-color`.
th, th,
@ -22,10 +23,6 @@
tbody + tbody { tbody + tbody {
border-top: (2 * $table-border-width) solid $table-border-color; border-top: (2 * $table-border-width) solid $table-border-color;
} }
.table {
background-color: $body-bg;
}
} }
@ -88,6 +85,7 @@
.table-hover { .table-hover {
tbody tr { tbody tr {
@include hover { @include hover {
color: $table-hover-color;
background-color: $table-hover-bg; background-color: $table-hover-bg;
} }
} }
@ -152,6 +150,7 @@
&.table-hover { &.table-hover {
tbody tr { tbody tr {
@include hover { @include hover {
color: $table-dark-hover-color;
background-color: $table-dark-hover-bg; background-color: $table-dark-hover-bg;
} }
} }
@ -175,7 +174,6 @@
width: 100%; width: 100%;
overflow-x: auto; overflow-x: auto;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057
// Prevent double border on horizontal scroll due to use of `display: block;` // Prevent double border on horizontal scroll due to use of `display: block;`
> .table-bordered { > .table-bordered {

View File

@ -1,14 +1,15 @@
.toast { .toast {
max-width: $toast-max-width; max-width: $toast-max-width;
overflow: hidden; // cheap rounded corners on nested items overflow: hidden; // cheap rounded corners on nested items
font-size: $toast-font-size; // knock it down to 14px @include font-size($toast-font-size);
color: $toast-color;
background-color: $toast-background-color; background-color: $toast-background-color;
background-clip: padding-box; background-clip: padding-box;
border: $toast-border-width solid $toast-border-color; border: $toast-border-width solid $toast-border-color;
border-radius: $toast-border-radius;
box-shadow: $toast-box-shadow; box-shadow: $toast-box-shadow;
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
opacity: 0; opacity: 0;
@include border-radius($toast-border-radius);
&:not(:last-child) { &:not(:last-child) {
margin-bottom: $toast-padding-x; margin-bottom: $toast-padding-x;

View File

@ -7,7 +7,7 @@
// Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.
// So reset our font and text properties to avoid inheriting weird values. // So reset our font and text properties to avoid inheriting weird values.
@include reset-text(); @include reset-text();
font-size: $tooltip-font-size; @include font-size($tooltip-font-size);
// Allow breaking very long words so they don't overflow the tooltip's bounds // Allow breaking very long words so they don't overflow the tooltip's bounds
word-wrap: break-word; word-wrap: break-word;
opacity: 0; opacity: 0;

View File

@ -1,5 +1,3 @@
// stylelint-disable selector-no-qualifying-type
.fade { .fade {
@include transition($transition-fade); @include transition($transition-fade);

View File

@ -13,36 +13,36 @@ h1, h2, h3, h4, h5, h6,
color: $headings-color; color: $headings-color;
} }
h1, .h1 { font-size: $h1-font-size; } h1, .h1 { @include font-size($h1-font-size); }
h2, .h2 { font-size: $h2-font-size; } h2, .h2 { @include font-size($h2-font-size); }
h3, .h3 { font-size: $h3-font-size; } h3, .h3 { @include font-size($h3-font-size); }
h4, .h4 { font-size: $h4-font-size; } h4, .h4 { @include font-size($h4-font-size); }
h5, .h5 { font-size: $h5-font-size; } h5, .h5 { @include font-size($h5-font-size); }
h6, .h6 { font-size: $h6-font-size; } h6, .h6 { @include font-size($h6-font-size); }
.lead { .lead {
font-size: $lead-font-size; @include font-size($lead-font-size);
font-weight: $lead-font-weight; font-weight: $lead-font-weight;
} }
// Type display classes // Type display classes
.display-1 { .display-1 {
font-size: $display1-size; @include font-size($display1-size);
font-weight: $display1-weight; font-weight: $display1-weight;
line-height: $display-line-height; line-height: $display-line-height;
} }
.display-2 { .display-2 {
font-size: $display2-size; @include font-size($display2-size);
font-weight: $display2-weight; font-weight: $display2-weight;
line-height: $display-line-height; line-height: $display-line-height;
} }
.display-3 { .display-3 {
font-size: $display3-size; @include font-size($display3-size);
font-weight: $display3-weight; font-weight: $display3-weight;
line-height: $display-line-height; line-height: $display-line-height;
} }
.display-4 { .display-4 {
font-size: $display4-size; @include font-size($display4-size);
font-weight: $display4-weight; font-weight: $display4-weight;
line-height: $display-line-height; line-height: $display-line-height;
} }
@ -66,7 +66,7 @@ hr {
small, small,
.small { .small {
font-size: $small-font-size; @include font-size($small-font-size);
font-weight: $font-weight-normal; font-weight: $font-weight-normal;
} }
@ -104,19 +104,19 @@ mark,
// Builds on `abbr` // Builds on `abbr`
.initialism { .initialism {
font-size: 90%; @include font-size(90%);
text-transform: uppercase; text-transform: uppercase;
} }
// Blockquotes // Blockquotes
.blockquote { .blockquote {
margin-bottom: $spacer; margin-bottom: $spacer;
font-size: $blockquote-font-size; @include font-size($blockquote-font-size);
} }
.blockquote-footer { .blockquote-footer {
display: block; display: block;
font-size: $blockquote-small-font-size; @include font-size($blockquote-small-font-size);
color: $blockquote-small-color; color: $blockquote-small-color;
&::before { &::before {

View File

@ -11,6 +11,7 @@
@import "utilities/screenreaders"; @import "utilities/screenreaders";
@import "utilities/shadows"; @import "utilities/shadows";
@import "utilities/sizing"; @import "utilities/sizing";
@import "utilities/stretched-link";
@import "utilities/spacing"; @import "utilities/spacing";
@import "utilities/text"; @import "utilities/text";
@import "utilities/visibility"; @import "utilities/visibility";

View File

@ -114,8 +114,11 @@ $enable-transitions: true !default;
$enable-prefers-reduced-motion-media-query: true !default; $enable-prefers-reduced-motion-media-query: true !default;
$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS $enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS
$enable-grid-classes: true !default; $enable-grid-classes: true !default;
$enable-pointer-cursor-for-buttons: true !default;
$enable-print-styles: true !default; $enable-print-styles: true !default;
$enable-responsive-font-sizes: false !default;
$enable-validation-icons: true !default; $enable-validation-icons: true !default;
$enable-deprecation-messages: true !default;
// Spacing // Spacing
@ -185,38 +188,28 @@ $paragraph-margin-bottom: 1rem !default;
// Define the minimum dimensions at which your layout will change, // Define the minimum dimensions at which your layout will change,
// adapting to different screen sizes, for use in media queries. // adapting to different screen sizes, for use in media queries.
$grid-breakpoints: () !default; $grid-breakpoints: (
// stylelint-disable-next-line scss/dollar-variable-default xs: 0,
$grid-breakpoints: map-merge( sm: 576px,
( md: 768px,
xs: 0, lg: 992px,
sm: 576px, xl: 1200px
md: 768px, ) !default;
lg: 992px,
xl: 1200px
),
$grid-breakpoints
);
@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); @include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
@include _assert-starts-at-zero($grid-breakpoints); @include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints");
// Grid containers // Grid containers
// //
// Define the maximum width of `.container` for different screen sizes. // Define the maximum width of `.container` for different screen sizes.
$container-max-widths: () !default; $container-max-widths: (
// stylelint-disable-next-line scss/dollar-variable-default sm: 540px,
$container-max-widths: map-merge( md: 720px,
( lg: 960px,
sm: 540px, xl: 1140px
md: 720px, ) !default;
lg: 960px,
xl: 1140px
),
$container-max-widths
);
@include _assert-ascending($container-max-widths, "$container-max-widths"); @include _assert-ascending($container-max-widths, "$container-max-widths");
@ -253,6 +246,8 @@ $component-active-color: $white !default;
$component-active-bg: theme-color("primary") !default; $component-active-bg: theme-color("primary") !default;
$caret-width: .3em !default; $caret-width: .3em !default;
$caret-vertical-align: $caret-width * .85 !default;
$caret-spacing: $caret-width * .85 !default;
$transition-base: all .2s ease-in-out !default; $transition-base: all .2s ease-in-out !default;
$transition-fade: opacity .15s linear !default; $transition-fade: opacity .15s linear !default;
@ -264,13 +259,13 @@ $embed-responsive-aspect-ratios: join(
( (
(21 9), (21 9),
(16 9), (16 9),
(3 4), (4 3),
(1 1), (1 1),
), ),
$embed-responsive-aspect-ratios $embed-responsive-aspect-ratios
); );
// Fonts // Typography
// //
// Font, line-height, and color for body text, headings, and more. // Font, line-height, and color for body text, headings, and more.
@ -281,8 +276,8 @@ $font-family-base: $font-family-sans-serif !default;
// stylelint-enable value-keyword-case // stylelint-enable value-keyword-case
$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` $font-size-base: 1rem !default; // Assumes the browser default, typically `16px`
$font-size-lg: ($font-size-base * 1.25) !default; $font-size-lg: $font-size-base * 1.25 !default;
$font-size-sm: ($font-size-base * .875) !default; $font-size-sm: $font-size-base * .875 !default;
$font-weight-lighter: lighter !default; $font-weight-lighter: lighter !default;
$font-weight-light: 300 !default; $font-weight-light: 300 !default;
@ -301,10 +296,10 @@ $h5-font-size: $font-size-base * 1.25 !default;
$h6-font-size: $font-size-base !default; $h6-font-size: $font-size-base !default;
$headings-margin-bottom: $spacer / 2 !default; $headings-margin-bottom: $spacer / 2 !default;
$headings-font-family: inherit !default; $headings-font-family: null !default;
$headings-font-weight: 500 !default; $headings-font-weight: 500 !default;
$headings-line-height: 1.2 !default; $headings-line-height: 1.2 !default;
$headings-color: inherit !default; $headings-color: null !default;
$display1-size: 6rem !default; $display1-size: 6rem !default;
$display2-size: 5.5rem !default; $display2-size: 5.5rem !default;
@ -317,7 +312,7 @@ $display3-weight: 300 !default;
$display4-weight: 300 !default; $display4-weight: 300 !default;
$display-line-height: $headings-line-height !default; $display-line-height: $headings-line-height !default;
$lead-font-size: ($font-size-base * 1.25) !default; $lead-font-size: $font-size-base * 1.25 !default;
$lead-font-weight: 300 !default; $lead-font-weight: 300 !default;
$small-font-size: 80% !default; $small-font-size: 80% !default;
@ -326,7 +321,7 @@ $text-muted: $gray-600 !default;
$blockquote-small-color: $gray-600 !default; $blockquote-small-color: $gray-600 !default;
$blockquote-small-font-size: $small-font-size !default; $blockquote-small-font-size: $small-font-size !default;
$blockquote-font-size: ($font-size-base * 1.25) !default; $blockquote-font-size: $font-size-base * 1.25 !default;
$hr-border-color: rgba($black, .1) !default; $hr-border-color: rgba($black, .1) !default;
$hr-border-width: $border-width !default; $hr-border-width: $border-width !default;
@ -352,21 +347,25 @@ $hr-margin-y: $spacer !default;
$table-cell-padding: .75rem !default; $table-cell-padding: .75rem !default;
$table-cell-padding-sm: .3rem !default; $table-cell-padding-sm: .3rem !default;
$table-bg: transparent !default; $table-color: $body-color !default;
$table-bg: null !default;
$table-accent-bg: rgba($black, .05) !default; $table-accent-bg: rgba($black, .05) !default;
$table-hover-color: $table-color !default;
$table-hover-bg: rgba($black, .075) !default; $table-hover-bg: rgba($black, .075) !default;
$table-active-bg: $table-hover-bg !default; $table-active-bg: $table-hover-bg !default;
$table-border-width: $border-width !default; $table-border-width: $border-width !default;
$table-border-color: $gray-300 !default; $table-border-color: $border-color !default;
$table-head-bg: $gray-200 !default; $table-head-bg: $gray-200 !default;
$table-head-color: $gray-700 !default; $table-head-color: $gray-700 !default;
$table-dark-bg: $gray-900 !default; $table-dark-color: $white !default;
$table-dark-bg: $gray-800 !default;
$table-dark-accent-bg: rgba($white, .05) !default; $table-dark-accent-bg: rgba($white, .05) !default;
$table-dark-hover-color: $table-dark-color !default;
$table-dark-hover-bg: rgba($white, .075) !default; $table-dark-hover-bg: rgba($white, .075) !default;
$table-dark-border-color: lighten($gray-900, 7.5%) !default; $table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;
$table-dark-color: $white !default; $table-dark-color: $white !default;
$table-striped-order: odd !default; $table-striped-order: odd !default;
@ -383,6 +382,7 @@ $table-border-level: -6 !default;
$input-btn-padding-y: .375rem !default; $input-btn-padding-y: .375rem !default;
$input-btn-padding-x: .75rem !default; $input-btn-padding-x: .75rem !default;
$input-btn-font-family: null !default;
$input-btn-font-size: $font-size-base !default; $input-btn-font-size: $font-size-base !default;
$input-btn-line-height: $line-height-base !default; $input-btn-line-height: $line-height-base !default;
@ -409,6 +409,7 @@ $input-btn-border-width: $border-width !default;
$btn-padding-y: $input-btn-padding-y !default; $btn-padding-y: $input-btn-padding-y !default;
$btn-padding-x: $input-btn-padding-x !default; $btn-padding-x: $input-btn-padding-x !default;
$btn-font-family: $input-btn-font-family !default;
$btn-font-size: $input-btn-font-size !default; $btn-font-size: $input-btn-font-size !default;
$btn-line-height: $input-btn-line-height !default; $btn-line-height: $input-btn-line-height !default;
@ -449,6 +450,7 @@ $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-font-family: $input-btn-font-family !default;
$input-font-size: $input-btn-font-size !default; $input-font-size: $input-btn-font-size !default;
$input-font-weight: $font-weight-base !default; $input-font-weight: $font-weight-base !default;
$input-line-height: $input-btn-line-height !default; $input-line-height: $input-btn-line-height !default;
@ -486,14 +488,13 @@ $input-plaintext-color: $body-color !default;
$input-height-border: $input-border-width * 2 !default; $input-height-border: $input-border-width * 2 !default;
$input-height-inner: ($input-btn-font-size * $input-btn-line-height) + ($input-btn-padding-y * 2) !default; $input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;
$input-height: calc(#{$input-height-inner} + #{$input-height-border}) !default; $input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;
$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;
$input-height-inner-sm: ($input-btn-font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default; $input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;
$input-height-sm: calc(#{$input-height-inner-sm} + #{$input-height-border}) !default; $input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;
$input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;
$input-height-inner-lg: ($input-btn-font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;
$input-height-lg: calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;
$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; $input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
@ -535,7 +536,7 @@ $custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5)
$custom-control-indicator-checked-box-shadow: none !default; $custom-control-indicator-checked-box-shadow: none !default;
$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default; $custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;
$custom-control-indicator-focus-box-shadow: $input-btn-focus-box-shadow !default; $custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;
$custom-control-indicator-focus-border-color: $input-focus-border-color !default; $custom-control-indicator-focus-border-color: $input-focus-border-color !default;
$custom-control-indicator-active-color: $component-active-color !default; $custom-control-indicator-active-color: $component-active-color !default;
@ -559,8 +560,10 @@ $custom-switch-width: $custom-control-indicator-size *
$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default; $custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;
$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default; $custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;
$custom-select-padding-y: $input-btn-padding-y !default; $custom-select-padding-y: $input-padding-y !default;
$custom-select-padding-x: $input-btn-padding-x !default; $custom-select-padding-x: $input-padding-x !default;
$custom-select-font-family: $input-font-family !default;
$custom-select-font-size: $input-font-size !default;
$custom-select-height: $input-height !default; $custom-select-height: $input-height !default;
$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator $custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator
$custom-select-font-weight: $input-font-weight !default; $custom-select-font-weight: $input-font-weight !default;
@ -574,9 +577,9 @@ $custom-select-indicator-color: $gray-800 !default;
$custom-select-indicator: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e"), "#", "%23") !default; $custom-select-indicator: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e"), "#", "%23") !default;
$custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon) $custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
$custom-select-feedback-icon-padding-right: $input-height-inner * 3 / 4 + $custom-select-padding-x + $custom-select-indicator-padding !default; $custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;
$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default; $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;
$custom-select-feedback-icon-size: ($input-height-inner / 2) ($input-height-inner / 2) !default; $custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;
$custom-select-border-width: $input-border-width !default; $custom-select-border-width: $input-border-width !default;
$custom-select-border-color: $input-border-color !default; $custom-select-border-color: $input-border-color !default;
@ -585,16 +588,16 @@ $custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;
$custom-select-focus-border-color: $input-focus-border-color !default; $custom-select-focus-border-color: $input-focus-border-color !default;
$custom-select-focus-width: $input-focus-width !default; $custom-select-focus-width: $input-focus-width !default;
$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width rgba($custom-select-focus-border-color, .5) !default; $custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;
$custom-select-padding-y-sm: $input-padding-y-sm !default; $custom-select-padding-y-sm: $input-padding-y-sm !default;
$custom-select-padding-x-sm: $input-padding-x-sm !default; $custom-select-padding-x-sm: $input-padding-x-sm !default;
$custom-select-font-size-sm: $input-btn-font-size-sm !default; $custom-select-font-size-sm: $input-font-size-sm !default;
$custom-select-height-sm: $input-height-sm !default; $custom-select-height-sm: $input-height-sm !default;
$custom-select-padding-y-lg: $input-padding-y-lg !default; $custom-select-padding-y-lg: $input-padding-y-lg !default;
$custom-select-padding-x-lg: $input-padding-x-lg !default; $custom-select-padding-x-lg: $input-padding-x-lg !default;
$custom-select-font-size-lg: $input-btn-font-size-lg !default; $custom-select-font-size-lg: $input-font-size-lg !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-width: 100% !default;
@ -624,6 +627,7 @@ $custom-file-disabled-bg: $input-disabled-bg !default;
$custom-file-padding-y: $input-padding-y !default; $custom-file-padding-y: $input-padding-y !default;
$custom-file-padding-x: $input-padding-x !default; $custom-file-padding-x: $input-padding-x !default;
$custom-file-line-height: $input-line-height !default; $custom-file-line-height: $input-line-height !default;
$custom-file-font-family: $input-font-family !default;
$custom-file-font-weight: $input-font-weight !default; $custom-file-font-weight: $input-font-weight !default;
$custom-file-color: $input-color !default; $custom-file-color: $input-color !default;
$custom-file-bg: $input-bg !default; $custom-file-bg: $input-bg !default;
@ -648,38 +652,23 @@ $form-feedback-invalid-color: theme-color("danger") !default;
$form-feedback-icon-valid-color: $form-feedback-valid-color !default; $form-feedback-icon-valid-color: $form-feedback-valid-color !default;
$form-feedback-icon-valid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"), "#", "%23") !default; $form-feedback-icon-valid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"), "#", "%23") !default;
$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default; $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
$form-feedback-icon-invalid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"), "#", "%23") !default; $form-feedback-icon-invalid: str-replace(url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E"), "#", "%23") !default;
// Dropdowns
//
// Dropdown menu container and contents.
$dropdown-min-width: 10rem !default;
$dropdown-padding-y: .5rem !default;
$dropdown-spacer: .125rem !default;
$dropdown-bg: $white !default;
$dropdown-border-color: rgba($black, .15) !default;
$dropdown-border-radius: $border-radius !default;
$dropdown-border-width: $border-width !default;
$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;
$dropdown-divider-bg: $gray-200 !default;
$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
$dropdown-link-color: $gray-900 !default;
$dropdown-link-hover-color: darken($gray-900, 5%) !default;
$dropdown-link-hover-bg: $gray-100 !default;
$dropdown-link-active-color: $component-active-color !default;
$dropdown-link-active-bg: $component-active-bg !default;
$dropdown-link-disabled-color: $gray-600 !default;
$dropdown-item-padding-y: .25rem !default;
$dropdown-item-padding-x: 1.5rem !default;
$dropdown-header-color: $gray-600 !default;
$form-validation-states: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$form-validation-states: map-merge(
(
"valid": (
"color": $form-feedback-valid-color,
"icon": $form-feedback-icon-valid
),
"invalid": (
"color": $form-feedback-invalid-color,
"icon": $form-feedback-icon-invalid
),
),
$form-validation-states
);
// Z-index master list // Z-index master list
// //
@ -755,6 +744,39 @@ $navbar-dark-brand-color: $navbar-dark-active-color !default;
$navbar-dark-brand-hover-color: $navbar-dark-active-color !default; $navbar-dark-brand-hover-color: $navbar-dark-active-color !default;
// Dropdowns
//
// Dropdown menu container and contents.
$dropdown-min-width: 10rem !default;
$dropdown-padding-y: .5rem !default;
$dropdown-spacer: .125rem !default;
$dropdown-font-size: $font-size-base !default;
$dropdown-color: $body-color !default;
$dropdown-bg: $white !default;
$dropdown-border-color: rgba($black, .15) !default;
$dropdown-border-radius: $border-radius !default;
$dropdown-border-width: $border-width !default;
$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;
$dropdown-divider-bg: $gray-200 !default;
$dropdown-divider-margin-y: $nav-divider-margin-y !default;
$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
$dropdown-link-color: $gray-900 !default;
$dropdown-link-hover-color: darken($gray-900, 5%) !default;
$dropdown-link-hover-bg: $gray-100 !default;
$dropdown-link-active-color: $component-active-color !default;
$dropdown-link-active-bg: $component-active-bg !default;
$dropdown-link-disabled-color: $gray-600 !default;
$dropdown-item-padding-y: .25rem !default;
$dropdown-item-padding-x: 1.5rem !default;
$dropdown-header-color: $gray-600 !default;
// Pagination // Pagination
$pagination-padding-y: .5rem !default; $pagination-padding-y: .5rem !default;
@ -789,6 +811,7 @@ $pagination-disabled-border-color: $gray-300 !default;
// Jumbotron // Jumbotron
$jumbotron-padding: 2rem !default; $jumbotron-padding: 2rem !default;
$jumbotron-color: null !default;
$jumbotron-bg: $gray-200 !default; $jumbotron-bg: $gray-200 !default;
@ -801,7 +824,8 @@ $card-border-radius: $border-radius !default;
$card-border-color: rgba($black, .125) !default; $card-border-color: rgba($black, .125) !default;
$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default; $card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;
$card-cap-bg: rgba($black, .03) !default; $card-cap-bg: rgba($black, .03) !default;
$card-cap-color: inherit !default; $card-cap-color: null !default;
$card-color: null !default;
$card-bg: $white !default; $card-bg: $white !default;
$card-img-overlay-padding: 1.25rem !default; $card-img-overlay-padding: 1.25rem !default;
@ -866,19 +890,21 @@ $popover-arrow-outer-color: fade-in($popover-border-color, .05) !default
// Toasts // Toasts
$toast-max-width: 350px !default;
$toast-padding-x: .75rem !default;
$toast-padding-y: .25rem !default;
$toast-font-size: .875rem !default;
$toast-background-color: rgba($white, .85) !default;
$toast-border-width: 1px !default;
$toast-border-color: rgba(0, 0, 0, .1) !default;
$toast-border-radius: .25rem !default;
$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;
$toast-header-color: $gray-600 !default; $toast-max-width: 350px !default;
$toast-header-background-color: rgba($white, .85) !default; $toast-padding-x: .75rem !default;
$toast-header-border-color: rgba(0, 0, 0, .05) !default; $toast-padding-y: .25rem !default;
$toast-font-size: .875rem !default;
$toast-color: null !default;
$toast-background-color: rgba($white, .85) !default;
$toast-border-width: 1px !default;
$toast-border-color: rgba(0, 0, 0, .1) !default;
$toast-border-radius: .25rem !default;
$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;
$toast-header-color: $gray-600 !default;
$toast-header-background-color: rgba($white, .85) !default;
$toast-header-border-color: rgba(0, 0, 0, .05) !default;
// Badges // Badges
@ -889,6 +915,9 @@ $badge-padding-y: .25em !default;
$badge-padding-x: .4em !default; $badge-padding-x: .4em !default;
$badge-border-radius: $border-radius !default; $badge-border-radius: $border-radius !default;
$badge-transition: $btn-transition !default;
$badge-focus-width: $input-btn-focus-width !default;
$badge-pill-padding-x: .6em !default; $badge-pill-padding-x: .6em !default;
// Use a higher than normal value to ensure completely rounded edges when // Use a higher than normal value to ensure completely rounded edges when
// customizing padding or font-size on labels. // customizing padding or font-size on labels.
@ -905,6 +934,7 @@ $modal-dialog-margin-y-sm-up: 1.75rem !default;
$modal-title-line-height: $line-height-base !default; $modal-title-line-height: $line-height-base !default;
$modal-content-color: null !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;
@ -914,7 +944,7 @@ $modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;
$modal-backdrop-bg: $black !default; $modal-backdrop-bg: $black !default;
$modal-backdrop-opacity: .5 !default; $modal-backdrop-opacity: .5 !default;
$modal-header-border-color: $gray-200 !default; $modal-header-border-color: $border-color !default;
$modal-footer-border-color: $modal-header-border-color !default; $modal-footer-border-color: $modal-header-border-color !default;
$modal-header-border-width: $modal-content-border-width !default; $modal-header-border-width: $modal-content-border-width !default;
$modal-footer-border-width: $modal-header-border-width !default; $modal-footer-border-width: $modal-header-border-width !default;
@ -951,7 +981,7 @@ $alert-color-level: 6 !default;
// Progress bars // Progress bars
$progress-height: 1rem !default; $progress-height: 1rem !default;
$progress-font-size: ($font-size-base * .75) !default; $progress-font-size: $font-size-base * .75 !default;
$progress-bg: $gray-200 !default; $progress-bg: $gray-200 !default;
$progress-border-radius: $border-radius !default; $progress-border-radius: $border-radius !default;
$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default; $progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;
@ -963,6 +993,7 @@ $progress-bar-transition: width .6s ease !default;
// List group // List group
$list-group-color: null !default;
$list-group-bg: $white !default; $list-group-bg: $white !default;
$list-group-border-color: rgba($black, .125) !default; $list-group-border-color: rgba($black, .125) !default;
$list-group-border-width: $border-width !default; $list-group-border-width: $border-width !default;
@ -1081,6 +1112,7 @@ $pre-scrollable-max-height: 340px !default;
// Utilities // Utilities
$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;
$overflows: auto, hidden !default; $overflows: auto, hidden !default;
$positions: static, relative, absolute, fixed, sticky !default; $positions: static, relative, absolute, fixed, sticky !default;

View File

@ -1,7 +1,7 @@
/*! /*!
* Bootstrap Grid v4.2.1 (https://getbootstrap.com/) * Bootstrap Grid v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2019 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,7 +1,7 @@
/*! /*!
* Bootstrap Reboot v4.2.1 (https://getbootstrap.com/) * Bootstrap Reboot v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2019 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/ */

View File

@ -1,7 +1,7 @@
/*! /*!
* Bootstrap v4.2.1 (https://getbootstrap.com/) * Bootstrap v4.3.1 (https://getbootstrap.com/)
* Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2019 The Bootstrap Authors
* Copyright 2011-2018 Twitter, Inc. * Copyright 2011-2019 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

@ -7,5 +7,11 @@
color: color-yiq($bg); color: color-yiq($bg);
background-color: darken($bg, 10%); background-color: darken($bg, 10%);
} }
&:focus,
&.focus {
outline: 0;
box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5);
}
} }
} }

View File

@ -1,9 +1,13 @@
// stylelint-disable property-blacklist
// Single side border-radius // Single side border-radius
@mixin border-radius($radius: $border-radius) { @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {
@if $enable-rounded { @if $enable-rounded {
border-radius: $radius; border-radius: $radius;
} }
@else if $fallback-border-radius != false {
border-radius: $fallback-border-radius;
}
} }
@mixin border-top-radius($radius) { @mixin border-top-radius($radius) {
@ -33,3 +37,27 @@
border-bottom-left-radius: $radius; border-bottom-left-radius: $radius;
} }
} }
@mixin border-top-left-radius($radius) {
@if $enable-rounded {
border-top-left-radius: $radius;
}
}
@mixin border-top-right-radius($radius) {
@if $enable-rounded {
border-top-right-radius: $radius;
}
}
@mixin border-bottom-right-radius($radius) {
@if $enable-rounded {
border-bottom-right-radius: $radius;
}
}
@mixin border-bottom-left-radius($radius) {
@if $enable-rounded {
border-bottom-left-radius: $radius;
}
}

View File

@ -1,5 +1,20 @@
@mixin box-shadow($shadow...) { @mixin box-shadow($shadow...) {
@if $enable-shadows { @if $enable-shadows {
box-shadow: $shadow; $result: ();
@if (length($shadow) == 1) {
// We can pass `@include box-shadow(none);`
$result: $shadow;
} @else {
// Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;`
@for $i from 1 through length($shadow) {
@if nth($shadow, $i) != "none" {
$result: append($result, nth($shadow, $i), "comma");
}
}
}
@if (length($result) > 0) {
box-shadow: $result;
}
} }
} }

View File

@ -49,7 +49,7 @@
&:focus { &:focus {
// Avoid using mixin so we can pass custom focus shadow properly // Avoid using mixin so we can pass custom focus shadow properly
@if $enable-shadows { @if $enable-shadows and $btn-active-box-shadow != none {
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
} @else { } @else {
box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5);
@ -100,12 +100,8 @@
// Button sizes // Button sizes
@mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { @mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
padding: $padding-y $padding-x; padding: $padding-y $padding-x;
font-size: $font-size; @include font-size($font-size);
line-height: $line-height; line-height: $line-height;
// Manually declare to provide an override to the browser default // Manually declare to provide an override to the browser default
@if $enable-rounded { @include border-radius($border-radius, 0);
border-radius: $border-radius;
} @else {
border-radius: 0;
}
} }

View File

@ -29,8 +29,8 @@
@if $enable-caret { @if $enable-caret {
&::after { &::after {
display: inline-block; display: inline-block;
margin-left: $caret-width * .85; margin-left: $caret-spacing;
vertical-align: $caret-width * .85; vertical-align: $caret-vertical-align;
content: ""; content: "";
@if $direction == down { @if $direction == down {
@include caret-down; @include caret-down;
@ -48,8 +48,8 @@
&::before { &::before {
display: inline-block; display: inline-block;
margin-right: $caret-width * .85; margin-right: $caret-spacing;
vertical-align: $caret-width * .85; vertical-align: $caret-vertical-align;
content: ""; content: "";
@include caret-left; @include caret-left;
} }

View File

@ -2,10 +2,13 @@
@mixin float-left { @mixin float-left {
float: left !important; float: left !important;
@include deprecate("The `float-left` mixin", "v4.3.0", "v5");
} }
@mixin float-right { @mixin float-right {
float: right !important; float: right !important;
@include deprecate("The `float-right` mixin", "v4.3.0", "v5");
} }
@mixin float-none { @mixin float-none {
float: none !important; float: none !important;
@include deprecate("The `float-none` mixin", "v4.3.0", "v5");
} }

View File

@ -26,12 +26,12 @@
} }
@mixin form-validation-state($state, $color) { @mixin form-validation-state($state, $color, $icon) {
.#{$state}-feedback { .#{$state}-feedback {
display: none; display: none;
width: 100%; width: 100%;
margin-top: $form-feedback-margin-top; margin-top: $form-feedback-margin-top;
font-size: $form-feedback-font-size; @include font-size($form-feedback-font-size);
color: $color; color: $color;
} }
@ -43,7 +43,7 @@
max-width: 100%; // Contain to parent when possible max-width: 100%; // Contain to parent when possible
padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x; padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;
margin-top: .1rem; margin-top: .1rem;
font-size: $form-feedback-tooltip-font-size; @include font-size($form-feedback-tooltip-font-size);
line-height: $form-feedback-tooltip-line-height; line-height: $form-feedback-tooltip-line-height;
color: color-yiq($color); color: color-yiq($color);
background-color: rgba($color, $form-feedback-tooltip-opacity); background-color: rgba($color, $form-feedback-tooltip-opacity);
@ -57,15 +57,10 @@
@if $enable-validation-icons { @if $enable-validation-icons {
padding-right: $input-height-inner; padding-right: $input-height-inner;
background-image: $icon;
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center right calc(#{$input-height-inner} / 4); background-position: center right $input-height-inner-quarter;
background-size: calc(#{$input-height-inner} / 2) calc(#{$input-height-inner} / 2); background-size: $input-height-inner-half $input-height-inner-half;
@if $state == "valid" {
background-image: $form-feedback-icon-valid;
} @else {
background-image: $form-feedback-icon-invalid;
}
} }
&:focus { &:focus {
@ -86,7 +81,7 @@
&.is-#{$state} { &.is-#{$state} {
@if $enable-validation-icons { @if $enable-validation-icons {
padding-right: $input-height-inner; padding-right: $input-height-inner;
background-position: top calc(#{$input-height-inner} / 4) right calc(#{$input-height-inner} / 4); background-position: top $input-height-inner-quarter right $input-height-inner-quarter;
} }
} }
} }
@ -97,9 +92,8 @@
border-color: $color; border-color: $color;
@if $enable-validation-icons { @if $enable-validation-icons {
$form-feedback-icon: if($state == "valid", $form-feedback-icon-valid, $form-feedback-icon-invalid);
padding-right: $custom-select-feedback-icon-padding-right; padding-right: $custom-select-feedback-icon-padding-right;
background: $custom-select-background, $form-feedback-icon no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size; background: $custom-select-background, $icon $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size;
} }
&:focus { &:focus {

View File

@ -20,7 +20,6 @@
// //
// Short retina mixin for setting background-image and -size. // Short retina mixin for setting background-image and -size.
// stylelint-disable indentation, media-query-list-comma-newline-after
@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {
background-image: url($file-1x); background-image: url($file-1x);
@ -29,8 +28,9 @@
// There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.
// Compatibility info: https://caniuse.com/#feat=css-media-resolution // Compatibility info: https://caniuse.com/#feat=css-media-resolution
@media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx
only screen and (min-resolution: 2dppx) { // Standardized only screen and (min-resolution: 2dppx) { // Standardized
background-image: url($file-2x); background-image: url($file-2x);
background-size: $width-1x $height-1x; background-size: $width-1x $height-1x;
} }
@include deprecate("`img-retina()`", "v4.3.0", "v5");
} }

View File

@ -3,7 +3,7 @@
@mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) {
.page-link { .page-link {
padding: $padding-y $padding-x; padding: $padding-y $padding-x;
font-size: $font-size; @include font-size($font-size);
line-height: $line-height; line-height: $line-height;
} }

View File

@ -5,7 +5,7 @@
font-weight: $font-weight-normal; font-weight: $font-weight-normal;
line-height: $line-height-base; line-height: $line-height-base;
text-align: left; // Fallback for where `start` is not supported text-align: left; // Fallback for where `start` is not supported
text-align: start; // stylelint-disable-line declaration-block-no-duplicate-properties text-align: start;
text-decoration: none; text-decoration: none;
text-shadow: none; text-shadow: none;
text-transform: none; text-transform: none;

View File

@ -3,4 +3,5 @@
@mixin size($width, $height: $width) { @mixin size($width, $height: $width) {
width: $width; width: $width;
height: $height; height: $height;
@include deprecate("`size()`", "v4.3.0", "v5");
} }

View File

@ -6,9 +6,11 @@
#{$parent} { #{$parent} {
color: $color !important; color: $color !important;
} }
a#{$parent} { @if $emphasized-link-hover-darken-percentage != 0 {
@include hover-focus { a#{$parent} {
color: darken($color, $emphasized-link-hover-darken-percentage) !important; @include hover-focus {
color: darken($color, $emphasized-link-hover-darken-percentage) !important;
}
} }
} }
} }

View File

@ -7,7 +7,5 @@
background-color: transparent; background-color: transparent;
border: 0; border: 0;
@if ($ignore-warning != true) { @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning);
@warn "The `text-hide()` mixin has been deprecated as of v4.1.0. It will be removed entirely in v5.";
}
} }

View File

@ -9,7 +9,7 @@
} }
@if $enable-prefers-reduced-motion-media-query { @if $enable-prefers-reduced-motion-media-query {
@media screen and (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
transition: none; transition: none;
} }
} }

View File

@ -4,4 +4,5 @@
@mixin invisible($visibility) { @mixin invisible($visibility) {
visibility: $visibility !important; visibility: $visibility !important;
@include deprecate("`invisible()`", "v4.3.0", "v5");
} }

View File

@ -1,4 +1,4 @@
// stylelint-disable declaration-no-important // stylelint-disable property-blacklist, declaration-no-important
// //
// Border // Border
@ -30,26 +30,38 @@
// Border-radius // Border-radius
// //
.rounded-sm {
border-radius: $border-radius-sm !important;
}
.rounded { .rounded {
border-radius: $border-radius !important; border-radius: $border-radius !important;
} }
.rounded-top { .rounded-top {
border-top-left-radius: $border-radius !important; border-top-left-radius: $border-radius !important;
border-top-right-radius: $border-radius !important; border-top-right-radius: $border-radius !important;
} }
.rounded-right { .rounded-right {
border-top-right-radius: $border-radius !important; border-top-right-radius: $border-radius !important;
border-bottom-right-radius: $border-radius !important; border-bottom-right-radius: $border-radius !important;
} }
.rounded-bottom { .rounded-bottom {
border-bottom-right-radius: $border-radius !important; border-bottom-right-radius: $border-radius !important;
border-bottom-left-radius: $border-radius !important; border-bottom-left-radius: $border-radius !important;
} }
.rounded-left { .rounded-left {
border-top-left-radius: $border-radius !important; border-top-left-radius: $border-radius !important;
border-bottom-left-radius: $border-radius !important; border-bottom-left-radius: $border-radius !important;
} }
.rounded-lg {
border-radius: $border-radius-lg !important;
}
.rounded-circle { .rounded-circle {
border-radius: 50% !important; border-radius: 50% !important;
} }

View File

@ -8,15 +8,9 @@
@include media-breakpoint-up($breakpoint) { @include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints); $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.d#{$infix}-none { display: none !important; } @each $value in $displays {
.d#{$infix}-inline { display: inline !important; } .d#{$infix}-#{$value} { display: $value !important; }
.d#{$infix}-inline-block { display: inline-block !important; } }
.d#{$infix}-block { display: block !important; }
.d#{$infix}-table { display: table !important; }
.d#{$infix}-table-row { display: table-row !important; }
.d#{$infix}-table-cell { display: table-cell !important; }
.d#{$infix}-flex { display: flex !important; }
.d#{$infix}-inline-flex { display: inline-flex !important; }
} }
} }
@ -26,13 +20,7 @@
// //
@media print { @media print {
.d-print-none { display: none !important; } @each $value in $displays {
.d-print-inline { display: inline !important; } .d-print-#{$value} { display: $value !important; }
.d-print-inline-block { display: inline-block !important; } }
.d-print-block { display: block !important; }
.d-print-table { display: table !important; }
.d-print-table-row { display: table-row !important; }
.d-print-table-cell { display: table-cell !important; }
.d-print-flex { display: flex !important; }
.d-print-inline-flex { display: inline-flex !important; }
} }

View File

@ -1,9 +1,11 @@
// stylelint-disable declaration-no-important
@each $breakpoint in map-keys($grid-breakpoints) { @each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) { @include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints); $infix: breakpoint-infix($breakpoint, $grid-breakpoints);
.float#{$infix}-left { @include float-left; } .float#{$infix}-left { float: left !important; }
.float#{$infix}-right { @include float-right; } .float#{$infix}-right { float: right !important; }
.float#{$infix}-none { @include float-none; } .float#{$infix}-none { float: none !important; }
} }
} }

View File

@ -4,7 +4,7 @@
// Text // Text
// //
.text-monospace { font-family: $font-family-monospace; } .text-monospace { font-family: $font-family-monospace !important; }
// Alignment // Alignment
@ -62,6 +62,11 @@
.text-decoration-none { text-decoration: none !important; } .text-decoration-none { text-decoration: none !important; }
.text-break {
word-break: break-word !important; // IE & < Edge 18
overflow-wrap: break-word !important;
}
// Reset // Reset
.text-reset { color: inherit !important; } .text-reset { color: inherit !important; }

View File

@ -1,11 +1,13 @@
// stylelint-disable declaration-no-important
// //
// Visibility utilities // Visibility utilities
// //
.visible { .visible {
@include invisible(visible); visibility: visible !important;
} }
.invisible { .invisible {
@include invisible(hidden); visibility: hidden !important;
} }

View File

@ -202,11 +202,3 @@ $rfs-breakpoint-unit-cache: unit($rfs-breakpoint);
@mixin responsive-font-size($fs, $important: false) { @mixin responsive-font-size($fs, $important: false) {
@include rfs($fs, $important); @include rfs($fs, $important);
} }
$rfs-is-included: false !default;
@if $rfs-is-included {
@warn "Watch out, RFS is included more than once!";
}
$rfs-is-included: true;