update to BS4B3 part 2

This commit is contained in:
Holger Könemann 2017-12-29 10:30:14 +01:00
parent fc90da19cc
commit 09319ba378
94 changed files with 7883 additions and 1603 deletions

File diff suppressed because it is too large Load Diff

4
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,10 +1,13 @@
/*! /*!
* Bootstrap v4.0.0-beta.2 (https://getbootstrap.com) * Bootstrap v4.0.0-beta.3 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2017 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)
*/ */
var bootstrap = (function (exports,$,Popper) { (function (global, factory) {
'use strict'; typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
(factory((global.bootstrap = {}),global.jQuery,global.Popper));
}(this, (function (exports,$,Popper) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $; $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
@ -25,6 +28,24 @@ function _createClass(Constructor, protoProps, staticProps) {
return Constructor; return Constructor;
} }
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) { function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype); subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass; subClass.prototype.constructor = subClass;
@ -33,7 +54,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): util.js * Bootstrap (v4.0.0-beta.3): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -45,12 +66,7 @@ var Util = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var transition = false;
var MAX_UID = 1000000; var MAX_UID = 1000000; // shoutout AngusCroll (https://goo.gl/pxwQGp)
var TransitionEndEvent = {
WebkitTransition: 'webkitTransitionEnd',
transition: 'transitionend' // shoutout AngusCroll (https://goo.gl/pxwQGp)
};
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
@ -75,18 +91,10 @@ var Util = function ($$$1) {
return false; return false;
} }
var el = document.createElement('bootstrap');
for (var name in TransitionEndEvent) {
if (typeof el.style[name] !== 'undefined') {
return { return {
end: TransitionEndEvent[name] end: 'transitionend'
}; };
} }
}
return false;
}
function transitionEndEmulator(duration) { function transitionEndEmulator(duration) {
var _this = this; var _this = this;
@ -186,7 +194,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): alert.js * Bootstrap (v4.0.0-beta.3): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -198,7 +206,7 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
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';
@ -358,7 +366,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): button.js * Bootstrap (v4.0.0-beta.3): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -370,7 +378,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -521,7 +529,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): carousel.js * Bootstrap (v4.0.0-beta.3): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -533,7 +541,7 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -715,7 +723,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -917,10 +925,10 @@ var Carousel = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = $$$1.extend({}, Default, $$$1(this).data()); var _config = _extends({}, Default, $$$1(this).data());
if (typeof config === 'object') { if (typeof config === 'object') {
$$$1.extend(_config, config); _config = _extends({}, _config, config);
} }
var action = typeof config === 'string' ? config : _config.slide; var action = typeof config === 'string' ? config : _config.slide;
@ -958,7 +966,7 @@ var Carousel = function ($$$1) {
return; return;
} }
var config = $$$1.extend({}, $$$1(target).data(), $$$1(this).data()); var config = _extends({}, $$$1(target).data(), $$$1(this).data());
var slideIndex = this.getAttribute('data-slide-to'); var slideIndex = this.getAttribute('data-slide-to');
if (slideIndex) { if (slideIndex) {
@ -1021,7 +1029,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): collapse.js * Bootstrap (v4.0.0-beta.3): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1033,7 +1041,7 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1257,7 +1265,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // coerce string values config.toggle = Boolean(config.toggle); // coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
@ -1312,7 +1320,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this); var $this = $$$1(this);
var data = $this.data(DATA_KEY); var data = $this.data(DATA_KEY);
var _config = $$$1.extend({}, Default, $this.data(), typeof config === 'object' && config); var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config);
if (!data && _config.toggle && /show|hide/.test(config)) { if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@ -1388,7 +1396,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): dropdown.js * Bootstrap (v4.0.0-beta.3): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1400,7 +1408,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1435,7 +1443,8 @@ var Dropdown = function ($$$1) {
DROPRIGHT: 'dropright', DROPRIGHT: 'dropright',
DROPLEFT: 'dropleft', DROPLEFT: 'dropleft',
MENURIGHT: 'dropdown-menu-right', MENURIGHT: 'dropdown-menu-right',
MENULEFT: 'dropdown-menu-left' MENULEFT: 'dropdown-menu-left',
POSITION_STATIC: 'position-static'
}; };
var Selector = { var Selector = {
DATA_TOGGLE: '[data-toggle="dropdown"]', DATA_TOGGLE: '[data-toggle="dropdown"]',
@ -1456,11 +1465,13 @@ var Dropdown = function ($$$1) {
}; };
var Default = { var Default = {
offset: 0, offset: 0,
flip: true flip: true,
boundary: 'scrollParent'
}; };
var DefaultType = { var DefaultType = {
offset: '(number|string|function)', offset: '(number|string|function)',
flip: 'boolean' flip: 'boolean',
boundary: '(string|element)'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
@ -1527,6 +1538,13 @@ var Dropdown = function ($$$1) {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
element = parent; element = parent;
} }
} // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries
// https://github.com/twbs/bootstrap/issues/24251
if (this._config.boundary !== 'scrollParent') {
$$$1(parent).addClass(ClassName.POSITION_STATIC);
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(element, this._menu, this._getPopperConfig());
@ -1582,7 +1600,7 @@ var Dropdown = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, this.constructor.Default, $$$1(this._element).data(), config); config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config);
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config; return config;
}; };
@ -1629,7 +1647,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offsetConf.fn = function (data) {
data.offsets = $$$1.extend({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {});
return data; return data;
}; };
} else { } else {
@ -1642,6 +1660,9 @@ var Dropdown = function ($$$1) {
offset: offsetConf, offset: offsetConf,
flip: { flip: {
enabled: this._config.flip enabled: this._config.flip
},
preventOverflow: {
boundariesElement: this._config.boundary
} }
} }
}; };
@ -1839,7 +1860,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): modal.js * Bootstrap (v4.0.0-beta.3): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1851,7 +1872,7 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -2042,7 +2063,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -2326,7 +2347,7 @@ var Modal = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = $$$1.extend({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
if (!data) { if (!data) {
data = new Modal(this, _config); data = new Modal(this, _config);
@ -2375,7 +2396,7 @@ var Modal = function ($$$1) {
target = $$$1(selector)[0]; target = $$$1(selector)[0];
} }
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : $$$1.extend({}, $$$1(target).data(), $$$1(this).data()); var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') { if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault(); event.preventDefault();
@ -2415,7 +2436,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): tooltip.js * Bootstrap (v4.0.0-beta.3): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2427,7 +2448,7 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -2445,7 +2466,8 @@ var Tooltip = function ($$$1) {
placement: '(string|function)', placement: '(string|function)',
offset: '(number|string)', offset: '(number|string)',
container: '(string|element|boolean)', container: '(string|element|boolean)',
fallbackPlacement: '(string|array)' fallbackPlacement: '(string|array)',
boundary: '(string|element)'
}; };
var AttachmentMap = { var AttachmentMap = {
AUTO: 'auto', AUTO: 'auto',
@ -2465,7 +2487,8 @@ var Tooltip = function ($$$1) {
placement: 'top', placement: 'top',
offset: 0, offset: 0,
container: false, container: false,
fallbackPlacement: 'flip' fallbackPlacement: 'flip',
boundary: 'scrollParent'
}; };
var HoverState = { var HoverState = {
SHOW: 'show', SHOW: 'show',
@ -2655,6 +2678,9 @@ var Tooltip = function ($$$1) {
}, },
arrow: { arrow: {
element: Selector.ARROW element: Selector.ARROW
},
preventOverflow: {
boundariesElement: this.config.boundary
} }
}, },
onCreate: function onCreate(data) { onCreate: function onCreate(data) {
@ -2832,7 +2858,7 @@ var Tooltip = function ($$$1) {
}); });
if (this.config.selector) { if (this.config.selector) {
this.config = $$$1.extend({}, this.config, { this.config = _extends({}, this.config, {
trigger: 'manual', trigger: 'manual',
selector: '' selector: ''
}); });
@ -2926,7 +2952,7 @@ var Tooltip = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, this.constructor.Default, $$$1(this.element).data(), config); config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3075,7 +3101,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): popover.js * Bootstrap (v4.0.0-beta.3): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3087,19 +3113,19 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover'; var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = $$$1.extend({}, Tooltip.Default, { var Default = _extends({}, Tooltip.Default, {
placement: 'right', placement: 'right',
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
}); });
var DefaultType = $$$1.extend({}, Tooltip.DefaultType, { var DefaultType = _extends({}, Tooltip.DefaultType, {
content: '(string|element|function)' content: '(string|element|function)'
}); });
var ClassName = { var ClassName = {
@ -3268,7 +3294,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): scrollspy.js * Bootstrap (v4.0.0-beta.3): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3280,7 +3306,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3407,7 +3433,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
if (typeof config.target !== 'string') { if (typeof config.target !== 'string') {
var id = $$$1(config.target).attr('id'); var id = $$$1(config.target).attr('id');
@ -3579,7 +3605,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): tab.js * Bootstrap (v4.0.0-beta.3): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3591,7 +3617,7 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3718,7 +3744,7 @@ var Tab = function ($$$1) {
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE);
var complete = function complete() { var complete = function complete() {
return _this2._transitionComplete(element, active, isTransitioning, callback); return _this2._transitionComplete(element, active, callback);
}; };
if (active && isTransitioning) { if (active && isTransitioning) {
@ -3726,15 +3752,11 @@ var Tab = function ($$$1) {
} else { } else {
complete(); complete();
} }
if (active) {
$$$1(active).removeClass(ClassName.SHOW);
}
}; };
_proto._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) { _proto._transitionComplete = function _transitionComplete(element, active, callback) {
if (active) { if (active) {
$$$1(active).removeClass(ClassName.ACTIVE); $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
if (dropdownChild) { if (dropdownChild) {
@ -3752,12 +3774,8 @@ var Tab = function ($$$1) {
element.setAttribute('aria-selected', true); element.setAttribute('aria-selected', true);
} }
if (isTransitioning) {
Util.reflow(element); Util.reflow(element);
$$$1(element).addClass(ClassName.SHOW); $$$1(element).addClass(ClassName.SHOW);
} else {
$$$1(element).removeClass(ClassName.FADE);
}
if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0]; var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
@ -3868,9 +3886,9 @@ exports.Scrollspy = ScrollSpy;
exports.Tab = Tab; exports.Tab = Tab;
exports.Tooltip = Tooltip; exports.Tooltip = Tooltip;
return exports; Object.defineProperty(exports, '__esModule', { value: true });
}({},jQuery,Popper)); })));
//# sourceMappingURL=bootstrap.js.map //# sourceMappingURL=bootstrap.js.map
/** /**

2
js/theme.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0-beta (https://getbootstrap.com) * Bootstrap v4.0.0-beta.3 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors * Copyright 2011-2017 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc. * Copyright 2011-2017 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@ -8,7 +8,7 @@
@import "../../src/sass/bootstrap4/functions"; @import "../../src/sass/bootstrap4/functions";
@import "../../src/sass/bootstrap4/variables"; @import "../../src/sass/bootstrap4/variables";
@import "../../src/sass/bootstrap4/mixins"; @import "../../src/sass/bootstrap4/mixins";
@import "../../src/sass/bootstrap4/print"; @import "../../src/sass/bootstrap4/root";
@import "../../src/sass/bootstrap4/reboot"; @import "../../src/sass/bootstrap4/reboot";
@import "../../src/sass/bootstrap4/type"; @import "../../src/sass/bootstrap4/type";
@import "../../src/sass/bootstrap4/images"; @import "../../src/sass/bootstrap4/images";
@ -39,3 +39,4 @@
@import "../../src/sass/bootstrap4/popover"; @import "../../src/sass/bootstrap4/popover";
@import "../../src/sass/bootstrap4/carousel"; @import "../../src/sass/bootstrap4/carousel";
@import "../../src/sass/bootstrap4/utilities"; @import "../../src/sass/bootstrap4/utilities";
@import "../../src/sass/bootstrap4/print";

View File

@ -3,4 +3,4 @@
// Just copy a variable from src/sass/bootstrap4/_variables.scss, paste it here and edit the value. // Just copy a variable from src/sass/bootstrap4/_variables.scss, paste it here and edit the value.
$primary: #563d7c; // Thats a sample how you could change a BootStrap variable. $primary: #0052CC; // Thats a sample how you could change a BootStrap variable.

6326
src/js/bootstrap4/bootstrap.bundle.js vendored Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

164
src/js/bootstrap4/bootstrap.js vendored Executable file → Normal file
View File

@ -1,10 +1,13 @@
/*! /*!
* Bootstrap v4.0.0-beta.2 (https://getbootstrap.com) * Bootstrap v4.0.0-beta.3 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2017 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)
*/ */
var bootstrap = (function (exports,$,Popper) { (function (global, factory) {
'use strict'; typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) :
typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) :
(factory((global.bootstrap = {}),global.jQuery,global.Popper));
}(this, (function (exports,$,Popper) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $; $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper; Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
@ -25,6 +28,24 @@ function _createClass(Constructor, protoProps, staticProps) {
return Constructor; return Constructor;
} }
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) { function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype); subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass; subClass.prototype.constructor = subClass;
@ -33,7 +54,7 @@ function _inheritsLoose(subClass, superClass) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): util.js * Bootstrap (v4.0.0-beta.3): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -45,12 +66,7 @@ var Util = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var transition = false; var transition = false;
var MAX_UID = 1000000; var MAX_UID = 1000000; // shoutout AngusCroll (https://goo.gl/pxwQGp)
var TransitionEndEvent = {
WebkitTransition: 'webkitTransitionEnd',
transition: 'transitionend' // shoutout AngusCroll (https://goo.gl/pxwQGp)
};
function toType(obj) { function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
@ -75,18 +91,10 @@ var Util = function ($$$1) {
return false; return false;
} }
var el = document.createElement('bootstrap');
for (var name in TransitionEndEvent) {
if (typeof el.style[name] !== 'undefined') {
return { return {
end: TransitionEndEvent[name] end: 'transitionend'
}; };
} }
}
return false;
}
function transitionEndEmulator(duration) { function transitionEndEmulator(duration) {
var _this = this; var _this = this;
@ -186,7 +194,7 @@ var Util = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): alert.js * Bootstrap (v4.0.0-beta.3): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -198,7 +206,7 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'alert'; var NAME = 'alert';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
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';
@ -358,7 +366,7 @@ var Alert = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): button.js * Bootstrap (v4.0.0-beta.3): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -370,7 +378,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'button'; var NAME = 'button';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.button'; var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -521,7 +529,7 @@ var Button = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): carousel.js * Bootstrap (v4.0.0-beta.3): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -533,7 +541,7 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'carousel'; var NAME = 'carousel';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.carousel'; var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -715,7 +723,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -917,10 +925,10 @@ var Carousel = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = $$$1.extend({}, Default, $$$1(this).data()); var _config = _extends({}, Default, $$$1(this).data());
if (typeof config === 'object') { if (typeof config === 'object') {
$$$1.extend(_config, config); _config = _extends({}, _config, config);
} }
var action = typeof config === 'string' ? config : _config.slide; var action = typeof config === 'string' ? config : _config.slide;
@ -958,7 +966,7 @@ var Carousel = function ($$$1) {
return; return;
} }
var config = $$$1.extend({}, $$$1(target).data(), $$$1(this).data()); var config = _extends({}, $$$1(target).data(), $$$1(this).data());
var slideIndex = this.getAttribute('data-slide-to'); var slideIndex = this.getAttribute('data-slide-to');
if (slideIndex) { if (slideIndex) {
@ -1021,7 +1029,7 @@ var Carousel = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): collapse.js * Bootstrap (v4.0.0-beta.3): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1033,7 +1041,7 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'collapse'; var NAME = 'collapse';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.collapse'; var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1257,7 +1265,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // coerce string values config.toggle = Boolean(config.toggle); // coerce string values
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
@ -1312,7 +1320,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this); var $this = $$$1(this);
var data = $this.data(DATA_KEY); var data = $this.data(DATA_KEY);
var _config = $$$1.extend({}, Default, $this.data(), typeof config === 'object' && config); var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config);
if (!data && _config.toggle && /show|hide/.test(config)) { if (!data && _config.toggle && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
@ -1388,7 +1396,7 @@ var Collapse = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): dropdown.js * Bootstrap (v4.0.0-beta.3): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1400,7 +1408,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'dropdown'; var NAME = 'dropdown';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.dropdown'; var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -1435,7 +1443,8 @@ var Dropdown = function ($$$1) {
DROPRIGHT: 'dropright', DROPRIGHT: 'dropright',
DROPLEFT: 'dropleft', DROPLEFT: 'dropleft',
MENURIGHT: 'dropdown-menu-right', MENURIGHT: 'dropdown-menu-right',
MENULEFT: 'dropdown-menu-left' MENULEFT: 'dropdown-menu-left',
POSITION_STATIC: 'position-static'
}; };
var Selector = { var Selector = {
DATA_TOGGLE: '[data-toggle="dropdown"]', DATA_TOGGLE: '[data-toggle="dropdown"]',
@ -1456,11 +1465,13 @@ var Dropdown = function ($$$1) {
}; };
var Default = { var Default = {
offset: 0, offset: 0,
flip: true flip: true,
boundary: 'scrollParent'
}; };
var DefaultType = { var DefaultType = {
offset: '(number|string|function)', offset: '(number|string|function)',
flip: 'boolean' flip: 'boolean',
boundary: '(string|element)'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
* Class Definition * Class Definition
@ -1527,6 +1538,13 @@ var Dropdown = function ($$$1) {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) { if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
element = parent; element = parent;
} }
} // If boundary is not `scrollParent`, then set position to `static`
// to allow the menu to "escape" the scroll parent's boundaries
// https://github.com/twbs/bootstrap/issues/24251
if (this._config.boundary !== 'scrollParent') {
$$$1(parent).addClass(ClassName.POSITION_STATIC);
} }
this._popper = new Popper(element, this._menu, this._getPopperConfig()); this._popper = new Popper(element, this._menu, this._getPopperConfig());
@ -1582,7 +1600,7 @@ var Dropdown = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, this.constructor.Default, $$$1(this._element).data(), config); config = _extends({}, this.constructor.Default, $$$1(this._element).data(), config);
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
return config; return config;
}; };
@ -1629,7 +1647,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offsetConf.fn = function (data) { offsetConf.fn = function (data) {
data.offsets = $$$1.extend({}, data.offsets, _this2._config.offset(data.offsets) || {}); data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets) || {});
return data; return data;
}; };
} else { } else {
@ -1642,6 +1660,9 @@ var Dropdown = function ($$$1) {
offset: offsetConf, offset: offsetConf,
flip: { flip: {
enabled: this._config.flip enabled: this._config.flip
},
preventOverflow: {
boundariesElement: this._config.boundary
} }
} }
}; };
@ -1839,7 +1860,7 @@ var Dropdown = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): modal.js * Bootstrap (v4.0.0-beta.3): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -1851,7 +1872,7 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'modal'; var NAME = 'modal';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.modal'; var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -2042,7 +2063,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType); Util.typeCheckConfig(NAME, config, DefaultType);
return config; return config;
}; };
@ -2326,7 +2347,7 @@ var Modal = function ($$$1) {
return this.each(function () { return this.each(function () {
var data = $$$1(this).data(DATA_KEY); var data = $$$1(this).data(DATA_KEY);
var _config = $$$1.extend({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config); var _config = _extends({}, Modal.Default, $$$1(this).data(), typeof config === 'object' && config);
if (!data) { if (!data) {
data = new Modal(this, _config); data = new Modal(this, _config);
@ -2375,7 +2396,7 @@ var Modal = function ($$$1) {
target = $$$1(selector)[0]; target = $$$1(selector)[0];
} }
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : $$$1.extend({}, $$$1(target).data(), $$$1(this).data()); var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _extends({}, $$$1(target).data(), $$$1(this).data());
if (this.tagName === 'A' || this.tagName === 'AREA') { if (this.tagName === 'A' || this.tagName === 'AREA') {
event.preventDefault(); event.preventDefault();
@ -2415,7 +2436,7 @@ var Modal = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): tooltip.js * Bootstrap (v4.0.0-beta.3): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -2427,7 +2448,7 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tooltip'; var NAME = 'tooltip';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tooltip'; var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -2445,7 +2466,8 @@ var Tooltip = function ($$$1) {
placement: '(string|function)', placement: '(string|function)',
offset: '(number|string)', offset: '(number|string)',
container: '(string|element|boolean)', container: '(string|element|boolean)',
fallbackPlacement: '(string|array)' fallbackPlacement: '(string|array)',
boundary: '(string|element)'
}; };
var AttachmentMap = { var AttachmentMap = {
AUTO: 'auto', AUTO: 'auto',
@ -2465,7 +2487,8 @@ var Tooltip = function ($$$1) {
placement: 'top', placement: 'top',
offset: 0, offset: 0,
container: false, container: false,
fallbackPlacement: 'flip' fallbackPlacement: 'flip',
boundary: 'scrollParent'
}; };
var HoverState = { var HoverState = {
SHOW: 'show', SHOW: 'show',
@ -2655,6 +2678,9 @@ var Tooltip = function ($$$1) {
}, },
arrow: { arrow: {
element: Selector.ARROW element: Selector.ARROW
},
preventOverflow: {
boundariesElement: this.config.boundary
} }
}, },
onCreate: function onCreate(data) { onCreate: function onCreate(data) {
@ -2832,7 +2858,7 @@ var Tooltip = function ($$$1) {
}); });
if (this.config.selector) { if (this.config.selector) {
this.config = $$$1.extend({}, this.config, { this.config = _extends({}, this.config, {
trigger: 'manual', trigger: 'manual',
selector: '' selector: ''
}); });
@ -2926,7 +2952,7 @@ var Tooltip = function ($$$1) {
}; };
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, this.constructor.Default, $$$1(this.element).data(), config); config = _extends({}, this.constructor.Default, $$$1(this.element).data(), config);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
@ -3075,7 +3101,7 @@ var Tooltip = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): popover.js * Bootstrap (v4.0.0-beta.3): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3087,19 +3113,19 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'popover'; var NAME = 'popover';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.popover'; var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover'; var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = $$$1.extend({}, Tooltip.Default, { var Default = _extends({}, Tooltip.Default, {
placement: 'right', placement: 'right',
trigger: 'click', trigger: 'click',
content: '', content: '',
template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>'
}); });
var DefaultType = $$$1.extend({}, Tooltip.DefaultType, { var DefaultType = _extends({}, Tooltip.DefaultType, {
content: '(string|element|function)' content: '(string|element|function)'
}); });
var ClassName = { var ClassName = {
@ -3268,7 +3294,7 @@ var Popover = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): scrollspy.js * Bootstrap (v4.0.0-beta.3): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3280,7 +3306,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'scrollspy'; var NAME = 'scrollspy';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.scrollspy'; var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3407,7 +3433,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) { _proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config); config = _extends({}, Default, config);
if (typeof config.target !== 'string') { if (typeof config.target !== 'string') {
var id = $$$1(config.target).attr('id'); var id = $$$1(config.target).attr('id');
@ -3579,7 +3605,7 @@ var ScrollSpy = function ($$$1) {
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.0.0-beta.2): tab.js * Bootstrap (v4.0.0-beta.3): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -3591,7 +3617,7 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
var NAME = 'tab'; var NAME = 'tab';
var VERSION = '4.0.0-beta.2'; var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tab'; var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY; var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api'; var DATA_API_KEY = '.data-api';
@ -3718,7 +3744,7 @@ var Tab = function ($$$1) {
var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE); var isTransitioning = callback && Util.supportsTransitionEnd() && active && $$$1(active).hasClass(ClassName.FADE);
var complete = function complete() { var complete = function complete() {
return _this2._transitionComplete(element, active, isTransitioning, callback); return _this2._transitionComplete(element, active, callback);
}; };
if (active && isTransitioning) { if (active && isTransitioning) {
@ -3726,15 +3752,11 @@ var Tab = function ($$$1) {
} else { } else {
complete(); complete();
} }
if (active) {
$$$1(active).removeClass(ClassName.SHOW);
}
}; };
_proto._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) { _proto._transitionComplete = function _transitionComplete(element, active, callback) {
if (active) { if (active) {
$$$1(active).removeClass(ClassName.ACTIVE); $$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
if (dropdownChild) { if (dropdownChild) {
@ -3752,12 +3774,8 @@ var Tab = function ($$$1) {
element.setAttribute('aria-selected', true); element.setAttribute('aria-selected', true);
} }
if (isTransitioning) {
Util.reflow(element); Util.reflow(element);
$$$1(element).addClass(ClassName.SHOW); $$$1(element).addClass(ClassName.SHOW);
} else {
$$$1(element).removeClass(ClassName.FADE);
}
if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0]; var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
@ -3868,7 +3886,7 @@ exports.Scrollspy = ScrollSpy;
exports.Tab = Tab; exports.Tab = Tab;
exports.Tooltip = Tooltip; exports.Tooltip = Tooltip;
return exports; Object.defineProperty(exports, '__esModule', { value: true });
}({},jQuery,Popper)); })));
//# sourceMappingURL=bootstrap.js.map //# sourceMappingURL=bootstrap.js.map

4
src/js/bootstrap4/bootstrap.min.js vendored Executable file → Normal file

File diff suppressed because one or more lines are too long

0
src/sass/bootstrap4/_alert.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_badge.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_breadcrumb.scss Executable file → Normal file
View File

68
src/sass/bootstrap4/_button-group.scss Executable file → Normal file
View File

@ -44,46 +44,18 @@
} }
.btn-group { .btn-group {
> .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
border-radius: 0;
}
// Set corners individual because sometimes a single button can be in a .btn-group
// and we need :first-child and :last-child to both match
> .btn:first-child { > .btn:first-child {
margin-left: 0; margin-left: 0;
}
&:not(:last-child):not(.dropdown-toggle) { // Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-right-radius(0); @include border-right-radius(0);
} }
}
> .btn:not(:first-child),
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu > .btn-group:not(:first-child) > .btn {
// immediately after it
> .btn:last-child:not(:first-child),
> .dropdown-toggle:not(:first-child) {
@include border-left-radius(0);
}
// Custom edits for including btn-groups within btn-groups (useful for including
// dropdown buttons within a btn-group)
> .btn-group {
float: left;
}
> .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
> .btn-group:first-child:not(:last-child) {
> .btn:last-child,
> .dropdown-toggle {
@include border-right-radius(0);
}
}
> .btn-group:last-child:not(:first-child) > .btn:first-child {
@include border-left-radius(0); @include border-left-radius(0);
} }
} }
@ -154,32 +126,14 @@
margin-left: 0; margin-left: 0;
} }
> .btn { // Reset rounded corners
&:not(:first-child):not(:last-child) { > .btn:not(:last-child):not(.dropdown-toggle),
border-radius: 0; > .btn-group:not(:last-child) > .btn {
}
&:first-child:not(:last-child) {
@include border-bottom-radius(0); @include border-bottom-radius(0);
} }
&:last-child:not(:first-child) { > .btn:not(:first-child),
@include border-top-radius(0); > .btn-group:not(:first-child) > .btn {
}
}
> .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
> .btn-group:first-child:not(:last-child) {
> .btn:last-child,
> .dropdown-toggle {
@include border-bottom-radius(0);
}
}
> .btn-group:last-child:not(:first-child) > .btn:first-child {
@include border-top-radius(0); @include border-top-radius(0);
} }
} }

10
src/sass/bootstrap4/_buttons.scss Executable file → Normal file
View File

@ -19,6 +19,7 @@
@include hover-focus { @include hover-focus {
text-decoration: none; text-decoration: none;
} }
&:focus, &:focus,
&.focus { &.focus {
outline: 0; outline: 0;
@ -32,12 +33,21 @@
@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 {
background-image: none; background-image: none;
@include box-shadow($btn-active-box-shadow);
&:focus {
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow); @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
} }
} }
}
// Future-proof disabling of clicks on `<a>` elements // Future-proof disabling of clicks on `<a>` elements
a.btn.disabled, a.btn.disabled,

0
src/sass/bootstrap4/_card.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_carousel.scss Executable file → Normal file
View File

5
src/sass/bootstrap4/_close.scss Executable file → Normal file
View File

@ -12,6 +12,11 @@
text-decoration: none; text-decoration: none;
opacity: .75; opacity: .75;
} }
// Opinionated: add "hand" cursor to non-disabled .close elements
&:not([disabled]):not(.disabled) {
cursor: pointer;
}
} }
// Additional properties for button version // Additional properties for button version

14
src/sass/bootstrap4/_code.scss Executable file → Normal file
View File

@ -8,24 +8,20 @@ samp {
// Inline code // Inline code
code { code {
padding: $code-padding-y $code-padding-x;
font-size: $code-font-size; font-size: $code-font-size;
color: $code-color; color: $code-color;
background-color: $code-bg; word-break: break-word;
@include border-radius($border-radius);
// Streamline the style when inside anchors to avoid broken underline and more // Streamline the style when inside anchors to avoid broken underline and more
a > & { a > & {
padding: 0;
color: inherit; color: inherit;
background-color: inherit;
} }
} }
// User input typically entered via keyboard // User input typically entered via keyboard
kbd { kbd {
padding: $code-padding-y $code-padding-x; padding: $kbd-padding-y $kbd-padding-x;
font-size: $code-font-size; 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);
@ -47,11 +43,9 @@ pre {
// 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 {
padding: 0;
font-size: inherit; font-size: inherit;
color: inherit; color: inherit;
background-color: transparent; word-break: normal;
@include border-radius(0);
} }
} }

130
src/sass/bootstrap4/_custom-forms.scss Executable file → Normal file
View File

@ -9,9 +9,13 @@
.custom-control { .custom-control {
position: relative; position: relative;
display: inline-flex; display: block;
min-height: (1rem * $line-height-base); min-height: (1rem * $line-height-base);
padding-left: $custom-control-gutter; padding-left: $custom-control-gutter;
}
.custom-control-inline {
display: inline-flex;
margin-right: $custom-control-spacer-x; margin-right: $custom-control-spacer-x;
} }
@ -20,39 +24,43 @@
z-index: -1; // Put the input behind the label so it doesn't overlay text z-index: -1; // Put the input behind the label so it doesn't overlay text
opacity: 0; opacity: 0;
&:checked ~ .custom-control-indicator { &:checked ~ .custom-control-label::before {
color: $custom-control-indicator-checked-color; color: $custom-control-indicator-checked-color;
@include gradient-bg($custom-control-indicator-checked-bg); @include gradient-bg($custom-control-indicator-checked-bg);
@include box-shadow($custom-control-indicator-checked-box-shadow); @include box-shadow($custom-control-indicator-checked-box-shadow);
} }
&:focus ~ .custom-control-indicator { &:focus ~ .custom-control-label::before {
// the mixin is not used here to make sure there is feedback // the mixin is not used here to make sure there is feedback
box-shadow: $custom-control-indicator-focus-box-shadow; box-shadow: $custom-control-indicator-focus-box-shadow;
} }
&:active ~ .custom-control-indicator { &:active ~ .custom-control-label::before {
color: $custom-control-indicator-active-color; color: $custom-control-indicator-active-color;
background-color: $custom-control-indicator-active-bg; background-color: $custom-control-indicator-active-bg;
@include box-shadow($custom-control-indicator-active-box-shadow); @include box-shadow($custom-control-indicator-active-box-shadow);
} }
&:disabled { &:disabled {
~ .custom-control-indicator { ~ .custom-control-label {
color: $custom-control-label-disabled-color;
&::before {
background-color: $custom-control-indicator-disabled-bg; background-color: $custom-control-indicator-disabled-bg;
} }
~ .custom-control-description {
color: $custom-control-description-disabled-color;
} }
} }
} }
// Custom indicator // Custom control indicators
// //
// Generates a shadow element to create our makeshift checkbox/radio background. // Build the custom controls out of psuedo-elements.
.custom-control-indicator { .custom-control-label {
margin-bottom: 0;
// Background-color and (when enabled) gradient
&::before {
position: absolute; position: absolute;
top: (($line-height-base - $custom-control-indicator-size) / 2); top: (($line-height-base - $custom-control-indicator-size) / 2);
left: 0; left: 0;
@ -60,11 +68,17 @@
width: $custom-control-indicator-size; width: $custom-control-indicator-size;
height: $custom-control-indicator-size; height: $custom-control-indicator-size;
pointer-events: none; pointer-events: none;
content: "";
user-select: none; user-select: none;
background-color: $custom-control-indicator-bg; background-color: $custom-control-indicator-bg;
@include box-shadow($custom-control-indicator-box-shadow); @include box-shadow($custom-control-indicator-box-shadow);
}
&::before { // Foreground (icon)
&::after {
position: absolute;
top: (($line-height-base - $custom-control-indicator-size) / 2);
left: 0;
display: block; display: block;
width: $custom-control-indicator-size; width: $custom-control-indicator-size;
height: $custom-control-indicator-size; height: $custom-control-indicator-size;
@ -75,28 +89,31 @@
} }
} }
// Checkboxes // Checkboxes
// //
// Tweak just a few things for checkboxes. // Tweak just a few things for checkboxes.
.custom-checkbox { .custom-checkbox {
.custom-control-indicator { .custom-control-label::before {
@include border-radius($custom-checkbox-indicator-border-radius); @include border-radius($custom-checkbox-indicator-border-radius);
} }
.custom-control-input:checked ~ .custom-control-indicator { .custom-control-input:checked ~ .custom-control-label {
@include gradient-bg($custom-control-indicator-checked-bg);
&::before { &::before {
@include gradient-bg($custom-control-indicator-checked-bg);
}
&::after {
background-image: $custom-checkbox-indicator-icon-checked; background-image: $custom-checkbox-indicator-icon-checked;
} }
} }
.custom-control-input:indeterminate ~ .custom-control-indicator { .custom-control-input:indeterminate ~ .custom-control-label {
&::before {
@include gradient-bg($custom-checkbox-indicator-indeterminate-bg); @include gradient-bg($custom-checkbox-indicator-indeterminate-bg);
@include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow); @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);
}
&::before { &::after {
background-image: $custom-checkbox-indicator-icon-indeterminate; background-image: $custom-checkbox-indicator-icon-indeterminate;
} }
} }
@ -107,39 +124,21 @@
// Tweak just a few things for radios. // Tweak just a few things for radios.
.custom-radio { .custom-radio {
.custom-control-indicator { .custom-control-label::before {
border-radius: $custom-radio-indicator-border-radius; border-radius: $custom-radio-indicator-border-radius;
} }
.custom-control-input:checked ~ .custom-control-indicator { .custom-control-input:checked ~ .custom-control-label {
@include gradient-bg($custom-control-indicator-checked-bg);
&::before { &::before {
@include gradient-bg($custom-control-indicator-checked-bg);
}
&::after {
background-image: $custom-radio-indicator-icon-checked; background-image: $custom-radio-indicator-icon-checked;
} }
} }
} }
// Layout options
//
// By default radios and checkboxes are `inline-block` with no additional spacing
// set. Use these optional classes to tweak the layout.
.custom-controls-stacked {
display: flex;
flex-direction: column;
.custom-control {
margin-bottom: $custom-control-spacer-y;
+ .custom-control {
margin-left: 0;
}
}
}
// Select // Select
// //
// Replaces the browser default select with a custom one, mostly pulled from // Replaces the browser default select with a custom one, mostly pulled from
@ -148,7 +147,7 @@
.custom-select { .custom-select {
display: inline-block; display: inline-block;
max-width: 100%; width: 100%;
height: $input-height; height: $input-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;
line-height: $custom-select-line-height; line-height: $custom-select-line-height;
@ -220,14 +219,15 @@
.custom-file { .custom-file {
position: relative; position: relative;
display: inline-block; display: inline-block;
max-width: 100%; width: 100%;
height: $custom-file-height; height: $custom-file-height;
margin-bottom: 0; margin-bottom: 0;
} }
.custom-file-input { .custom-file-input {
min-width: $custom-file-width; position: relative;
max-width: 100%; z-index: 2;
width: 100%;
height: $custom-file-height; height: $custom-file-height;
margin: 0; margin: 0;
opacity: 0; opacity: 0;
@ -240,49 +240,43 @@
border-color: $custom-file-focus-border-color; border-color: $custom-file-focus-border-color;
} }
} }
@each $lang, $value in $custom-file-text {
&:lang(#{$lang}) ~ .custom-file-label::after {
content: $value;
}
}
} }
.custom-file-control { .custom-file-label {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
left: 0; left: 0;
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;
line-height: $custom-file-line-height; line-height: $custom-file-line-height;
color: $custom-file-color; color: $custom-file-color;
pointer-events: none;
user-select: none;
background-color: $custom-file-bg; background-color: $custom-file-bg;
border: $custom-file-border-width solid $custom-file-border-color; border: $custom-file-border-width solid $custom-file-border-color;
@include border-radius($custom-file-border-radius); @include border-radius($custom-file-border-radius);
@include box-shadow($custom-file-box-shadow); @include box-shadow($custom-file-box-shadow);
@each $lang, $text in map-get($custom-file-text, placeholder) { &::after {
&:lang(#{$lang}):empty::after {
content: $text;
}
}
&::before {
position: absolute; position: absolute;
top: -$custom-file-border-width; top: 0;
right: -$custom-file-border-width; right: 0;
bottom: -$custom-file-border-width; bottom: 0;
z-index: 1; z-index: 3;
display: block; display: block;
height: $custom-file-height; height: calc(#{$custom-file-height} - #{$custom-file-border-width} * 2);
padding: $custom-file-padding-y $custom-file-padding-x; padding: $custom-file-padding-y $custom-file-padding-x;
line-height: $custom-file-line-height; line-height: $custom-file-line-height;
color: $custom-file-button-color; color: $custom-file-button-color;
content: "Browse";
@include gradient-bg($custom-file-button-bg); @include gradient-bg($custom-file-button-bg);
border: $custom-file-border-width solid $custom-file-border-color; border-left: $custom-file-border-width solid $custom-file-border-color;
@include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0); @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0);
} }
@each $lang, $text in map-get($custom-file-text, button-label) {
&:lang(#{$lang})::before {
content: $text;
}
}
} }

0
src/sass/bootstrap4/_dropdown.scss Executable file → Normal file
View File

73
src/sass/bootstrap4/_forms.scss Executable file → Normal file
View File

@ -76,6 +76,7 @@ select.form-control {
.form-control-file, .form-control-file,
.form-control-range { .form-control-range {
display: block; display: block;
width: 100%;
} }
@ -83,12 +84,13 @@ select.form-control {
// Labels // Labels
// //
// For use with horizontal and inline forms, when you need the label text to // For use with horizontal and inline forms, when you need the label (or legend)
// align with the form controls. // text to align with the form controls.
.col-form-label { .col-form-label {
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>` default margin-bottom: 0; // Override the `<label>/<legend>` default
font-size: inherit; // Override the `<legend>` default
line-height: $input-line-height; line-height: $input-line-height;
} }
@ -107,20 +109,6 @@ select.form-control {
} }
//
// Legends
//
// For use with horizontal and inline forms, when you need the legend text to
// be the same size as regular labels, and to align with the form controls.
.col-form-legend {
padding-top: $input-padding-y;
padding-bottom: $input-padding-y;
margin-bottom: 0;
font-size: $font-size-base;
}
// Readonly controls as plain text // Readonly controls as plain text
// //
// Apply class to a readonly input to make it appear like regular plain // Apply class to a readonly input to make it appear like regular plain
@ -220,33 +208,35 @@ select.form-control-lg {
.form-check { .form-check {
position: relative; position: relative;
display: block; display: block;
margin-bottom: $form-check-margin-bottom;
&.disabled {
.form-check-label {
color: $text-muted;
}
}
}
.form-check-label {
padding-left: $form-check-input-gutter; padding-left: $form-check-input-gutter;
margin-bottom: 0; // Override default `<label>` bottom margin
} }
.form-check-input { .form-check-input {
position: absolute; position: absolute;
margin-top: $form-check-input-margin-y; margin-top: $form-check-input-margin-y;
margin-left: -$form-check-input-gutter; margin-left: -$form-check-input-gutter;
&:disabled ~ .form-check-label {
color: $text-muted;
}
}
.form-check-label {
margin-bottom: 0; // Override default `<label>` bottom margin
} }
// Radios and checkboxes on same line
.form-check-inline { .form-check-inline {
display: inline-block; display: inline-flex;
align-items: center;
padding-left: 0; // Override base .form-check
margin-right: $form-check-inline-margin-x; margin-right: $form-check-inline-margin-x;
.form-check-label { // Undo .form-check-input defaults and add some `margin-right`.
vertical-align: middle; .form-check-input {
position: static;
margin-top: 0;
margin-right: $form-check-inline-input-margin-x;
margin-left: 0;
} }
} }
@ -323,10 +313,6 @@ select.form-control-lg {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: auto; width: auto;
margin-top: 0;
margin-bottom: 0;
}
.form-check-label {
padding-left: 0; padding-left: 0;
} }
.form-check-input { .form-check-input {
@ -336,23 +322,12 @@ select.form-control-lg {
margin-left: 0; margin-left: 0;
} }
// Custom form controls
.custom-control { .custom-control {
display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding-left: 0;
} }
.custom-control-indicator { .custom-control-label {
position: static; margin-bottom: 0;
display: inline-block;
margin-right: $form-check-input-margin-x; // Flexbox alignment means we lose our HTML space here, so we compensate.
vertical-align: text-bottom;
}
// Re-override the feedback icon.
.has-feedback .form-control-feedback {
top: 0;
} }
} }
} }

2
src/sass/bootstrap4/_functions.scss Executable file → Normal file
View File

@ -56,7 +56,7 @@
$yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
@if ($yiq >= 150) { @if ($yiq >= $yiq-contrasted-threshold) {
@return $yiq-text-dark; @return $yiq-text-dark;
} @else { } @else {
@return $yiq-text-light; @return $yiq-text-light;

0
src/sass/bootstrap4/_grid.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_images.scss Executable file → Normal file
View File

259
src/sass/bootstrap4/_input-group.scss Executable file → Normal file
View File

@ -7,77 +7,87 @@
.input-group { .input-group {
position: relative; position: relative;
display: flex; display: flex;
flex-wrap: wrap; // For form validation feedback
align-items: stretch; align-items: stretch;
width: 100%; width: 100%;
.form-control { .form-control,
// Ensure that the input is always above the *appended* addon button for .custom-select,
// proper border colors. .custom-file {
position: relative; position: relative; // For focus state's z-index
z-index: 1;
flex: 1 1 auto; flex: 1 1 auto;
// Add width 1% and flex-basis auto to ensure that button will not wrap out // Add width 1% and flex-basis auto to ensure that button will not wrap out
// the column. Applies to IE Edge+ and Firefox. Chrome does not require this. // the column. Applies to IE Edge+ and Firefox. Chrome does not require this.
width: 1%; width: 1%;
margin-bottom: 0; margin-bottom: 0;
// Bring the "active" form control to the front // Bring the "active" form control to the top of surrounding elements
@include hover-focus-active { &:focus {
z-index: 3;
}
+ .form-control {
margin-left: -$input-border-width;
}
}
.form-control,
.custom-select {
&:not(:last-child) { @include border-right-radius(0); }
&:not(:first-child) { @include border-left-radius(0); }
}
// Custom file inputs have more complex markup, thus requiring different
// border-radius overrides.
.custom-file {
display: flex;
align-items: center;
&:not(:last-child) .custom-file-control,
&:not(:last-child) .custom-file-control::before { @include border-right-radius(0); }
&:not(:first-child) .custom-file-control,
&:not(:first-child) .custom-file-control::before { @include border-left-radius(0); }
}
}
// Prepend and append
//
// While it requires one extra layer of HTML for each, dedicated prepend and
// append elements allow us to 1) be less clever, 2) simplify our selectors, and
// 3) support HTML5 form validation.
.input-group-prepend,
.input-group-append {
display: flex;
align-items: center;
// Ensure buttons are always above inputs for more visually pleasing borders.
// This isn't needed for `.input-group-text` since it shares the same border-color
// as our inputs.
.btn {
position: relative;
z-index: 2; z-index: 2;
} }
.btn + .btn,
.btn + .input-group-text,
.input-group-text + .input-group-text,
.input-group-text + .btn {
margin-left: -$input-border-width;
} }
} }
.input-group-addon, .input-group-prepend { margin-right: -$input-border-width; }
.input-group-btn, .input-group-append { margin-left: -$input-border-width; }
.input-group .form-control,
.input-group .custom-select,
.input-group .custom-file {
display: flex;
align-items: center;
&:not(:first-child):not(:last-child) {
@include border-radius(0);
}
}
.input-group .custom-file { // Textual addons
display: flex;
align-items: center;
}
.input-group .custom-select,
.input-group .custom-file {
width: 100%;
}
.input-group-addon,
.input-group-btn {
white-space: nowrap;
}
// Sizing options
// //
// Remix the default form control sizing classes into new ones for easier // Serves as a catch-all element for any text or radio/checkbox input you wish
// manipulation. // to prepend or append to an input.
.input-group-lg > .form-control, .input-group-text {
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
@extend .form-control-lg;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
@extend .form-control-sm;
}
//
// Text input groups
//
.input-group-addon {
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 font-size: $font-size-base; // Match inputs
@ -85,23 +95,11 @@
line-height: $input-line-height; line-height: $input-line-height;
color: $input-group-addon-color; color: $input-group-addon-color;
text-align: center; text-align: center;
white-space: nowrap;
background-color: $input-group-addon-bg; background-color: $input-group-addon-bg;
border: $input-border-width solid $input-group-addon-border-color; border: $input-border-width solid $input-group-addon-border-color;
@include border-radius($input-border-radius); @include border-radius($input-border-radius);
// Sizing
&.form-control-sm {
padding: $input-padding-y-sm $input-padding-x-sm;
font-size: $font-size-sm;
@include border-radius($input-border-radius-sm);
}
&.form-control-lg {
padding: $input-padding-y-lg $input-padding-x-lg;
font-size: $font-size-lg;
@include border-radius($input-border-radius-lg);
}
// Nuke default margins from checkboxes and radios to vertically center within. // Nuke default margins from checkboxes and radios to vertically center within.
input[type="radio"], input[type="radio"],
input[type="checkbox"] { input[type="checkbox"] {
@ -110,100 +108,49 @@
} }
// Sizing
// //
// Reset rounded corners // Remix the default form control sizing classes into new ones for easier
// // manipulation.
.input-group .form-control:not(:last-child), .input-group-lg > .form-control,
.input-group .custom-select:not(:last-child), .input-group-lg > .input-group-prepend > .input-group-text,
.input-group .custom-file:not(:last-child) .custom-file-control::before, .input-group-lg > .input-group-append > .input-group-text,
.input-group-addon:not(:last-child), .input-group-lg > .input-group-prepend > .btn,
.input-group-btn:not(:last-child) > .btn, .input-group-lg > .input-group-append > .btn {
.input-group-btn:not(:last-child) > .btn-group > .btn, @extend .form-control-lg;
.input-group-btn:not(:last-child) > .dropdown-toggle, }
.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { .input-group-sm > .form-control,
.input-group-sm > .input-group-prepend > .input-group-text,
.input-group-sm > .input-group-append > .input-group-text,
.input-group-sm > .input-group-prepend > .btn,
.input-group-sm > .input-group-append > .btn {
@extend .form-control-sm;
}
// Prepend and append rounded corners
//
// These rulesets must come after the sizing ones to properly override sm and lg
// border-radius values when extending. They're more specific than we'd like
// with the `.input-group >` part, but without it, we cannot override the sizing.
.input-group > .input-group-prepend > .btn,
.input-group > .input-group-prepend > .input-group-text,
.input-group > .input-group-append:not(:last-child) > .btn,
.input-group > .input-group-append:not(:last-child) > .input-group-text,
.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
@include border-right-radius(0); @include border-right-radius(0);
} }
.input-group-addon:not(:last-child) { .input-group > .input-group-append > .btn,
border-right: 0; .input-group > .input-group-append > .input-group-text,
} .input-group > .input-group-prepend:not(:first-child) > .btn,
.input-group > .input-group-prepend:not(:first-child) > .input-group-text,
.input-group .form-control:not(:first-child), .input-group > .input-group-prepend:first-child > .btn:not(:first-child),
.input-group .custom-select:not(:first-child), .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
.input-group .custom-file:not(:first-child) .custom-file-control,
.input-group-addon:not(:first-child),
.input-group-btn:not(:first-child) > .btn,
.input-group-btn:not(:first-child) > .btn-group > .btn,
.input-group-btn:not(:first-child) > .dropdown-toggle,
.input-group-btn:not(:last-child) > .btn:not(:first-child),
.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {
@include border-left-radius(0); @include border-left-radius(0);
} }
.form-control,
.custom-select,
.custom-file {
+ .input-group-addon:not(:first-child) {
border-left: 0;
}
}
//
// Button input groups
//
.input-group-btn {
position: relative;
align-items: stretch;
// Jankily prevent input button groups from wrapping with `white-space` and
// `font-size` in combination with `inline-block` on buttons.
font-size: 0;
white-space: nowrap;
// Negative margin for spacing, position for bringing hovered/focused/actived
// element above the siblings.
> .btn {
position: relative;
+ .btn {
margin-left: (-$input-border-width);
}
// Bring the "active" button to the front
@include hover-focus-active {
z-index: 2;
}
}
&:first-child > .btn + .btn {
margin-left: 0;
}
// Negative margin to only have a single, shared border between the two
&:not(:last-child) {
> .btn,
> .btn-group {
margin-right: (-$input-border-width);
}
}
&:not(:first-child) {
> .btn,
> .btn-group {
z-index: 1;
// remove nagative margin ($input-border-width) to solve overlapping issue with button.
margin-left: 0;
// When input is first, overlap the right side of it with the button(-group)
&:first-child {
margin-left: (-$input-border-width);
}
// Because specificity
@include hover-focus-active {
z-index: 2;
}
}
}
}

0
src/sass/bootstrap4/_jumbotron.scss Executable file → Normal file
View File

3
src/sass/bootstrap4/_list-group.scss Executable file → Normal file
View File

@ -59,6 +59,7 @@
} }
@include hover-focus { @include hover-focus {
z-index: 1; // Place hover/active items above their siblings for proper border styling
text-decoration: none; text-decoration: none;
} }
@ -70,7 +71,7 @@
// Include both here for `<a>`s and `<button>`s // Include both here for `<a>`s and `<button>`s
&.active { &.active {
z-index: 1; // Place active items above their siblings for proper border styling z-index: 2; // Place active items above their siblings for proper border styling
color: $list-group-active-color; color: $list-group-active-color;
background-color: $list-group-active-bg; background-color: $list-group-active-bg;
border-color: $list-group-active-border-color; border-color: $list-group-active-border-color;

0
src/sass/bootstrap4/_media.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_mixins.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_modal.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_nav.scss Executable file → Normal file
View File

5
src/sass/bootstrap4/_navbar.scss Executable file → Normal file
View File

@ -116,6 +116,11 @@
@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

8
src/sass/bootstrap4/_pagination.scss Executable file → Normal file
View File

@ -20,6 +20,12 @@
background-color: $pagination-hover-bg; background-color: $pagination-hover-bg;
border-color: $pagination-hover-border-color; border-color: $pagination-hover-border-color;
} }
// Opinionated: add "hand" cursor to non-disabled .page-link elements
&:not([disabled]):not(.disabled) {
cursor: pointer;
}
} }
.page-item { .page-item {
@ -45,6 +51,8 @@
&.disabled .page-link { &.disabled .page-link {
color: $pagination-disabled-color; color: $pagination-disabled-color;
pointer-events: none; pointer-events: none;
// Opinionated: remove the "hand" cursor set previously for .page-link
cursor: auto;
background-color: $pagination-disabled-bg; background-color: $pagination-disabled-bg;
border-color: $pagination-disabled-border-color; border-color: $pagination-disabled-border-color;
} }

87
src/sass/bootstrap4/_popover.scss Executable file → Normal file
View File

@ -17,105 +17,92 @@
@include border-radius($border-radius-lg); @include border-radius($border-radius-lg);
@include box-shadow($popover-box-shadow); @include box-shadow($popover-box-shadow);
// Arrows
//
// .arrow is outer, .arrow::after is inner
.arrow { .arrow {
position: absolute; position: absolute;
display: block; display: block;
width: $popover-arrow-width; width: $popover-arrow-width;
height: $popover-arrow-height; height: $popover-arrow-height;
} margin: 0 $border-radius-lg;
.arrow::before, &::before,
.arrow::after { &::after {
position: absolute; position: absolute;
display: block; display: block;
content: "";
border-color: transparent; border-color: transparent;
border-style: solid; border-style: solid;
} }
.arrow::before {
content: "";
border-width: $popover-arrow-width;
} }
.arrow::after {
content: "";
border-width: $popover-arrow-width;
} }
// Popover directions .bs-popover-top {
margin-bottom: $popover-arrow-height;
&.bs-popover-top {
margin-bottom: $popover-arrow-width;
.arrow { .arrow {
bottom: 0; bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
} }
.arrow::before, .arrow::before,
.arrow::after { .arrow::after {
border-bottom-width: 0; border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
} }
.arrow::before { .arrow::before {
bottom: -$popover-arrow-width; bottom: 0;
margin-left: -$popover-arrow-width;
border-top-color: $popover-arrow-outer-color; border-top-color: $popover-arrow-outer-color;
} }
.arrow::after { .arrow::after {
bottom: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1); bottom: $popover-border-width;
margin-left: -$popover-arrow-width;
border-top-color: $popover-arrow-color; border-top-color: $popover-arrow-color;
} }
} }
&.bs-popover-right { .bs-popover-right {
margin-left: $popover-arrow-width; margin-left: $popover-arrow-height;
.arrow { .arrow {
left: 0; left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
width: $popover-arrow-height;
height: $popover-arrow-width;
margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
} }
.arrow::before, .arrow::before,
.arrow::after { .arrow::after {
margin-top: -$popover-arrow-width; border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
border-left-width: 0;
} }
.arrow::before { .arrow::before {
left: -$popover-arrow-width; left: 0;
border-right-color: $popover-arrow-outer-color; border-right-color: $popover-arrow-outer-color;
} }
.arrow::after { .arrow::after {
left: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1); left: $popover-border-width;
border-right-color: $popover-arrow-color; border-right-color: $popover-arrow-color;
} }
} }
&.bs-popover-bottom { .bs-popover-bottom {
margin-top: $popover-arrow-width; margin-top: $popover-arrow-height;
.arrow { .arrow {
top: 0; top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
} }
.arrow::before, .arrow::before,
.arrow::after { .arrow::after {
margin-left: -$popover-arrow-width; border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
border-top-width: 0;
} }
.arrow::before { .arrow::before {
top: -$popover-arrow-width; top: 0;
border-bottom-color: $popover-arrow-outer-color; border-bottom-color: $popover-arrow-outer-color;
} }
.arrow::after { .arrow::after {
top: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1); top: $popover-border-width;
border-bottom-color: $popover-arrow-color; border-bottom-color: $popover-arrow-color;
} }
@ -125,37 +112,40 @@
top: 0; top: 0;
left: 50%; left: 50%;
display: block; display: block;
width: 20px; width: $popover-arrow-width;
margin-left: -10px; margin-left: ($popover-arrow-width / -2);
content: ""; content: "";
border-bottom: $popover-border-width solid $popover-header-bg; border-bottom: $popover-border-width solid $popover-header-bg;
} }
} }
&.bs-popover-left { .bs-popover-left {
margin-right: $popover-arrow-width; margin-right: $popover-arrow-height;
.arrow { .arrow {
right: 0; right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
width: $popover-arrow-height;
height: $popover-arrow-width;
margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
} }
.arrow::before, .arrow::before,
.arrow::after { .arrow::after {
margin-top: -$popover-arrow-width; border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
border-right-width: 0;
} }
.arrow::before { .arrow::before {
right: -$popover-arrow-width; right: 0;
border-left-color: $popover-arrow-outer-color; border-left-color: $popover-arrow-outer-color;
} }
.arrow::after { .arrow::after {
right: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1); right: $popover-border-width;
border-left-color: $popover-arrow-color; border-left-color: $popover-arrow-color;
} }
} }
&.bs-popover-auto {
.bs-popover-auto {
&[x-placement^="top"] { &[x-placement^="top"] {
@extend .bs-popover-top; @extend .bs-popover-top;
} }
@ -169,7 +159,6 @@
@extend .bs-popover-left; @extend .bs-popover-left;
} }
} }
}
// Offset the popover to account for the popover arrow // Offset the popover to account for the popover arrow

0
src/sass/bootstrap4/_print.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_progress.scss Executable file → Normal file
View File

1
src/sass/bootstrap4/_reboot.scss Executable file → Normal file
View File

@ -491,6 +491,7 @@ output {
summary { summary {
display: list-item; // Add the correct display in all browsers display: list-item; // Add the correct display in all browsers
cursor: pointer;
} }
template { template {

0
src/sass/bootstrap4/_root.scss Executable file → Normal file
View File

2
src/sass/bootstrap4/_tables.scss Executable file → Normal file
View File

@ -171,7 +171,7 @@
-ms-overflow-style: -ms-autohiding-scrollbar; // See https://github.com/twbs/bootstrap/pull/10057 -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 {
border: 0; border: 0;
} }
} }

82
src/sass/bootstrap4/_tooltip.scss Executable file → Normal file
View File

@ -19,68 +19,77 @@
display: block; display: block;
width: $tooltip-arrow-width; width: $tooltip-arrow-width;
height: $tooltip-arrow-height; height: $tooltip-arrow-height;
}
.arrow::before { &::before {
position: absolute; position: absolute;
content: "";
border-color: transparent; border-color: transparent;
border-style: solid; border-style: solid;
} }
}
&.bs-tooltip-top {
padding: $tooltip-arrow-width 0;
.arrow {
bottom: 0;
} }
.arrow::before { .bs-tooltip-top {
margin-left: -$tooltip-arrow-width; padding: $tooltip-arrow-height 0;
content: "";
border-width: $tooltip-arrow-width $tooltip-arrow-width 0; .arrow {
bottom: 0;
&::before {
top: 0;
border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
border-top-color: $tooltip-arrow-color; border-top-color: $tooltip-arrow-color;
} }
} }
&.bs-tooltip-right {
padding: 0 $tooltip-arrow-width;
.arrow {
left: 0;
} }
.arrow::before { .bs-tooltip-right {
margin-top: -$tooltip-arrow-width; padding: 0 $tooltip-arrow-height;
content: "";
border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0; .arrow {
left: 0;
width: $tooltip-arrow-height;
height: $tooltip-arrow-width;
&::before {
right: 0;
border-width: ($tooltip-arrow-width / 2) $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
border-right-color: $tooltip-arrow-color; border-right-color: $tooltip-arrow-color;
} }
} }
&.bs-tooltip-bottom {
padding: $tooltip-arrow-width 0;
.arrow {
top: 0;
} }
.arrow::before { .bs-tooltip-bottom {
margin-left: -$tooltip-arrow-width; padding: $tooltip-arrow-height 0;
content: "";
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width; .arrow {
top: 0;
&::before {
bottom: 0;
border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
border-bottom-color: $tooltip-arrow-color; border-bottom-color: $tooltip-arrow-color;
} }
} }
&.bs-tooltip-left {
padding: 0 $tooltip-arrow-width;
.arrow {
right: 0;
} }
.arrow::before { .bs-tooltip-left {
padding: 0 $tooltip-arrow-height;
.arrow {
right: 0; right: 0;
margin-top: -($tooltip-arrow-width); width: $tooltip-arrow-height;
content: ""; height: $tooltip-arrow-width;
border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
&::before {
left: 0;
border-width: ($tooltip-arrow-width / 2) 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
border-left-color: $tooltip-arrow-color; border-left-color: $tooltip-arrow-color;
} }
} }
&.bs-tooltip-auto { }
.bs-tooltip-auto {
&[x-placement^="top"] { &[x-placement^="top"] {
@extend .bs-tooltip-top; @extend .bs-tooltip-top;
} }
@ -94,7 +103,6 @@
@extend .bs-tooltip-left; @extend .bs-tooltip-left;
} }
} }
}
// Wrapper for the tooltip content // Wrapper for the tooltip content
.tooltip-inner { .tooltip-inner {

0
src/sass/bootstrap4/_transitions.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_type.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/_utilities.scss Executable file → Normal file
View File

37
src/sass/bootstrap4/_variables.scss Executable file → Normal file
View File

@ -87,11 +87,13 @@ $theme-colors: map-merge((
// Set a specific jump point for requesting color jumps // Set a specific jump point for requesting color jumps
$theme-color-interval: 8% !default; $theme-color-interval: 8% !default;
// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.
$yiq-contrasted-threshold: 150 !default;
// Customize the light and dark text colors for use in our YIQ color contrast function. // Customize the light and dark text colors for use in our YIQ color contrast function.
$yiq-text-dark: $gray-900 !default; $yiq-text-dark: $gray-900 !default;
$yiq-text-light: $white !default; $yiq-text-light: $white !default;
// Options // Options
// //
// Quickly modify global styling by enabling or disabling optional features. // Quickly modify global styling by enabling or disabling optional features.
@ -300,7 +302,7 @@ $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-200 !default; $table-border-color: $gray-300 !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;
@ -421,12 +423,12 @@ $input-transition: border-color .15s ease-in-out, box-shado
$form-text-margin-top: .25rem !default; $form-text-margin-top: .25rem !default;
$form-check-margin-bottom: .5rem !default;
$form-check-input-gutter: 1.25rem !default; $form-check-input-gutter: 1.25rem !default;
$form-check-input-margin-y: .25rem !default; $form-check-input-margin-y: .3rem !default;
$form-check-input-margin-x: .25rem !default; $form-check-input-margin-x: .25rem !default;
$form-check-inline-margin-x: .75rem !default; $form-check-inline-margin-x: .75rem !default;
$form-check-inline-input-margin-x: .3125rem !default;
$form-group-margin-bottom: 1rem !default; $form-group-margin-bottom: 1rem !default;
@ -435,7 +437,6 @@ $input-group-addon-bg: $gray-200 !default;
$input-group-addon-border-color: $input-border-color !default; $input-group-addon-border-color: $input-border-color !default;
$custom-control-gutter: 1.5rem !default; $custom-control-gutter: 1.5rem !default;
$custom-control-spacer-y: .25rem !default;
$custom-control-spacer-x: 1rem !default; $custom-control-spacer-x: 1rem !default;
$custom-control-indicator-size: 1rem !default; $custom-control-indicator-size: 1rem !default;
@ -444,7 +445,7 @@ $custom-control-indicator-bg-size: 50% 50% !default;
$custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default; $custom-control-indicator-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;
$custom-control-indicator-disabled-bg: $gray-200 !default; $custom-control-indicator-disabled-bg: $gray-200 !default;
$custom-control-description-disabled-color: $gray-600 !default; $custom-control-label-disabled-color: $gray-600 !default;
$custom-control-indicator-checked-color: $white !default; $custom-control-indicator-checked-color: $white !default;
$custom-control-indicator-checked-bg: theme-color("primary") !default; $custom-control-indicator-checked-bg: theme-color("primary") !default;
@ -493,7 +494,6 @@ $custom-select-font-size-lg: 125% !default;
$custom-select-height-lg: $input-height-lg !default; $custom-select-height-lg: $input-height-lg !default;
$custom-file-height: $input-height !default; $custom-file-height: $input-height !default;
$custom-file-width: 14rem !default;
$custom-file-focus-border-color: $input-focus-border-color !default; $custom-file-focus-border-color: $input-focus-border-color !default;
$custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default; $custom-file-focus-box-shadow: $input-btn-focus-box-shadow !default;
@ -509,12 +509,7 @@ $custom-file-box-shadow: $input-box-shadow !default;
$custom-file-button-color: $custom-file-color !default; $custom-file-button-color: $custom-file-color !default;
$custom-file-button-bg: $input-group-addon-bg !default; $custom-file-button-bg: $input-group-addon-bg !default;
$custom-file-text: ( $custom-file-text: (
placeholder: (
en: "Choose file..."
),
button-label: (
en: "Browse" en: "Browse"
)
) !default; ) !default;
@ -680,8 +675,8 @@ $tooltip-padding-y: .25rem !default;
$tooltip-padding-x: .5rem !default; $tooltip-padding-x: .5rem !default;
$tooltip-margin: 0 !default; $tooltip-margin: 0 !default;
$tooltip-arrow-width: .4rem !default; $tooltip-arrow-width: .8rem !default;
$tooltip-arrow-height: $tooltip-arrow-width !default; $tooltip-arrow-height: .4rem !default;
$tooltip-arrow-color: $tooltip-bg !default; $tooltip-arrow-color: $tooltip-bg !default;
@ -702,8 +697,8 @@ $popover-body-color: $body-color !default;
$popover-body-padding-y: $popover-header-padding-y !default; $popover-body-padding-y: $popover-header-padding-y !default;
$popover-body-padding-x: $popover-header-padding-x !default; $popover-body-padding-x: $popover-header-padding-x !default;
$popover-arrow-width: .8rem !default; $popover-arrow-width: 1rem !default;
$popover-arrow-height: .4rem !default; $popover-arrow-height: .5rem !default;
$popover-arrow-color: $popover-bg !default; $popover-arrow-color: $popover-bg !default;
$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; $popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;
@ -864,12 +859,12 @@ $close-text-shadow: 0 1px 0 $white !default;
// Code // Code
$code-font-size: 90% !default; $code-font-size: 87.5% !default;
$code-padding-y: .2rem !default; $code-color: $pink !default;
$code-padding-x: .4rem !default;
$code-color: #bd4147 !default;
$code-bg: $gray-100 !default;
$kbd-padding-y: .2rem !default;
$kbd-padding-x: .4rem !default;
$kbd-font-size: $code-font-size !default;
$kbd-color: $white !default; $kbd-color: $white !default;
$kbd-bg: $gray-900 !default; $kbd-bg: $gray-900 !default;

2
src/sass/bootstrap4/bootstrap-grid.scss vendored Executable file → Normal file
View File

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

2
src/sass/bootstrap4/bootstrap-reboot.scss vendored Executable file → Normal file
View File

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

4
src/sass/bootstrap4/bootstrap.scss vendored Executable file → Normal file
View File

@ -1,5 +1,5 @@
/*! /*!
* Bootstrap v4.0.0-beta.2 (https://getbootstrap.com) * Bootstrap v4.0.0-beta.3 (https://getbootstrap.com)
* Copyright 2011-2017 The Bootstrap Authors * Copyright 2011-2017 The Bootstrap Authors
* Copyright 2011-2017 Twitter, Inc. * Copyright 2011-2017 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@ -9,7 +9,6 @@
@import "variables"; @import "variables";
@import "mixins"; @import "mixins";
@import "root"; @import "root";
@import "print";
@import "reboot"; @import "reboot";
@import "type"; @import "type";
@import "images"; @import "images";
@ -40,3 +39,4 @@
@import "popover"; @import "popover";
@import "carousel"; @import "carousel";
@import "utilities"; @import "utilities";
@import "print";

0
src/sass/bootstrap4/mixins/_alert.scss Executable file → Normal file
View File

3
src/sass/bootstrap4/mixins/_background-variant.scss Executable file → Normal file
View File

@ -6,7 +6,8 @@
#{$parent} { #{$parent} {
background-color: $color !important; background-color: $color !important;
} }
a#{$parent} { a#{$parent},
button#{$parent} {
@include hover-focus { @include hover-focus {
background-color: darken($color, 10%) !important; background-color: darken($color, 10%) !important;
} }

0
src/sass/bootstrap4/mixins/_badge.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_border-radius.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_box-shadow.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_breakpoints.scss Executable file → Normal file
View File

2
src/sass/bootstrap4/mixins/_buttons.scss Executable file → Normal file
View File

@ -42,6 +42,7 @@
} }
border-color: $active-border; border-color: $active-border;
&: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 {
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5); box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);
@ -50,6 +51,7 @@
} }
} }
} }
}
@mixin button-outline-variant($color, $color-hover: #fff, $active-background: $color, $active-border: $color) { @mixin button-outline-variant($color, $color-hover: #fff, $active-background: $color, $active-border: $color) {
color: $color; color: $color;

0
src/sass/bootstrap4/mixins/_caret.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_clearfix.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_float.scss Executable file → Normal file
View File

34
src/sass/bootstrap4/mixins/_forms.scss Executable file → Normal file
View File

@ -30,6 +30,7 @@
.#{$state}-feedback { .#{$state}-feedback {
display: none; display: none;
width: 100%;
margin-top: $form-feedback-margin-top; margin-top: $form-feedback-margin-top;
font-size: $form-feedback-font-size; font-size: $form-feedback-font-size;
color: $color; color: $color;
@ -68,34 +69,39 @@
} }
} }
// TODO: redo check markup lol crap
.form-check-input { .form-check-input {
.was-validated &:#{$state}, .was-validated &:#{$state},
&.is-#{$state} { &.is-#{$state} {
+ .form-check-label { ~ .form-check-label {
color: $color; color: $color;
} }
} }
} }
// custom radios and checks
.custom-control-input { .custom-control-input {
.was-validated &:#{$state}, .was-validated &:#{$state},
&.is-#{$state} { &.is-#{$state} {
~ .custom-control-indicator { ~ .custom-control-label {
color: $color;
&::before {
background-color: lighten($color, 25%); background-color: lighten($color, 25%);
} }
~ .custom-control-description {
color: $color;
} }
~ .#{$state}-feedback,
~ .#{$state}-tooltip {
display: block;
}
&:checked { &:checked {
~ .custom-control-indicator { ~ .custom-control-label::before {
@include gradient-bg(lighten($color, 10%)); @include gradient-bg(lighten($color, 10%));
} }
} }
&:focus { &:focus {
~ .custom-control-indicator { ~ .custom-control-label::before {
box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-focus-width rgba($color, .25); box-shadow: 0 0 0 1px $body-bg, 0 0 0 $input-focus-width rgba($color, .25);
} }
} }
@ -106,13 +112,19 @@
.custom-file-input { .custom-file-input {
.was-validated &:#{$state}, .was-validated &:#{$state},
&.is-#{$state} { &.is-#{$state} {
~ .custom-file-control { ~ .custom-file-label {
border-color: $color; border-color: $color;
&::before { border-color: inherit; } &::before { border-color: inherit; }
} }
~ .#{$state}-feedback,
~ .#{$state}-tooltip {
display: block;
}
&:focus { &:focus {
~ .custom-file-control { ~ .custom-file-label {
box-shadow: 0 0 0 $input-focus-width rgba($color, .25); box-shadow: 0 0 0 $input-focus-width rgba($color, .25);
} }
} }

0
src/sass/bootstrap4/mixins/_gradients.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_grid-framework.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_grid.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_hover.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_image.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_list-group.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_lists.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_nav-divider.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_navbar-align.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_pagination.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_reset-text.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_resize.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_screen-reader.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_size.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_table-row.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_text-emphasis.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_text-hide.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_text-truncate.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_transition.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/mixins/_visibility.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_align.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_background.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_borders.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_clearfix.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_display.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_embed.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_flex.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_float.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_position.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_screenreaders.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_sizing.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_spacing.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_text.scss Executable file → Normal file
View File

0
src/sass/bootstrap4/utilities/_visibility.scss Executable file → Normal file
View File