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)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
var bootstrap = (function (exports,$,Popper) {
'use strict';
(function (global, factory) {
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'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
@ -25,6 +28,24 @@ function _createClass(Constructor, protoProps, staticProps) {
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) {
subClass.prototype = Object.create(superClass.prototype);
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)
* --------------------------------------------------------------------------
*/
@ -45,12 +66,7 @@ var Util = function ($$$1) {
* ------------------------------------------------------------------------
*/
var transition = false;
var MAX_UID = 1000000;
var TransitionEndEvent = {
WebkitTransition: 'webkitTransitionEnd',
transition: 'transitionend' // shoutout AngusCroll (https://goo.gl/pxwQGp)
};
var MAX_UID = 1000000; // shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
@ -75,17 +91,9 @@ var Util = function ($$$1) {
return false;
}
var el = document.createElement('bootstrap');
for (var name in TransitionEndEvent) {
if (typeof el.style[name] !== 'undefined') {
return {
end: TransitionEndEvent[name]
};
}
}
return false;
return {
end: 'transitionend'
};
}
function transitionEndEmulator(duration) {
@ -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)
* --------------------------------------------------------------------------
*/
@ -198,7 +206,7 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
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)
* --------------------------------------------------------------------------
*/
@ -370,7 +378,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'button';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY;
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)
* --------------------------------------------------------------------------
*/
@ -533,7 +541,7 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'carousel';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -715,7 +723,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType);
return config;
};
@ -917,10 +925,10 @@ var Carousel = function ($$$1) {
return this.each(function () {
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') {
$$$1.extend(_config, config);
_config = _extends({}, _config, config);
}
var action = typeof config === 'string' ? config : _config.slide;
@ -958,7 +966,7 @@ var Carousel = function ($$$1) {
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');
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)
* --------------------------------------------------------------------------
*/
@ -1033,7 +1041,7 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'collapse';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -1257,7 +1265,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // coerce string values
Util.typeCheckConfig(NAME, config, DefaultType);
@ -1312,7 +1320,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this);
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)) {
_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)
* --------------------------------------------------------------------------
*/
@ -1400,7 +1408,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'dropdown';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -1435,7 +1443,8 @@ var Dropdown = function ($$$1) {
DROPRIGHT: 'dropright',
DROPLEFT: 'dropleft',
MENURIGHT: 'dropdown-menu-right',
MENULEFT: 'dropdown-menu-left'
MENULEFT: 'dropdown-menu-left',
POSITION_STATIC: 'position-static'
};
var Selector = {
DATA_TOGGLE: '[data-toggle="dropdown"]',
@ -1456,11 +1465,13 @@ var Dropdown = function ($$$1) {
};
var Default = {
offset: 0,
flip: true
flip: true,
boundary: 'scrollParent'
};
var DefaultType = {
offset: '(number|string|function)',
flip: 'boolean'
flip: 'boolean',
boundary: '(string|element)'
/**
* ------------------------------------------------------------------------
* Class Definition
@ -1527,6 +1538,13 @@ var Dropdown = function ($$$1) {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
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());
@ -1582,7 +1600,7 @@ var Dropdown = function ($$$1) {
};
_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);
return config;
};
@ -1629,7 +1647,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') {
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;
};
} else {
@ -1642,6 +1660,9 @@ var Dropdown = function ($$$1) {
offset: offsetConf,
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)
* --------------------------------------------------------------------------
*/
@ -1851,7 +1872,7 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'modal';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -2042,7 +2063,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType);
return config;
};
@ -2326,7 +2347,7 @@ var Modal = function ($$$1) {
return this.each(function () {
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) {
data = new Modal(this, _config);
@ -2375,7 +2396,7 @@ var Modal = function ($$$1) {
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') {
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)
* --------------------------------------------------------------------------
*/
@ -2427,7 +2448,7 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'tooltip';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -2445,7 +2466,8 @@ var Tooltip = function ($$$1) {
placement: '(string|function)',
offset: '(number|string)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)'
fallbackPlacement: '(string|array)',
boundary: '(string|element)'
};
var AttachmentMap = {
AUTO: 'auto',
@ -2465,7 +2487,8 @@ var Tooltip = function ($$$1) {
placement: 'top',
offset: 0,
container: false,
fallbackPlacement: 'flip'
fallbackPlacement: 'flip',
boundary: 'scrollParent'
};
var HoverState = {
SHOW: 'show',
@ -2655,6 +2678,9 @@ var Tooltip = function ($$$1) {
},
arrow: {
element: Selector.ARROW
},
preventOverflow: {
boundariesElement: this.config.boundary
}
},
onCreate: function onCreate(data) {
@ -2832,7 +2858,7 @@ var Tooltip = function ($$$1) {
});
if (this.config.selector) {
this.config = $$$1.extend({}, this.config, {
this.config = _extends({}, this.config, {
trigger: 'manual',
selector: ''
});
@ -2926,7 +2952,7 @@ var Tooltip = function ($$$1) {
};
_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') {
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)
* --------------------------------------------------------------------------
*/
@ -3087,19 +3113,19 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'popover';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = $$$1.extend({}, Tooltip.Default, {
var Default = _extends({}, Tooltip.Default, {
placement: 'right',
trigger: 'click',
content: '',
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)'
});
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)
* --------------------------------------------------------------------------
*/
@ -3280,7 +3306,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'scrollspy';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -3407,7 +3433,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
if (typeof config.target !== 'string') {
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)
* --------------------------------------------------------------------------
*/
@ -3591,7 +3617,7 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'tab';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY;
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 complete = function complete() {
return _this2._transitionComplete(element, active, isTransitioning, callback);
return _this2._transitionComplete(element, active, callback);
};
if (active && isTransitioning) {
@ -3726,15 +3752,11 @@ var Tab = function ($$$1) {
} else {
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) {
$$$1(active).removeClass(ClassName.ACTIVE);
$$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
if (dropdownChild) {
@ -3752,12 +3774,8 @@ var Tab = function ($$$1) {
element.setAttribute('aria-selected', true);
}
if (isTransitioning) {
Util.reflow(element);
$$$1(element).addClass(ClassName.SHOW);
} else {
$$$1(element).removeClass(ClassName.FADE);
}
Util.reflow(element);
$$$1(element).addClass(ClassName.SHOW);
if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
@ -3868,9 +3886,9 @@ exports.Scrollspy = ScrollSpy;
exports.Tab = Tab;
exports.Tooltip = Tooltip;
return exports;
Object.defineProperty(exports, '__esModule', { value: true });
}({},jQuery,Popper));
})));
//# 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 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@ -8,7 +8,7 @@
@import "../../src/sass/bootstrap4/functions";
@import "../../src/sass/bootstrap4/variables";
@import "../../src/sass/bootstrap4/mixins";
@import "../../src/sass/bootstrap4/print";
@import "../../src/sass/bootstrap4/root";
@import "../../src/sass/bootstrap4/reboot";
@import "../../src/sass/bootstrap4/type";
@import "../../src/sass/bootstrap4/images";
@ -38,4 +38,5 @@
@import "../../src/sass/bootstrap4/tooltip";
@import "../../src/sass/bootstrap4/popover";
@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.
$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

172
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)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
var bootstrap = (function (exports,$,Popper) {
'use strict';
(function (global, factory) {
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'] : $;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
@ -25,6 +28,24 @@ function _createClass(Constructor, protoProps, staticProps) {
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) {
subClass.prototype = Object.create(superClass.prototype);
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)
* --------------------------------------------------------------------------
*/
@ -45,12 +66,7 @@ var Util = function ($$$1) {
* ------------------------------------------------------------------------
*/
var transition = false;
var MAX_UID = 1000000;
var TransitionEndEvent = {
WebkitTransition: 'webkitTransitionEnd',
transition: 'transitionend' // shoutout AngusCroll (https://goo.gl/pxwQGp)
};
var MAX_UID = 1000000; // shoutout AngusCroll (https://goo.gl/pxwQGp)
function toType(obj) {
return {}.toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
@ -75,17 +91,9 @@ var Util = function ($$$1) {
return false;
}
var el = document.createElement('bootstrap');
for (var name in TransitionEndEvent) {
if (typeof el.style[name] !== 'undefined') {
return {
end: TransitionEndEvent[name]
};
}
}
return false;
return {
end: 'transitionend'
};
}
function transitionEndEmulator(duration) {
@ -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)
* --------------------------------------------------------------------------
*/
@ -198,7 +206,7 @@ var Alert = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'alert';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.alert';
var EVENT_KEY = "." + DATA_KEY;
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)
* --------------------------------------------------------------------------
*/
@ -370,7 +378,7 @@ var Button = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'button';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.button';
var EVENT_KEY = "." + DATA_KEY;
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)
* --------------------------------------------------------------------------
*/
@ -533,7 +541,7 @@ var Carousel = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'carousel';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.carousel';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -715,7 +723,7 @@ var Carousel = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType);
return config;
};
@ -917,10 +925,10 @@ var Carousel = function ($$$1) {
return this.each(function () {
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') {
$$$1.extend(_config, config);
_config = _extends({}, _config, config);
}
var action = typeof config === 'string' ? config : _config.slide;
@ -958,7 +966,7 @@ var Carousel = function ($$$1) {
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');
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)
* --------------------------------------------------------------------------
*/
@ -1033,7 +1041,7 @@ var Collapse = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'collapse';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.collapse';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -1257,7 +1265,7 @@ var Collapse = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
config.toggle = Boolean(config.toggle); // coerce string values
Util.typeCheckConfig(NAME, config, DefaultType);
@ -1312,7 +1320,7 @@ var Collapse = function ($$$1) {
var $this = $$$1(this);
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)) {
_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)
* --------------------------------------------------------------------------
*/
@ -1400,7 +1408,7 @@ var Dropdown = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'dropdown';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.dropdown';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -1435,7 +1443,8 @@ var Dropdown = function ($$$1) {
DROPRIGHT: 'dropright',
DROPLEFT: 'dropleft',
MENURIGHT: 'dropdown-menu-right',
MENULEFT: 'dropdown-menu-left'
MENULEFT: 'dropdown-menu-left',
POSITION_STATIC: 'position-static'
};
var Selector = {
DATA_TOGGLE: '[data-toggle="dropdown"]',
@ -1456,11 +1465,13 @@ var Dropdown = function ($$$1) {
};
var Default = {
offset: 0,
flip: true
flip: true,
boundary: 'scrollParent'
};
var DefaultType = {
offset: '(number|string|function)',
flip: 'boolean'
flip: 'boolean',
boundary: '(string|element)'
/**
* ------------------------------------------------------------------------
* Class Definition
@ -1527,6 +1538,13 @@ var Dropdown = function ($$$1) {
if ($$$1(this._menu).hasClass(ClassName.MENULEFT) || $$$1(this._menu).hasClass(ClassName.MENURIGHT)) {
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());
@ -1582,7 +1600,7 @@ var Dropdown = function ($$$1) {
};
_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);
return config;
};
@ -1629,7 +1647,7 @@ var Dropdown = function ($$$1) {
if (typeof this._config.offset === 'function') {
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;
};
} else {
@ -1642,6 +1660,9 @@ var Dropdown = function ($$$1) {
offset: offsetConf,
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)
* --------------------------------------------------------------------------
*/
@ -1851,7 +1872,7 @@ var Modal = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'modal';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.modal';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -2042,7 +2063,7 @@ var Modal = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
Util.typeCheckConfig(NAME, config, DefaultType);
return config;
};
@ -2326,7 +2347,7 @@ var Modal = function ($$$1) {
return this.each(function () {
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) {
data = new Modal(this, _config);
@ -2375,7 +2396,7 @@ var Modal = function ($$$1) {
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') {
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)
* --------------------------------------------------------------------------
*/
@ -2427,7 +2448,7 @@ var Tooltip = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'tooltip';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
@ -2445,7 +2466,8 @@ var Tooltip = function ($$$1) {
placement: '(string|function)',
offset: '(number|string)',
container: '(string|element|boolean)',
fallbackPlacement: '(string|array)'
fallbackPlacement: '(string|array)',
boundary: '(string|element)'
};
var AttachmentMap = {
AUTO: 'auto',
@ -2465,7 +2487,8 @@ var Tooltip = function ($$$1) {
placement: 'top',
offset: 0,
container: false,
fallbackPlacement: 'flip'
fallbackPlacement: 'flip',
boundary: 'scrollParent'
};
var HoverState = {
SHOW: 'show',
@ -2655,6 +2678,9 @@ var Tooltip = function ($$$1) {
},
arrow: {
element: Selector.ARROW
},
preventOverflow: {
boundariesElement: this.config.boundary
}
},
onCreate: function onCreate(data) {
@ -2832,7 +2858,7 @@ var Tooltip = function ($$$1) {
});
if (this.config.selector) {
this.config = $$$1.extend({}, this.config, {
this.config = _extends({}, this.config, {
trigger: 'manual',
selector: ''
});
@ -2926,7 +2952,7 @@ var Tooltip = function ($$$1) {
};
_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') {
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)
* --------------------------------------------------------------------------
*/
@ -3087,19 +3113,19 @@ var Popover = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'popover';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.popover';
var EVENT_KEY = "." + DATA_KEY;
var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
var CLASS_PREFIX = 'bs-popover';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var Default = $$$1.extend({}, Tooltip.Default, {
var Default = _extends({}, Tooltip.Default, {
placement: 'right',
trigger: 'click',
content: '',
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)'
});
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)
* --------------------------------------------------------------------------
*/
@ -3280,7 +3306,7 @@ var ScrollSpy = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'scrollspy';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.scrollspy';
var EVENT_KEY = "." + DATA_KEY;
var DATA_API_KEY = '.data-api';
@ -3407,7 +3433,7 @@ var ScrollSpy = function ($$$1) {
_proto._getConfig = function _getConfig(config) {
config = $$$1.extend({}, Default, config);
config = _extends({}, Default, config);
if (typeof config.target !== 'string') {
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)
* --------------------------------------------------------------------------
*/
@ -3591,7 +3617,7 @@ var Tab = function ($$$1) {
* ------------------------------------------------------------------------
*/
var NAME = 'tab';
var VERSION = '4.0.0-beta.2';
var VERSION = '4.0.0-beta.3';
var DATA_KEY = 'bs.tab';
var EVENT_KEY = "." + DATA_KEY;
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 complete = function complete() {
return _this2._transitionComplete(element, active, isTransitioning, callback);
return _this2._transitionComplete(element, active, callback);
};
if (active && isTransitioning) {
@ -3726,15 +3752,11 @@ var Tab = function ($$$1) {
} else {
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) {
$$$1(active).removeClass(ClassName.ACTIVE);
$$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
if (dropdownChild) {
@ -3752,12 +3774,8 @@ var Tab = function ($$$1) {
element.setAttribute('aria-selected', true);
}
if (isTransitioning) {
Util.reflow(element);
$$$1(element).addClass(ClassName.SHOW);
} else {
$$$1(element).removeClass(ClassName.FADE);
}
Util.reflow(element);
$$$1(element).addClass(ClassName.SHOW);
if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0];
@ -3868,7 +3886,7 @@ exports.Scrollspy = ScrollSpy;
exports.Tab = Tab;
exports.Tooltip = Tooltip;
return exports;
Object.defineProperty(exports, '__esModule', { value: true });
}({},jQuery,Popper));
})));
//# 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

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

@ -44,46 +44,18 @@
}
.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 {
margin-left: 0;
&:not(:last-child):not(.dropdown-toggle) {
@include border-right-radius(0);
}
}
// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu
// immediately after it
> .btn:last-child:not(:first-child),
> .dropdown-toggle:not(:first-child) {
@include border-left-radius(0);
// Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-right-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 {
> .btn:not(:first-child),
> .btn-group:not(:first-child) > .btn {
@include border-left-radius(0);
}
}
@ -154,32 +126,14 @@
margin-left: 0;
}
> .btn {
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
&:first-child:not(:last-child) {
@include border-bottom-radius(0);
}
&:last-child:not(:first-child) {
@include border-top-radius(0);
}
// Reset rounded corners
> .btn:not(:last-child):not(.dropdown-toggle),
> .btn-group:not(:last-child) > .btn {
@include border-bottom-radius(0);
}
> .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 {
> .btn:not(:first-child),
> .btn-group:not(:first-child) > .btn {
@include border-top-radius(0);
}
}

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

@ -19,6 +19,7 @@
@include hover-focus {
text-decoration: none;
}
&:focus,
&.focus {
outline: 0;
@ -32,10 +33,19 @@
@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 {
background-image: none;
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
@include box-shadow($btn-active-box-shadow);
&:focus {
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
}
}
}

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;
opacity: .75;
}
// Opinionated: add "hand" cursor to non-disabled .close elements
&:not([disabled]):not(.disabled) {
cursor: pointer;
}
}
// Additional properties for button version

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

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

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

@ -9,9 +9,13 @@
.custom-control {
position: relative;
display: inline-flex;
display: block;
min-height: (1rem * $line-height-base);
padding-left: $custom-control-gutter;
}
.custom-control-inline {
display: inline-flex;
margin-right: $custom-control-spacer-x;
}
@ -20,51 +24,61 @@
z-index: -1; // Put the input behind the label so it doesn't overlay text
opacity: 0;
&:checked ~ .custom-control-indicator {
&:checked ~ .custom-control-label::before {
color: $custom-control-indicator-checked-color;
@include gradient-bg($custom-control-indicator-checked-bg);
@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
box-shadow: $custom-control-indicator-focus-box-shadow;
}
&:active ~ .custom-control-indicator {
&:active ~ .custom-control-label::before {
color: $custom-control-indicator-active-color;
background-color: $custom-control-indicator-active-bg;
@include box-shadow($custom-control-indicator-active-box-shadow);
}
&:disabled {
~ .custom-control-indicator {
background-color: $custom-control-indicator-disabled-bg;
}
~ .custom-control-label {
color: $custom-control-label-disabled-color;
~ .custom-control-description {
color: $custom-control-description-disabled-color;
&::before {
background-color: $custom-control-indicator-disabled-bg;
}
}
}
}
// 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 {
position: absolute;
top: (($line-height-base - $custom-control-indicator-size) / 2);
left: 0;
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
pointer-events: none;
user-select: none;
background-color: $custom-control-indicator-bg;
@include box-shadow($custom-control-indicator-box-shadow);
.custom-control-label {
margin-bottom: 0;
// Background-color and (when enabled) gradient
&::before {
position: absolute;
top: (($line-height-base - $custom-control-indicator-size) / 2);
left: 0;
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
pointer-events: none;
content: "";
user-select: none;
background-color: $custom-control-indicator-bg;
@include box-shadow($custom-control-indicator-box-shadow);
}
// Foreground (icon)
&::after {
position: absolute;
top: (($line-height-base - $custom-control-indicator-size) / 2);
left: 0;
display: block;
width: $custom-control-indicator-size;
height: $custom-control-indicator-size;
@ -75,28 +89,31 @@
}
}
// Checkboxes
//
// Tweak just a few things for checkboxes.
.custom-checkbox {
.custom-control-indicator {
.custom-control-label::before {
@include border-radius($custom-checkbox-indicator-border-radius);
}
.custom-control-input:checked ~ .custom-control-indicator {
@include gradient-bg($custom-control-indicator-checked-bg);
.custom-control-input:checked ~ .custom-control-label {
&::before {
@include gradient-bg($custom-control-indicator-checked-bg);
}
&::after {
background-image: $custom-checkbox-indicator-icon-checked;
}
}
.custom-control-input:indeterminate ~ .custom-control-indicator {
@include gradient-bg($custom-checkbox-indicator-indeterminate-bg);
@include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);
.custom-control-input:indeterminate ~ .custom-control-label {
&::before {
@include gradient-bg($custom-checkbox-indicator-indeterminate-bg);
@include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow);
}
&::after {
background-image: $custom-checkbox-indicator-icon-indeterminate;
}
}
@ -107,34 +124,16 @@
// Tweak just a few things for radios.
.custom-radio {
.custom-control-indicator {
.custom-control-label::before {
border-radius: $custom-radio-indicator-border-radius;
}
.custom-control-input:checked ~ .custom-control-indicator {
@include gradient-bg($custom-control-indicator-checked-bg);
.custom-control-input:checked ~ .custom-control-label {
&::before {
background-image: $custom-radio-indicator-icon-checked;
@include gradient-bg($custom-control-indicator-checked-bg);
}
}
}
// 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;
&::after {
background-image: $custom-radio-indicator-icon-checked;
}
}
}
@ -148,7 +147,7 @@
.custom-select {
display: inline-block;
max-width: 100%;
width: 100%;
height: $input-height;
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;
@ -220,14 +219,15 @@
.custom-file {
position: relative;
display: inline-block;
max-width: 100%;
width: 100%;
height: $custom-file-height;
margin-bottom: 0;
}
.custom-file-input {
min-width: $custom-file-width;
max-width: 100%;
position: relative;
z-index: 2;
width: 100%;
height: $custom-file-height;
margin: 0;
opacity: 0;
@ -240,49 +240,43 @@
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;
top: 0;
right: 0;
left: 0;
z-index: 1;
height: $custom-file-height;
padding: $custom-file-padding-y $custom-file-padding-x;
line-height: $custom-file-line-height;
color: $custom-file-color;
pointer-events: none;
user-select: none;
background-color: $custom-file-bg;
border: $custom-file-border-width solid $custom-file-border-color;
@include border-radius($custom-file-border-radius);
@include box-shadow($custom-file-box-shadow);
@each $lang, $text in map-get($custom-file-text, placeholder) {
&:lang(#{$lang}):empty::after {
content: $text;
}
}
&::before {
&::after {
position: absolute;
top: -$custom-file-border-width;
right: -$custom-file-border-width;
bottom: -$custom-file-border-width;
z-index: 1;
top: 0;
right: 0;
bottom: 0;
z-index: 3;
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;
line-height: $custom-file-line-height;
color: $custom-file-button-color;
content: "Browse";
@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);
}
@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-range {
display: block;
width: 100%;
}
@ -83,12 +84,13 @@ select.form-control {
// Labels
//
// For use with horizontal and inline forms, when you need the label text to
// align with the form controls.
// For use with horizontal and inline forms, when you need the label (or legend)
// text to align with the form controls.
.col-form-label {
padding-top: 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;
}
@ -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
//
// Apply class to a readonly input to make it appear like regular plain
@ -220,33 +208,35 @@ select.form-control-lg {
.form-check {
position: relative;
display: block;
margin-bottom: $form-check-margin-bottom;
&.disabled {
.form-check-label {
color: $text-muted;
}
}
}
.form-check-label {
padding-left: $form-check-input-gutter;
margin-bottom: 0; // Override default `<label>` bottom margin
}
.form-check-input {
position: absolute;
margin-top: $form-check-input-margin-y;
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 {
display: inline-block;
display: inline-flex;
align-items: center;
padding-left: 0; // Override base .form-check
margin-right: $form-check-inline-margin-x;
.form-check-label {
vertical-align: middle;
// Undo .form-check-input defaults and add some `margin-right`.
.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;
justify-content: center;
width: auto;
margin-top: 0;
margin-bottom: 0;
}
.form-check-label {
padding-left: 0;
}
.form-check-input {
@ -336,23 +322,12 @@ select.form-control-lg {
margin-left: 0;
}
// Custom form controls
.custom-control {
display: flex;
align-items: center;
justify-content: center;
padding-left: 0;
}
.custom-control-indicator {
position: static;
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;
.custom-control-label {
margin-bottom: 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;
@if ($yiq >= 150) {
@if ($yiq >= $yiq-contrasted-threshold) {
@return $yiq-text-dark;
} @else {
@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

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

@ -7,77 +7,87 @@
.input-group {
position: relative;
display: flex;
flex-wrap: wrap; // For form validation feedback
align-items: stretch;
width: 100%;
.form-control {
// Ensure that the input is always above the *appended* addon button for
// proper border colors.
position: relative;
z-index: 1;
.form-control,
.custom-select,
.custom-file {
position: relative; // For focus state's z-index
flex: 1 1 auto;
// 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.
width: 1%;
margin-bottom: 0;
// Bring the "active" form control to the front
@include hover-focus-active {
z-index: 2;
// Bring the "active" form control to the top of surrounding elements
&:focus {
z-index: 3;
}
+ .form-control {
margin-left: -$input-border-width;
}
}
}
.input-group-addon,
.input-group-btn,
.input-group .form-control,
.input-group .custom-select,
.input-group .custom-file {
display: flex;
align-items: center;
.form-control,
.custom-select {
&:not(:last-child) { @include border-right-radius(0); }
&:not(:first-child) { @include border-left-radius(0); }
}
&:not(:first-child):not(:last-child) {
@include border-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); }
}
}
.input-group .custom-file {
// 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;
}
.btn + .btn,
.btn + .input-group-text,
.input-group-text + .input-group-text,
.input-group-text + .btn {
margin-left: -$input-border-width;
}
}
.input-group .custom-select,
.input-group .custom-file {
width: 100%;
}
.input-group-prepend { margin-right: -$input-border-width; }
.input-group-append { margin-left: -$input-border-width; }
.input-group-addon,
.input-group-btn {
white-space: nowrap;
}
// Sizing options
// Textual addons
//
// Remix the default form control sizing classes into new ones for easier
// manipulation.
// Serves as a catch-all element for any text or radio/checkbox input you wish
// to prepend or append to an input.
.input-group-lg > .form-control,
.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 {
.input-group-text {
padding: $input-padding-y $input-padding-x;
margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom
font-size: $font-size-base; // Match inputs
@ -85,23 +95,11 @@
line-height: $input-line-height;
color: $input-group-addon-color;
text-align: center;
white-space: nowrap;
background-color: $input-group-addon-bg;
border: $input-border-width solid $input-group-addon-border-color;
@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.
input[type="radio"],
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 .custom-select:not(:last-child),
.input-group .custom-file:not(:last-child) .custom-file-control::before,
.input-group-addon:not(:last-child),
.input-group-btn:not(:last-child) > .btn,
.input-group-btn:not(:last-child) > .btn-group > .btn,
.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-lg > .form-control,
.input-group-lg > .input-group-prepend > .input-group-text,
.input-group-lg > .input-group-append > .input-group-text,
.input-group-lg > .input-group-prepend > .btn,
.input-group-lg > .input-group-append > .btn {
@extend .form-control-lg;
}
.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);
}
.input-group-addon:not(:last-child) {
border-right: 0;
}
.input-group .form-control:not(:first-child),
.input-group .custom-select: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 {
.input-group > .input-group-append > .btn,
.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 > .input-group-prepend:first-child > .btn:not(:first-child),
.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
@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 {
z-index: 1; // Place hover/active items above their siblings for proper border styling
text-decoration: none;
}
@ -70,7 +71,7 @@
// Include both here for `<a>`s and `<button>`s
&.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;
background-color: $list-group-active-bg;
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 {
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

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

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

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

@ -17,157 +17,146 @@
@include border-radius($border-radius-lg);
@include box-shadow($popover-box-shadow);
// Arrows
//
// .arrow is outer, .arrow::after is inner
.arrow {
position: absolute;
display: block;
width: $popover-arrow-width;
height: $popover-arrow-height;
margin: 0 $border-radius-lg;
&::before,
&::after {
position: absolute;
display: block;
content: "";
border-color: transparent;
border-style: solid;
}
}
}
.bs-popover-top {
margin-bottom: $popover-arrow-height;
.arrow {
bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
}
.arrow::before,
.arrow::after {
position: absolute;
display: block;
border-color: transparent;
border-style: solid;
border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
}
.arrow::before {
content: "";
border-width: $popover-arrow-width;
bottom: 0;
border-top-color: $popover-arrow-outer-color;
}
.arrow::after {
bottom: $popover-border-width;
border-top-color: $popover-arrow-color;
}
}
.bs-popover-right {
margin-left: $popover-arrow-height;
.arrow {
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::after {
border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
}
.arrow::before {
left: 0;
border-right-color: $popover-arrow-outer-color;
}
.arrow::after {
left: $popover-border-width;
border-right-color: $popover-arrow-color;
}
}
.bs-popover-bottom {
margin-top: $popover-arrow-height;
.arrow {
top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
}
.arrow::before,
.arrow::after {
border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
}
.arrow::before {
top: 0;
border-bottom-color: $popover-arrow-outer-color;
}
.arrow::after {
top: $popover-border-width;
border-bottom-color: $popover-arrow-color;
}
// This will remove the popover-header's border just below the arrow
.popover-header::before {
position: absolute;
top: 0;
left: 50%;
display: block;
width: $popover-arrow-width;
margin-left: ($popover-arrow-width / -2);
content: "";
border-width: $popover-arrow-width;
border-bottom: $popover-border-width solid $popover-header-bg;
}
}
.bs-popover-left {
margin-right: $popover-arrow-height;
.arrow {
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
}
// Popover directions
&.bs-popover-top {
margin-bottom: $popover-arrow-width;
.arrow {
bottom: 0;
}
.arrow::before,
.arrow::after {
border-bottom-width: 0;
}
.arrow::before {
bottom: -$popover-arrow-width;
margin-left: -$popover-arrow-width;
border-top-color: $popover-arrow-outer-color;
}
.arrow::after {
bottom: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1);
margin-left: -$popover-arrow-width;
border-top-color: $popover-arrow-color;
}
.arrow::before,
.arrow::after {
border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
}
&.bs-popover-right {
margin-left: $popover-arrow-width;
.arrow {
left: 0;
}
.arrow::before,
.arrow::after {
margin-top: -$popover-arrow-width;
border-left-width: 0;
}
.arrow::before {
left: -$popover-arrow-width;
border-right-color: $popover-arrow-outer-color;
}
.arrow::after {
left: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1);
border-right-color: $popover-arrow-color;
}
.arrow::before {
right: 0;
border-left-color: $popover-arrow-outer-color;
}
&.bs-popover-bottom {
margin-top: $popover-arrow-width;
.arrow {
top: 0;
}
.arrow::before,
.arrow::after {
margin-left: -$popover-arrow-width;
border-top-width: 0;
}
.arrow::before {
top: -$popover-arrow-width;
border-bottom-color: $popover-arrow-outer-color;
}
.arrow::after {
top: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1);
border-bottom-color: $popover-arrow-color;
}
// This will remove the popover-header's border just below the arrow
.popover-header::before {
position: absolute;
top: 0;
left: 50%;
display: block;
width: 20px;
margin-left: -10px;
content: "";
border-bottom: $popover-border-width solid $popover-header-bg;
}
.arrow::after {
right: $popover-border-width;
border-left-color: $popover-arrow-color;
}
}
&.bs-popover-left {
margin-right: $popover-arrow-width;
.arrow {
right: 0;
}
.arrow::before,
.arrow::after {
margin-top: -$popover-arrow-width;
border-right-width: 0;
}
.arrow::before {
right: -$popover-arrow-width;
border-left-color: $popover-arrow-outer-color;
}
.arrow::after {
right: calc((#{$popover-arrow-width} - #{$popover-border-width}) * -1);
border-left-color: $popover-arrow-color;
}
.bs-popover-auto {
&[x-placement^="top"] {
@extend .bs-popover-top;
}
&.bs-popover-auto {
&[x-placement^="top"] {
@extend .bs-popover-top;
}
&[x-placement^="right"] {
@extend .bs-popover-right;
}
&[x-placement^="bottom"] {
@extend .bs-popover-bottom;
}
&[x-placement^="left"] {
@extend .bs-popover-left;
}
&[x-placement^="right"] {
@extend .bs-popover-right;
}
&[x-placement^="bottom"] {
@extend .bs-popover-bottom;
}
&[x-placement^="left"] {
@extend .bs-popover-left;
}
}

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 {
display: list-item; // Add the correct display in all browsers
cursor: pointer;
}
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
// Prevent double border on horizontal scroll due to use of `display: block;`
&.table-bordered {
> .table-bordered {
border: 0;
}
}

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

@ -19,80 +19,88 @@
display: block;
width: $tooltip-arrow-width;
height: $tooltip-arrow-height;
}
.arrow::before {
position: absolute;
border-color: transparent;
border-style: solid;
}
&.bs-tooltip-top {
padding: $tooltip-arrow-width 0;
.arrow {
bottom: 0;
}
.arrow::before {
margin-left: -$tooltip-arrow-width;
&::before {
position: absolute;
content: "";
border-width: $tooltip-arrow-width $tooltip-arrow-width 0;
border-color: transparent;
border-style: solid;
}
}
}
.bs-tooltip-top {
padding: $tooltip-arrow-height 0;
.arrow {
bottom: 0;
&::before {
top: 0;
border-width: $tooltip-arrow-height ($tooltip-arrow-width / 2) 0;
border-top-color: $tooltip-arrow-color;
}
}
&.bs-tooltip-right {
padding: 0 $tooltip-arrow-width;
.arrow {
left: 0;
}
}
.arrow::before {
margin-top: -$tooltip-arrow-width;
content: "";
border-width: $tooltip-arrow-width $tooltip-arrow-width $tooltip-arrow-width 0;
.bs-tooltip-right {
padding: 0 $tooltip-arrow-height;
.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;
}
}
&.bs-tooltip-bottom {
padding: $tooltip-arrow-width 0;
.arrow {
top: 0;
}
}
.arrow::before {
margin-left: -$tooltip-arrow-width;
content: "";
border-width: 0 $tooltip-arrow-width $tooltip-arrow-width;
.bs-tooltip-bottom {
padding: $tooltip-arrow-height 0;
.arrow {
top: 0;
&::before {
bottom: 0;
border-width: 0 ($tooltip-arrow-width / 2) $tooltip-arrow-height;
border-bottom-color: $tooltip-arrow-color;
}
}
&.bs-tooltip-left {
padding: 0 $tooltip-arrow-width;
.arrow {
right: 0;
}
}
.arrow::before {
right: 0;
margin-top: -($tooltip-arrow-width);
content: "";
border-width: $tooltip-arrow-width 0 $tooltip-arrow-width $tooltip-arrow-width;
.bs-tooltip-left {
padding: 0 $tooltip-arrow-height;
.arrow {
right: 0;
width: $tooltip-arrow-height;
height: $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;
}
}
&.bs-tooltip-auto {
&[x-placement^="top"] {
@extend .bs-tooltip-top;
}
&[x-placement^="right"] {
@extend .bs-tooltip-right;
}
&[x-placement^="bottom"] {
@extend .bs-tooltip-bottom;
}
&[x-placement^="left"] {
@extend .bs-tooltip-left;
}
}
.bs-tooltip-auto {
&[x-placement^="top"] {
@extend .bs-tooltip-top;
}
&[x-placement^="right"] {
@extend .bs-tooltip-right;
}
&[x-placement^="bottom"] {
@extend .bs-tooltip-bottom;
}
&[x-placement^="left"] {
@extend .bs-tooltip-left;
}
}

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

39
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
$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.
$yiq-text-dark: $gray-900 !default;
$yiq-text-light: $white !default;
// Options
//
// 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-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-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-check-margin-bottom: .5rem !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-inline-margin-x: .75rem !default;
$form-check-inline-input-margin-x: .3125rem !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;
$custom-control-gutter: 1.5rem !default;
$custom-control-spacer-y: .25rem !default;
$custom-control-spacer-x: 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-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-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-file-height: $input-height !default;
$custom-file-width: 14rem !default;
$custom-file-focus-border-color: $input-focus-border-color !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-bg: $input-group-addon-bg !default;
$custom-file-text: (
placeholder: (
en: "Choose file..."
),
button-label: (
en: "Browse"
)
en: "Browse"
) !default;
@ -680,8 +675,8 @@ $tooltip-padding-y: .25rem !default;
$tooltip-padding-x: .5rem !default;
$tooltip-margin: 0 !default;
$tooltip-arrow-width: .4rem !default;
$tooltip-arrow-height: $tooltip-arrow-width !default;
$tooltip-arrow-width: .8rem !default;
$tooltip-arrow-height: .4rem !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-x: $popover-header-padding-x !default;
$popover-arrow-width: .8rem !default;
$popover-arrow-height: .4rem !default;
$popover-arrow-width: 1rem !default;
$popover-arrow-height: .5rem !default;
$popover-arrow-color: $popover-bg !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-font-size: 90% !default;
$code-padding-y: .2rem !default;
$code-padding-x: .4rem !default;
$code-color: #bd4147 !default;
$code-bg: $gray-100 !default;
$code-font-size: 87.5% !default;
$code-color: $pink !default;
$kbd-padding-y: .2rem !default;
$kbd-padding-x: .4rem !default;
$kbd-font-size: $code-font-size !default;
$kbd-color: $white !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 Twitter, Inc.
* 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 Twitter, Inc.
* 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 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@ -9,7 +9,6 @@
@import "variables";
@import "mixins";
@import "root";
@import "print";
@import "reboot";
@import "type";
@import "images";
@ -40,3 +39,4 @@
@import "popover";
@import "carousel";
@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} {
background-color: $color !important;
}
a#{$parent} {
a#{$parent},
button#{$parent} {
@include hover-focus {
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

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

@ -42,11 +42,13 @@
}
border-color: $active-border;
// Avoid using mixin so we can pass custom focus shadow properly
@if $enable-shadows {
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);
} @else {
box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);
&:focus {
// Avoid using mixin so we can pass custom focus shadow properly
@if $enable-shadows {
box-shadow: $btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($border, .5);
} @else {
box-shadow: 0 0 0 $btn-focus-width rgba($border, .5);
}
}
}
}

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

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

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