MDL-70311 theme_boost: upgrade bootstrap to version 4.6.0

This commit is contained in:
Ilya Tregubov 2021-03-17 11:54:04 +02:00
parent 295901e6a1
commit 6fb84d6003
85 changed files with 1147 additions and 979 deletions

View file

@ -83,7 +83,6 @@ theme/boost/amd/src/bootstrap/button.js
theme/boost/amd/src/bootstrap/carousel.js theme/boost/amd/src/bootstrap/carousel.js
theme/boost/amd/src/bootstrap/collapse.js theme/boost/amd/src/bootstrap/collapse.js
theme/boost/amd/src/bootstrap/dropdown.js theme/boost/amd/src/bootstrap/dropdown.js
theme/boost/amd/src/bootstrap/index.js
theme/boost/amd/src/bootstrap/modal.js theme/boost/amd/src/bootstrap/modal.js
theme/boost/amd/src/bootstrap/popover.js theme/boost/amd/src/bootstrap/popover.js
theme/boost/amd/src/bootstrap/tools/sanitizer.js theme/boost/amd/src/bootstrap/tools/sanitizer.js
@ -92,4 +91,5 @@ theme/boost/amd/src/bootstrap/tab.js
theme/boost/amd/src/bootstrap/toast.js theme/boost/amd/src/bootstrap/toast.js
theme/boost/amd/src/bootstrap/tooltip.js theme/boost/amd/src/bootstrap/tooltip.js
theme/boost/amd/src/bootstrap/util.js theme/boost/amd/src/bootstrap/util.js
theme/boost/amd/src/index.js
theme/boost/scss/fontawesome/ theme/boost/scss/fontawesome/

View file

@ -84,7 +84,6 @@ theme/boost/amd/src/bootstrap/button.js
theme/boost/amd/src/bootstrap/carousel.js theme/boost/amd/src/bootstrap/carousel.js
theme/boost/amd/src/bootstrap/collapse.js theme/boost/amd/src/bootstrap/collapse.js
theme/boost/amd/src/bootstrap/dropdown.js theme/boost/amd/src/bootstrap/dropdown.js
theme/boost/amd/src/bootstrap/index.js
theme/boost/amd/src/bootstrap/modal.js theme/boost/amd/src/bootstrap/modal.js
theme/boost/amd/src/bootstrap/popover.js theme/boost/amd/src/bootstrap/popover.js
theme/boost/amd/src/bootstrap/tools/sanitizer.js theme/boost/amd/src/bootstrap/tools/sanitizer.js
@ -93,4 +92,5 @@ theme/boost/amd/src/bootstrap/tab.js
theme/boost/amd/src/bootstrap/toast.js theme/boost/amd/src/bootstrap/toast.js
theme/boost/amd/src/bootstrap/tooltip.js theme/boost/amd/src/bootstrap/tooltip.js
theme/boost/amd/src/bootstrap/util.js theme/boost/amd/src/bootstrap/util.js
theme/boost/amd/src/index.js
theme/boost/scss/fontawesome/ theme/boost/scss/fontawesome/

View file

@ -1,2 +1,2 @@
define ("theme_boost/bootstrap/alert",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function f(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function g(a,b,c){if(b)f(a.prototype,b);if(c)f(a,c);return a}var h="bs.alert",i=".".concat(h),j=b.default.fn.alert,k="close".concat(i),l="closed".concat(i),m="click".concat(i).concat(".data-api"),n=function(){function a(b){e(this,a);this._element=b}g(a,[{key:"close",value:function close(a){var b=this._element;if(a){b=this._getRootElement(a)}var c=this._triggerCloseEvent(b);if(c.isDefaultPrevented()){return}this._removeElement(b)}},{key:"dispose",value:function dispose(){b.default.removeData(this._element,h);this._element=null}},{key:"_getRootElement",value:function _getRootElement(a){var d=c.default.getSelectorFromElement(a),e=!1;if(d){e=document.querySelector(d)}if(!e){e=(0,b.default)(a).closest(".".concat("alert"))[0]}return e}},{key:"_triggerCloseEvent",value:function _triggerCloseEvent(a){var c=b.default.Event(k);(0,b.default)(a).trigger(c);return c}},{key:"_removeElement",value:function _removeElement(a){var d=this;(0,b.default)(a).removeClass("show");if(!(0,b.default)(a).hasClass("fade")){this._destroyElement(a);return}var e=c.default.getTransitionDurationFromElement(a);(0,b.default)(a).one(c.default.TRANSITION_END,function(b){return d._destroyElement(a,b)}).emulateTransitionEnd(e)}},{key:"_destroyElement",value:function _destroyElement(a){(0,b.default)(a).detach().trigger(l).remove()}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this),e=d.data(h);if(!e){e=new a(this);d.data(h,e)}if("close"===c){e[c](this)}})}},{key:"_handleDismiss",value:function _handleDismiss(a){return function(b){if(b){b.preventDefault()}a.close(this)}}},{key:"VERSION",get:function get(){return"4.5.0"}}]);return a}();(0,b.default)(document).on(m,"[data-dismiss=\"alert\"]",n._handleDismiss(new n));b.default.fn.alert=n._jQueryInterface;b.default.fn.alert.Constructor=n;b.default.fn.alert.noConflict=function(){b.default.fn.alert=j;return n._jQueryInterface};a.default=n;return a.default}); define ("theme_boost/bootstrap/alert",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function f(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function g(a,b,c){if(b)f(a.prototype,b);if(c)f(a,c);return a}var h="bs.alert",i=".".concat(h),j=b.default.fn.alert,k="close".concat(i),l="closed".concat(i),m="click".concat(i).concat(".data-api"),n=function(){function a(b){e(this,a);this._element=b}g(a,[{key:"close",value:function close(a){var b=this._element;if(a){b=this._getRootElement(a)}var c=this._triggerCloseEvent(b);if(c.isDefaultPrevented()){return}this._removeElement(b)}},{key:"dispose",value:function dispose(){b.default.removeData(this._element,h);this._element=null}},{key:"_getRootElement",value:function _getRootElement(a){var d=c.default.getSelectorFromElement(a),e=!1;if(d){e=document.querySelector(d)}if(!e){e=(0,b.default)(a).closest(".".concat("alert"))[0]}return e}},{key:"_triggerCloseEvent",value:function _triggerCloseEvent(a){var c=b.default.Event(k);(0,b.default)(a).trigger(c);return c}},{key:"_removeElement",value:function _removeElement(a){var d=this;(0,b.default)(a).removeClass("show");if(!(0,b.default)(a).hasClass("fade")){this._destroyElement(a);return}var e=c.default.getTransitionDurationFromElement(a);(0,b.default)(a).one(c.default.TRANSITION_END,function(b){return d._destroyElement(a,b)}).emulateTransitionEnd(e)}},{key:"_destroyElement",value:function _destroyElement(a){(0,b.default)(a).detach().trigger(l).remove()}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this),e=d.data(h);if(!e){e=new a(this);d.data(h,e)}if("close"===c){e[c](this)}})}},{key:"_handleDismiss",value:function _handleDismiss(a){return function(b){if(b){b.preventDefault()}a.close(this)}}},{key:"VERSION",get:function get(){return"4.6.0"}}]);return a}();(0,b.default)(document).on(m,"[data-dismiss=\"alert\"]",n._handleDismiss(new n));b.default.fn.alert=n._jQueryInterface;b.default.fn.alert.Constructor=n;b.default.fn.alert.noConflict=function(){b.default.fn.alert=j;return n._jQueryInterface};a.default=n;return a.default});
//# sourceMappingURL=alert.min.js.map //# sourceMappingURL=alert.min.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
define ("theme_boost/bootstrap/button",["exports","jquery"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=function(a){return a&&a.__esModule?a:{default:a}}(b);function c(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function d(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function e(a,b,c){if(b)d(a.prototype,b);if(c)d(a,c);return a}var f="bs.button",g=".".concat(f),h=".data-api",i=b.default.fn.button,j="active",k="[data-toggle^=\"button\"]",l="input:not([type=\"hidden\"])",m=".btn",n="click".concat(g).concat(h),o="focus".concat(g).concat(h," ")+"blur".concat(g).concat(h),p="load".concat(g).concat(h),q=function(){function a(b){c(this,a);this._element=b}e(a,[{key:"toggle",value:function toggle(){var a=!0,c=!0,d=(0,b.default)(this._element).closest("[data-toggle=\"buttons\"]")[0];if(d){var e=this._element.querySelector(l);if(e){if("radio"===e.type){if(e.checked&&this._element.classList.contains(j)){a=!1}else{var f=d.querySelector(".active");if(f){(0,b.default)(f).removeClass(j)}}}if(a){if("checkbox"===e.type||"radio"===e.type){e.checked=!this._element.classList.contains(j)}(0,b.default)(e).trigger("change")}e.focus();c=!1}}if(!(this._element.hasAttribute("disabled")||this._element.classList.contains("disabled"))){if(c){this._element.setAttribute("aria-pressed",!this._element.classList.contains(j))}if(a){(0,b.default)(this._element).toggleClass(j)}}}},{key:"dispose",value:function dispose(){b.default.removeData(this._element,f);this._element=null}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this).data(f);if(!d){d=new a(this);(0,b.default)(this).data(f,d)}if("toggle"===c){d[c]()}})}},{key:"VERSION",get:function get(){return"4.5.0"}}]);return a}();(0,b.default)(document).on(n,k,function(a){var c=a.target,d=c;if(!(0,b.default)(c).hasClass("btn")){c=(0,b.default)(c).closest(m)[0]}if(!c||c.hasAttribute("disabled")||c.classList.contains("disabled")){a.preventDefault()}else{var e=c.querySelector(l);if(e&&(e.hasAttribute("disabled")||e.classList.contains("disabled"))){a.preventDefault();return}if("LABEL"===d.tagName&&e&&"checkbox"===e.type){a.preventDefault()}q._jQueryInterface.call((0,b.default)(c),"toggle")}}).on(o,k,function(a){var c=(0,b.default)(a.target).closest(m)[0];(0,b.default)(c).toggleClass("focus",/^focus(in)?$/.test(a.type))});(0,b.default)(window).on(p,function(){for(var a=[].slice.call(document.querySelectorAll("[data-toggle=\"buttons\"] .btn")),b=0,c=a.length;b<c;b++){var d=a[b],e=d.querySelector(l);if(e.checked||e.hasAttribute("checked")){d.classList.add(j)}else{d.classList.remove(j)}}a=[].slice.call(document.querySelectorAll("[data-toggle=\"button\"]"));for(var f=0,g=a.length,h;f<g;f++){h=a[f];if("true"===h.getAttribute("aria-pressed")){h.classList.add(j)}else{h.classList.remove(j)}}});b.default.fn.button=q._jQueryInterface;b.default.fn.button.Constructor=q;b.default.fn.button.noConflict=function(){b.default.fn.button=i;return q._jQueryInterface};a.default=q;return a.default}); define ("theme_boost/bootstrap/button",["exports","jquery"],function(a,b){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=function(a){return a&&a.__esModule?a:{default:a}}(b);function c(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function d(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function e(a,b,c){if(b)d(a.prototype,b);if(c)d(a,c);return a}var f="bs.button",g=".".concat(f),h=".data-api",i=b.default.fn.button,j="active",k="[data-toggle^=\"button\"]",l="input:not([type=\"hidden\"])",m=".btn",n="click".concat(g).concat(h),o="focus".concat(g).concat(h," ")+"blur".concat(g).concat(h),p="load".concat(g).concat(h),q=function(){function a(b){c(this,a);this._element=b;this.shouldAvoidTriggerChange=!1}e(a,[{key:"toggle",value:function toggle(){var a=!0,c=!0,d=(0,b.default)(this._element).closest("[data-toggle=\"buttons\"]")[0];if(d){var e=this._element.querySelector(l);if(e){if("radio"===e.type){if(e.checked&&this._element.classList.contains(j)){a=!1}else{var f=d.querySelector(".active");if(f){(0,b.default)(f).removeClass(j)}}}if(a){if("checkbox"===e.type||"radio"===e.type){e.checked=!this._element.classList.contains(j)}if(!this.shouldAvoidTriggerChange){(0,b.default)(e).trigger("change")}}e.focus();c=!1}}if(!(this._element.hasAttribute("disabled")||this._element.classList.contains("disabled"))){if(c){this._element.setAttribute("aria-pressed",!this._element.classList.contains(j))}if(a){(0,b.default)(this._element).toggleClass(j)}}}},{key:"dispose",value:function dispose(){b.default.removeData(this._element,f);this._element=null}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c,d){return this.each(function(){var e=(0,b.default)(this),g=e.data(f);if(!g){g=new a(this);e.data(f,g)}g.shouldAvoidTriggerChange=d;if("toggle"===c){g[c]()}})}},{key:"VERSION",get:function get(){return"4.6.0"}}]);return a}();(0,b.default)(document).on(n,k,function(a){var c=a.target,d=c;if(!(0,b.default)(c).hasClass("btn")){c=(0,b.default)(c).closest(m)[0]}if(!c||c.hasAttribute("disabled")||c.classList.contains("disabled")){a.preventDefault()}else{var e=c.querySelector(l);if(e&&(e.hasAttribute("disabled")||e.classList.contains("disabled"))){a.preventDefault();return}if("INPUT"===d.tagName||"LABEL"!==c.tagName){q._jQueryInterface.call((0,b.default)(c),"toggle","INPUT"===d.tagName)}}}).on(o,k,function(a){var c=(0,b.default)(a.target).closest(m)[0];(0,b.default)(c).toggleClass("focus",/^focus(in)?$/.test(a.type))});(0,b.default)(window).on(p,function(){for(var a=[].slice.call(document.querySelectorAll("[data-toggle=\"buttons\"] .btn")),b=0,c=a.length;b<c;b++){var d=a[b],e=d.querySelector(l);if(e.checked||e.hasAttribute("checked")){d.classList.add(j)}else{d.classList.remove(j)}}a=[].slice.call(document.querySelectorAll("[data-toggle=\"button\"]"));for(var f=0,g=a.length,h;f<g;f++){h=a[f];if("true"===h.getAttribute("aria-pressed")){h.classList.add(j)}else{h.classList.remove(j)}}});b.default.fn.button=q._jQueryInterface;b.default.fn.button.Constructor=q;b.default.fn.button.noConflict=function(){b.default.fn.button=i;return q._jQueryInterface};a.default=q;return a.default});
//# sourceMappingURL=button.min.js.map //# sourceMappingURL=button.min.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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,2 +0,0 @@
define ("theme_boost/bootstrap/index",["exports","./alert","./button","./carousel","./collapse","./dropdown","./modal","./popover","./scrollspy","./tab","./toast","./tooltip","./util"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){"use strict";Object.defineProperty(a,"__esModule",{value:!0});Object.defineProperty(a,"Alert",{enumerable:!0,get:function get(){return b.default}});Object.defineProperty(a,"Button",{enumerable:!0,get:function get(){return c.default}});Object.defineProperty(a,"Carousel",{enumerable:!0,get:function get(){return d.default}});Object.defineProperty(a,"Collapse",{enumerable:!0,get:function get(){return e.default}});Object.defineProperty(a,"Dropdown",{enumerable:!0,get:function get(){return f.default}});Object.defineProperty(a,"Modal",{enumerable:!0,get:function get(){return g.default}});Object.defineProperty(a,"Popover",{enumerable:!0,get:function get(){return h.default}});Object.defineProperty(a,"Scrollspy",{enumerable:!0,get:function get(){return i.default}});Object.defineProperty(a,"Tab",{enumerable:!0,get:function get(){return j.default}});Object.defineProperty(a,"Toast",{enumerable:!0,get:function get(){return k.default}});Object.defineProperty(a,"Tooltip",{enumerable:!0,get:function get(){return l.default}});Object.defineProperty(a,"Util",{enumerable:!0,get:function get(){return m.default}});b=n(b);c=n(c);d=n(d);e=n(e);f=n(f);g=n(g);h=n(h);i=n(i);j=n(j);k=n(k);l=n(l);m=n(m);function n(a){return a&&a.__esModule?a:{default:a}}});
//# sourceMappingURL=index.min.js.map

View file

@ -1 +0,0 @@
{"version":3,"sources":["../../src/bootstrap/index.js"],"names":[],"mappings":"kzCAAA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,O","sourcesContent":["import Alert from './alert'\nimport Button from './button'\nimport Carousel from './carousel'\nimport Collapse from './collapse'\nimport Dropdown from './dropdown'\nimport Modal from './modal'\nimport Popover from './popover'\nimport Scrollspy from './scrollspy'\nimport Tab from './tab'\nimport Toast from './toast'\nimport Tooltip from './tooltip'\nimport Util from './util'\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.5.0): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nexport {\n Util,\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Popover,\n Scrollspy,\n Tab,\n Toast,\n Tooltip\n}\n"],"file":"index.min.js"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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,2 +1,2 @@
define ("theme_boost/bootstrap/tab",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function f(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function g(a,b,c){if(b)f(a.prototype,b);if(c)f(a,c);return a}var h="bs.tab",i=".".concat(h),j=b.default.fn.tab,k="hide".concat(i),l="hidden".concat(i),m="show".concat(i),n="shown".concat(i),o="click".concat(i).concat(".data-api"),p="active",q="fade",r="show",s=".active",t="> li > .active",u=function(){function a(b){e(this,a);this._element=b}g(a,[{key:"show",value:function show(){var a=this;if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&(0,b.default)(this._element).hasClass(p)||(0,b.default)(this._element).hasClass("disabled")){return}var d,e,f=(0,b.default)(this._element).closest(".nav, .list-group")[0],g=c.default.getSelectorFromElement(this._element);if(f){var o="UL"===f.nodeName||"OL"===f.nodeName?t:s;e=b.default.makeArray((0,b.default)(f).find(o));e=e[e.length-1]}var h=b.default.Event(k,{relatedTarget:this._element}),i=b.default.Event(m,{relatedTarget:e});if(e){(0,b.default)(e).trigger(h)}(0,b.default)(this._element).trigger(i);if(i.isDefaultPrevented()||h.isDefaultPrevented()){return}if(g){d=document.querySelector(g)}this._activate(this._element,f);var j=function(){var c=b.default.Event(l,{relatedTarget:a._element}),d=b.default.Event(n,{relatedTarget:e});(0,b.default)(e).trigger(c);(0,b.default)(a._element).trigger(d)};if(d){this._activate(d,d.parentNode,j)}else{j()}}},{key:"dispose",value:function dispose(){b.default.removeData(this._element,h);this._element=null}},{key:"_activate",value:function _activate(a,d,e){var f=this,g=d&&("UL"===d.nodeName||"OL"===d.nodeName)?(0,b.default)(d).find(t):(0,b.default)(d).children(s),h=g[0],i=e&&h&&(0,b.default)(h).hasClass(q),j=function(){return f._transitionComplete(a,h,e)};if(h&&i){var k=c.default.getTransitionDurationFromElement(h);(0,b.default)(h).removeClass(r).one(c.default.TRANSITION_END,j).emulateTransitionEnd(k)}else{j()}}},{key:"_transitionComplete",value:function _transitionComplete(a,d,e){if(d){(0,b.default)(d).removeClass(p);var f=(0,b.default)(d.parentNode).find("> .dropdown-menu .active")[0];if(f){(0,b.default)(f).removeClass(p)}if("tab"===d.getAttribute("role")){d.setAttribute("aria-selected",!1)}}(0,b.default)(a).addClass(p);if("tab"===a.getAttribute("role")){a.setAttribute("aria-selected",!0)}c.default.reflow(a);if(a.classList.contains(q)){a.classList.add(r)}if(a.parentNode&&(0,b.default)(a.parentNode).hasClass("dropdown-menu")){var g=(0,b.default)(a).closest(".dropdown")[0];if(g){var h=[].slice.call(g.querySelectorAll(".dropdown-toggle"));(0,b.default)(h).addClass(p)}a.setAttribute("aria-expanded",!0)}if(e){e()}}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this),e=d.data(h);if(!e){e=new a(this);d.data(h,e)}if("string"==typeof c){if("undefined"==typeof e[c]){throw new TypeError("No method named \"".concat(c,"\""))}e[c]()}})}},{key:"VERSION",get:function get(){return"4.5.0"}}]);return a}();(0,b.default)(document).on(o,"[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]",function(a){a.preventDefault();u._jQueryInterface.call((0,b.default)(this),"show")});b.default.fn.tab=u._jQueryInterface;b.default.fn.tab.Constructor=u;b.default.fn.tab.noConflict=function(){b.default.fn.tab=j;return u._jQueryInterface};a.default=u;return a.default}); define ("theme_boost/bootstrap/tab",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function f(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function g(a,b,c){if(b)f(a.prototype,b);if(c)f(a,c);return a}var h="bs.tab",i=".".concat(h),j=b.default.fn.tab,k="hide".concat(i),l="hidden".concat(i),m="show".concat(i),n="shown".concat(i),o="click".concat(i).concat(".data-api"),p="active",q="fade",r="show",s=".active",t="> li > .active",u=function(){function a(b){e(this,a);this._element=b}g(a,[{key:"show",value:function show(){var a=this;if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&(0,b.default)(this._element).hasClass(p)||(0,b.default)(this._element).hasClass("disabled")){return}var d,e,f=(0,b.default)(this._element).closest(".nav, .list-group")[0],g=c.default.getSelectorFromElement(this._element);if(f){var o="UL"===f.nodeName||"OL"===f.nodeName?t:s;e=b.default.makeArray((0,b.default)(f).find(o));e=e[e.length-1]}var h=b.default.Event(k,{relatedTarget:this._element}),i=b.default.Event(m,{relatedTarget:e});if(e){(0,b.default)(e).trigger(h)}(0,b.default)(this._element).trigger(i);if(i.isDefaultPrevented()||h.isDefaultPrevented()){return}if(g){d=document.querySelector(g)}this._activate(this._element,f);var j=function(){var c=b.default.Event(l,{relatedTarget:a._element}),d=b.default.Event(n,{relatedTarget:e});(0,b.default)(e).trigger(c);(0,b.default)(a._element).trigger(d)};if(d){this._activate(d,d.parentNode,j)}else{j()}}},{key:"dispose",value:function dispose(){b.default.removeData(this._element,h);this._element=null}},{key:"_activate",value:function _activate(a,d,e){var f=this,g=d&&("UL"===d.nodeName||"OL"===d.nodeName)?(0,b.default)(d).find(t):(0,b.default)(d).children(s),h=g[0],i=e&&h&&(0,b.default)(h).hasClass(q),j=function(){return f._transitionComplete(a,h,e)};if(h&&i){var k=c.default.getTransitionDurationFromElement(h);(0,b.default)(h).removeClass(r).one(c.default.TRANSITION_END,j).emulateTransitionEnd(k)}else{j()}}},{key:"_transitionComplete",value:function _transitionComplete(a,d,e){if(d){(0,b.default)(d).removeClass(p);var f=(0,b.default)(d.parentNode).find("> .dropdown-menu .active")[0];if(f){(0,b.default)(f).removeClass(p)}if("tab"===d.getAttribute("role")){d.setAttribute("aria-selected",!1)}}(0,b.default)(a).addClass(p);if("tab"===a.getAttribute("role")){a.setAttribute("aria-selected",!0)}c.default.reflow(a);if(a.classList.contains(q)){a.classList.add(r)}if(a.parentNode&&(0,b.default)(a.parentNode).hasClass("dropdown-menu")){var g=(0,b.default)(a).closest(".dropdown")[0];if(g){var h=[].slice.call(g.querySelectorAll(".dropdown-toggle"));(0,b.default)(h).addClass(p)}a.setAttribute("aria-expanded",!0)}if(e){e()}}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this),e=d.data(h);if(!e){e=new a(this);d.data(h,e)}if("string"==typeof c){if("undefined"==typeof e[c]){throw new TypeError("No method named \"".concat(c,"\""))}e[c]()}})}},{key:"VERSION",get:function get(){return"4.6.0"}}]);return a}();(0,b.default)(document).on(o,"[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]",function(a){a.preventDefault();u._jQueryInterface.call((0,b.default)(this),"show")});b.default.fn.tab=u._jQueryInterface;b.default.fn.tab.Constructor=u;b.default.fn.tab.noConflict=function(){b.default.fn.tab=j;return u._jQueryInterface};a.default=u;return a.default});
//# sourceMappingURL=tab.min.js.map //# sourceMappingURL=tab.min.js.map

File diff suppressed because one or more lines are too long

View file

@ -1,2 +1,2 @@
define ("theme_boost/bootstrap/toast",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function g(a){for(var b=1,c;b<arguments.length;b++){c=null!=arguments[b]?arguments[b]:{};if(b%2){f(Object(c),!0).forEach(function(b){h(a,b,c[b])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(a,Object.getOwnPropertyDescriptors(c))}else{f(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}}return a}function h(a,b,c){if(b in a){Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0})}else{a[b]=c}return a}function i(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function j(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function k(a,b,c){if(b)j(a.prototype,b);if(c)j(a,c);return a}var l="bs.toast",m=".".concat(l),n=b.default.fn.toast,o="click.dismiss".concat(m),p="hide".concat(m),q="hidden".concat(m),r="show".concat(m),s="shown".concat(m),t="hide",u="show",v="showing",w={animation:"boolean",autohide:"boolean",delay:"number"},x={animation:!0,autohide:!0,delay:500},y=function(){function a(b,c){i(this,a);this._element=b;this._config=this._getConfig(c);this._timeout=null;this._setListeners()}k(a,[{key:"show",value:function show(){var a=this,d=b.default.Event(r);(0,b.default)(this._element).trigger(d);if(d.isDefaultPrevented()){return}if(this._config.animation){this._element.classList.add("fade")}var e=function(){a._element.classList.remove(v);a._element.classList.add(u);(0,b.default)(a._element).trigger(s);if(a._config.autohide){a._timeout=setTimeout(function(){a.hide()},a._config.delay)}};this._element.classList.remove(t);c.default.reflow(this._element);this._element.classList.add(v);if(this._config.animation){var f=c.default.getTransitionDurationFromElement(this._element);(0,b.default)(this._element).one(c.default.TRANSITION_END,e).emulateTransitionEnd(f)}else{e()}}},{key:"hide",value:function hide(){if(!this._element.classList.contains(u)){return}var a=b.default.Event(p);(0,b.default)(this._element).trigger(a);if(a.isDefaultPrevented()){return}this._close()}},{key:"dispose",value:function dispose(){clearTimeout(this._timeout);this._timeout=null;if(this._element.classList.contains(u)){this._element.classList.remove(u)}(0,b.default)(this._element).off(o);b.default.removeData(this._element,l);this._element=null;this._config=null}},{key:"_getConfig",value:function _getConfig(a){a=g({},x,{},(0,b.default)(this._element).data(),{},"object"===e(a)&&a?a:{});c.default.typeCheckConfig("toast",a,this.constructor.DefaultType);return a}},{key:"_setListeners",value:function _setListeners(){var a=this;(0,b.default)(this._element).on(o,"[data-dismiss=\"toast\"]",function(){return a.hide()})}},{key:"_close",value:function _close(){var a=this,d=function(){a._element.classList.add(t);(0,b.default)(a._element).trigger(q)};this._element.classList.remove(u);if(this._config.animation){var e=c.default.getTransitionDurationFromElement(this._element);(0,b.default)(this._element).one(c.default.TRANSITION_END,d).emulateTransitionEnd(e)}else{d()}}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this),f=d.data(l),g="object"===e(c)&&c;if(!f){f=new a(this,g);d.data(l,f)}if("string"==typeof c){if("undefined"==typeof f[c]){throw new TypeError("No method named \"".concat(c,"\""))}f[c](this)}})}},{key:"VERSION",get:function get(){return"4.5.0"}},{key:"DefaultType",get:function get(){return w}},{key:"Default",get:function get(){return x}}]);return a}();b.default.fn.toast=y._jQueryInterface;b.default.fn.toast.Constructor=y;b.default.fn.toast.noConflict=function(){b.default.fn.toast=n;return y._jQueryInterface};a.default=y;return a.default}); define ("theme_boost/bootstrap/toast",["exports","jquery","./util"],function(a,b,c){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.default=void 0;b=d(b);c=d(c);function d(a){return a&&a.__esModule?a:{default:a}}function e(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){e=function(a){return typeof a}}else{e=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return e(a)}function f(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);if(b)d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable});c.push.apply(c,d)}return c}function g(a){for(var b=1,c;b<arguments.length;b++){c=null!=arguments[b]?arguments[b]:{};if(b%2){f(Object(c),!0).forEach(function(b){h(a,b,c[b])})}else if(Object.getOwnPropertyDescriptors){Object.defineProperties(a,Object.getOwnPropertyDescriptors(c))}else{f(Object(c)).forEach(function(b){Object.defineProperty(a,b,Object.getOwnPropertyDescriptor(c,b))})}}return a}function h(a,b,c){if(b in a){Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0})}else{a[b]=c}return a}function i(a,b){if(!(a instanceof b)){throw new TypeError("Cannot call a class as a function")}}function j(a,b){for(var c=0,d;c<b.length;c++){d=b[c];d.enumerable=d.enumerable||!1;d.configurable=!0;if("value"in d)d.writable=!0;Object.defineProperty(a,d.key,d)}}function k(a,b,c){if(b)j(a.prototype,b);if(c)j(a,c);return a}var l="bs.toast",m=".".concat(l),n=b.default.fn.toast,o="click.dismiss".concat(m),p="hide".concat(m),q="hidden".concat(m),r="show".concat(m),s="shown".concat(m),t="hide",u="show",v="showing",w={animation:"boolean",autohide:"boolean",delay:"number"},x={animation:!0,autohide:!0,delay:500},y=function(){function a(b,c){i(this,a);this._element=b;this._config=this._getConfig(c);this._timeout=null;this._setListeners()}k(a,[{key:"show",value:function show(){var a=this,d=b.default.Event(r);(0,b.default)(this._element).trigger(d);if(d.isDefaultPrevented()){return}this._clearTimeout();if(this._config.animation){this._element.classList.add("fade")}var e=function(){a._element.classList.remove(v);a._element.classList.add(u);(0,b.default)(a._element).trigger(s);if(a._config.autohide){a._timeout=setTimeout(function(){a.hide()},a._config.delay)}};this._element.classList.remove(t);c.default.reflow(this._element);this._element.classList.add(v);if(this._config.animation){var f=c.default.getTransitionDurationFromElement(this._element);(0,b.default)(this._element).one(c.default.TRANSITION_END,e).emulateTransitionEnd(f)}else{e()}}},{key:"hide",value:function hide(){if(!this._element.classList.contains(u)){return}var a=b.default.Event(p);(0,b.default)(this._element).trigger(a);if(a.isDefaultPrevented()){return}this._close()}},{key:"dispose",value:function dispose(){this._clearTimeout();if(this._element.classList.contains(u)){this._element.classList.remove(u)}(0,b.default)(this._element).off(o);b.default.removeData(this._element,l);this._element=null;this._config=null}},{key:"_getConfig",value:function _getConfig(a){a=g({},x,{},(0,b.default)(this._element).data(),{},"object"===e(a)&&a?a:{});c.default.typeCheckConfig("toast",a,this.constructor.DefaultType);return a}},{key:"_setListeners",value:function _setListeners(){var a=this;(0,b.default)(this._element).on(o,"[data-dismiss=\"toast\"]",function(){return a.hide()})}},{key:"_close",value:function _close(){var a=this,d=function(){a._element.classList.add(t);(0,b.default)(a._element).trigger(q)};this._element.classList.remove(u);if(this._config.animation){var e=c.default.getTransitionDurationFromElement(this._element);(0,b.default)(this._element).one(c.default.TRANSITION_END,d).emulateTransitionEnd(e)}else{d()}}},{key:"_clearTimeout",value:function _clearTimeout(){clearTimeout(this._timeout);this._timeout=null}}],[{key:"_jQueryInterface",value:function _jQueryInterface(c){return this.each(function(){var d=(0,b.default)(this),f=d.data(l),g="object"===e(c)&&c;if(!f){f=new a(this,g);d.data(l,f)}if("string"==typeof c){if("undefined"==typeof f[c]){throw new TypeError("No method named \"".concat(c,"\""))}f[c](this)}})}},{key:"VERSION",get:function get(){return"4.6.0"}},{key:"DefaultType",get:function get(){return w}},{key:"Default",get:function get(){return x}}]);return a}();b.default.fn.toast=y._jQueryInterface;b.default.fn.toast.Constructor=y;b.default.fn.toast.noConflict=function(){b.default.fn.toast=n;return y._jQueryInterface};a.default=y;return a.default});
//# sourceMappingURL=toast.min.js.map //# sourceMappingURL=toast.min.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
theme/boost/amd/build/index.min.js vendored Normal file
View file

@ -0,0 +1,2 @@
define ("theme_boost/index",["exports","./bootstrap/alert","./bootstrap/button","./bootstrap/carousel","./bootstrap/collapse","./bootstrap/dropdown","./bootstrap/modal","./bootstrap/popover","./bootstrap/scrollspy","./bootstrap/tab","./bootstrap/toast","./bootstrap/tooltip","./bootstrap/util"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){"use strict";Object.defineProperty(a,"__esModule",{value:!0});Object.defineProperty(a,"Alert",{enumerable:!0,get:function get(){return b.default}});Object.defineProperty(a,"Button",{enumerable:!0,get:function get(){return c.default}});Object.defineProperty(a,"Carousel",{enumerable:!0,get:function get(){return d.default}});Object.defineProperty(a,"Collapse",{enumerable:!0,get:function get(){return e.default}});Object.defineProperty(a,"Dropdown",{enumerable:!0,get:function get(){return f.default}});Object.defineProperty(a,"Modal",{enumerable:!0,get:function get(){return g.default}});Object.defineProperty(a,"Popover",{enumerable:!0,get:function get(){return h.default}});Object.defineProperty(a,"Scrollspy",{enumerable:!0,get:function get(){return i.default}});Object.defineProperty(a,"Tab",{enumerable:!0,get:function get(){return j.default}});Object.defineProperty(a,"Toast",{enumerable:!0,get:function get(){return k.default}});Object.defineProperty(a,"Tooltip",{enumerable:!0,get:function get(){return l.default}});Object.defineProperty(a,"Util",{enumerable:!0,get:function get(){return m.default}});b=n(b);c=n(c);d=n(d);e=n(e);f=n(f);g=n(g);h=n(h);i=n(i);j=n(j);k=n(k);l=n(l);m=n(m);function n(a){return a&&a.__esModule?a:{default:a}}});
//# sourceMappingURL=index.min.js.map

View file

@ -0,0 +1 @@
{"version":3,"sources":["../src/index.js"],"names":[],"mappings":"g6CAOA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,O","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.0): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './bootstrap/alert';\nimport Button from './bootstrap/button';\nimport Carousel from './bootstrap/carousel';\nimport Collapse from './bootstrap/collapse';\nimport Dropdown from './bootstrap/dropdown';\nimport Modal from './bootstrap/modal';\nimport Popover from './bootstrap/popover';\nimport Scrollspy from './bootstrap/scrollspy';\nimport Tab from './bootstrap/tab';\nimport Toast from './bootstrap/toast';\nimport Tooltip from './bootstrap/tooltip';\nimport Util from './bootstrap/util';\n\nexport {\n Util,\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Popover,\n Scrollspy,\n Tab,\n Toast,\n Tooltip\n};\n"],"file":"index.min.js"}

View file

@ -1,2 +1,2 @@
function _typeof(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){_typeof=function(a){return typeof a}}else{_typeof=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return _typeof(a)}define ("theme_boost/loader",["exports","jquery","./aria","./bootstrap/index","core/pending","./scroll","./pending"],function(a,b,c,d,e,f,g){"use strict";Object.defineProperty(a,"__esModule",{value:!0});Object.defineProperty(a,"Bootstrap",{enumerable:!0,get:function get(){return d.default}});b=j(b);c=i(c);d=j(d);e=j(e);f=j(f);g=j(g);function h(){if("function"!=typeof WeakMap)return null;var a=new WeakMap;h=function(){return a};return a}function i(a){if(a&&a.__esModule){return a}if(null===a||"object"!==_typeof(a)&&"function"!=typeof a){return{default:a}}var b=h();if(b&&b.has(a)){return b.get(a)}var c={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var e in a){if(Object.prototype.hasOwnProperty.call(a,e)){var f=d?Object.getOwnPropertyDescriptor(a,e):null;if(f&&(f.get||f.set)){Object.defineProperty(c,e,f)}else{c[e]=a[e]}}}c.default=a;if(b){b.set(a,c)}return c}function j(a){return a&&a.__esModule?a:{default:a}}var k=function(){(0,b.default)("a[data-toggle=\"tab\"]").on("shown.bs.tab",function(a){var c=(0,b.default)(a.target).attr("href");if(history.replaceState){history.replaceState(null,null,c)}else{location.hash=c}});var a=window.location.hash;if(a){var c=document.querySelector(".nav-link[href=\""+a+"\"]");if(c){c.click()}}},l=function(){(0,b.default)("body").popover({container:"body",selector:"[data-toggle=\"popover\"]",trigger:"focus"});document.addEventListener("keydown",function(a){if("Escape"===a.key&&a.target.closest("[data-toggle=\"popover\"]")){(0,b.default)(a.target).popover("hide")}})},m=function(){(0,b.default)("body").tooltip({container:"body",selector:"[data-toggle=\"tooltip\"]"})},n=new e.default("theme_boost/loader:init");(0,g.default)();c.init();k();l();m();new f.default().init();b.default.fn.dropdown.Constructor.Default.flip=!1;n.resolve()}); function _typeof(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){_typeof=function(a){return typeof a}}else{_typeof=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return _typeof(a)}define ("theme_boost/loader",["exports","jquery","./aria","./index","core/pending","./scroll","./pending"],function(a,b,c,d,e,f,g){"use strict";Object.defineProperty(a,"__esModule",{value:!0});Object.defineProperty(a,"Bootstrap",{enumerable:!0,get:function get(){return d.default}});b=j(b);c=i(c);d=j(d);e=j(e);f=j(f);g=j(g);function h(){if("function"!=typeof WeakMap)return null;var a=new WeakMap;h=function(){return a};return a}function i(a){if(a&&a.__esModule){return a}if(null===a||"object"!==_typeof(a)&&"function"!=typeof a){return{default:a}}var b=h();if(b&&b.has(a)){return b.get(a)}var c={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var e in a){if(Object.prototype.hasOwnProperty.call(a,e)){var f=d?Object.getOwnPropertyDescriptor(a,e):null;if(f&&(f.get||f.set)){Object.defineProperty(c,e,f)}else{c[e]=a[e]}}}c.default=a;if(b){b.set(a,c)}return c}function j(a){return a&&a.__esModule?a:{default:a}}var k=function(){(0,b.default)("a[data-toggle=\"tab\"]").on("shown.bs.tab",function(a){var c=(0,b.default)(a.target).attr("href");if(history.replaceState){history.replaceState(null,null,c)}else{location.hash=c}});var a=window.location.hash;if(a){var c=document.querySelector(".nav-link[href=\""+a+"\"]");if(c){c.click()}}},l=function(){(0,b.default)("body").popover({container:"body",selector:"[data-toggle=\"popover\"]",trigger:"focus"});document.addEventListener("keydown",function(a){if("Escape"===a.key&&a.target.closest("[data-toggle=\"popover\"]")){(0,b.default)(a.target).popover("hide")}})},m=function(){(0,b.default)("body").tooltip({container:"body",selector:"[data-toggle=\"tooltip\"]"})},n=new e.default("theme_boost/loader:init");(0,g.default)();c.init();k();l();m();new f.default().init();b.default.fn.dropdown.Constructor.Default.flip=!1;n.resolve()});
//# sourceMappingURL=loader.min.js.map //# sourceMappingURL=loader.min.js.map

View file

@ -1 +1 @@
{"version":3,"sources":["../src/loader.js"],"names":["rememberTabs","on","e","hash","target","attr","history","replaceState","location","window","tab","document","querySelector","click","enablePopovers","popover","container","selector","trigger","addEventListener","key","closest","enableTooltips","tooltip","pendingPromise","Pending","Aria","init","Scroll","$","fn","dropdown","Constructor","Default","flip","resolve"],"mappings":"wkBA0BA,OACA,OACA,OACA,OACA,OACA,O,4lBAKMA,CAAAA,CAAY,CAAG,UAAM,CACvB,cAAE,wBAAF,EAA0BC,EAA1B,CAA6B,cAA7B,CAA6C,SAASC,CAAT,CAAY,CACrD,GAAIC,CAAAA,CAAI,CAAG,cAAED,CAAC,CAACE,MAAJ,EAAYC,IAAZ,CAAiB,MAAjB,CAAX,CACA,GAAIC,OAAO,CAACC,YAAZ,CAA0B,CACtBD,OAAO,CAACC,YAAR,CAAqB,IAArB,CAA2B,IAA3B,CAAiCJ,CAAjC,CACH,CAFD,IAEO,CACHK,QAAQ,CAACL,IAAT,CAAgBA,CACnB,CACJ,CAPD,EAQA,GAAMA,CAAAA,CAAI,CAAGM,MAAM,CAACD,QAAP,CAAgBL,IAA7B,CACA,GAAIA,CAAJ,CAAU,CACN,GAAMO,CAAAA,CAAG,CAAGC,QAAQ,CAACC,aAAT,CAAuB,oBAAqBT,CAArB,CAA4B,KAAnD,CAAZ,CACA,GAAIO,CAAJ,CAAS,CACLA,CAAG,CAACG,KAAJ,EACH,CACJ,CACJ,C,CAMKC,CAAc,CAAG,UAAM,CACzB,cAAE,MAAF,EAAUC,OAAV,CAAkB,CACdC,SAAS,CAAE,MADG,CAEdC,QAAQ,CAAE,2BAFI,CAGdC,OAAO,CAAE,OAHK,CAAlB,EAMAP,QAAQ,CAACQ,gBAAT,CAA0B,SAA1B,CAAqC,SAAAjB,CAAC,CAAI,CACtC,GAAc,QAAV,GAAAA,CAAC,CAACkB,GAAF,EAAsBlB,CAAC,CAACE,MAAF,CAASiB,OAAT,CAAiB,2BAAjB,CAA1B,CAAuE,CACnE,cAAEnB,CAAC,CAACE,MAAJ,EAAYW,OAAZ,CAAoB,MAApB,CACH,CACJ,CAJD,CAKH,C,CAMKO,CAAc,CAAG,UAAM,CACzB,cAAE,MAAF,EAAUC,OAAV,CAAkB,CACdP,SAAS,CAAE,MADG,CAEdC,QAAQ,CAAE,2BAFI,CAAlB,CAIH,C,CAEKO,CAAc,CAAG,GAAIC,UAAJ,CAAY,yBAAZ,C,CAGvB,gBAGAC,CAAI,CAACC,IAAL,GAGA3B,CAAY,GAGZc,CAAc,GAGdQ,CAAc,GAGb,GAAIM,UAAJ,EAAD,CAAeD,IAAf,GAGAE,UAAEC,EAAF,CAAKC,QAAL,CAAcC,WAAd,CAA0BC,OAA1B,CAAkCC,IAAlC,IAEAV,CAAc,CAACW,OAAf,E","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Template renderer for Moodle. Load and render Moodle templates with Mustache.\n *\n * @module core/templates\n * @package core\n * @class templates\n * @copyright 2015 Damyon Wiese <damyon@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\n\nimport $ from 'jquery';\nimport * as Aria from './aria';\nimport Bootstrap from './bootstrap/index';\nimport Pending from 'core/pending';\nimport Scroll from './scroll';\nimport setupBootstrapPendingChecks from './pending';\n\n/**\n * Rember the last visited tabs.\n */\nconst rememberTabs = () => {\n $('a[data-toggle=\"tab\"]').on('shown.bs.tab', function(e) {\n var hash = $(e.target).attr('href');\n if (history.replaceState) {\n history.replaceState(null, null, hash);\n } else {\n location.hash = hash;\n }\n });\n const hash = window.location.hash;\n if (hash) {\n const tab = document.querySelector('.nav-link[href=\"' + hash + '\"]');\n if (tab) {\n tab.click();\n }\n }\n};\n\n/**\n * Enable all popovers\n *\n */\nconst enablePopovers = () => {\n $('body').popover({\n container: 'body',\n selector: '[data-toggle=\"popover\"]',\n trigger: 'focus',\n });\n\n document.addEventListener('keydown', e => {\n if (e.key === 'Escape' && e.target.closest('[data-toggle=\"popover\"]')) {\n $(e.target).popover('hide');\n }\n });\n};\n\n/**\n * Enable tooltips\n *\n */\nconst enableTooltips = () => {\n $('body').tooltip({\n container: 'body',\n selector: '[data-toggle=\"tooltip\"]',\n });\n};\n\nconst pendingPromise = new Pending('theme_boost/loader:init');\n\n// Add pending promise event listeners to relevant Bootstrap custom events.\nsetupBootstrapPendingChecks();\n\n// Setup Aria helpers for Bootstrap features.\nAria.init();\n\n// Remember the last visited tabs.\nrememberTabs();\n\n// Enable all popovers.\nenablePopovers();\n\n// Enable all tooltips.\nenableTooltips();\n\n// Add scroll handling.\n(new Scroll()).init();\n\n// Disables flipping the dropdowns up and getting hidden behind the navbar.\n$.fn.dropdown.Constructor.Default.flip = false;\n\npendingPromise.resolve();\n\nexport {\n Bootstrap,\n};\n"],"file":"loader.min.js"} {"version":3,"sources":["../src/loader.js"],"names":["rememberTabs","on","e","hash","target","attr","history","replaceState","location","window","tab","document","querySelector","click","enablePopovers","popover","container","selector","trigger","addEventListener","key","closest","enableTooltips","tooltip","pendingPromise","Pending","Aria","init","Scroll","$","fn","dropdown","Constructor","Default","flip","resolve"],"mappings":"8jBA0BA,OACA,OACA,OACA,OACA,OACA,O,4lBAKMA,CAAAA,CAAY,CAAG,UAAM,CACvB,cAAE,wBAAF,EAA0BC,EAA1B,CAA6B,cAA7B,CAA6C,SAASC,CAAT,CAAY,CACrD,GAAIC,CAAAA,CAAI,CAAG,cAAED,CAAC,CAACE,MAAJ,EAAYC,IAAZ,CAAiB,MAAjB,CAAX,CACA,GAAIC,OAAO,CAACC,YAAZ,CAA0B,CACtBD,OAAO,CAACC,YAAR,CAAqB,IAArB,CAA2B,IAA3B,CAAiCJ,CAAjC,CACH,CAFD,IAEO,CACHK,QAAQ,CAACL,IAAT,CAAgBA,CACnB,CACJ,CAPD,EAQA,GAAMA,CAAAA,CAAI,CAAGM,MAAM,CAACD,QAAP,CAAgBL,IAA7B,CACA,GAAIA,CAAJ,CAAU,CACN,GAAMO,CAAAA,CAAG,CAAGC,QAAQ,CAACC,aAAT,CAAuB,oBAAqBT,CAArB,CAA4B,KAAnD,CAAZ,CACA,GAAIO,CAAJ,CAAS,CACLA,CAAG,CAACG,KAAJ,EACH,CACJ,CACJ,C,CAMKC,CAAc,CAAG,UAAM,CACzB,cAAE,MAAF,EAAUC,OAAV,CAAkB,CACdC,SAAS,CAAE,MADG,CAEdC,QAAQ,CAAE,2BAFI,CAGdC,OAAO,CAAE,OAHK,CAAlB,EAMAP,QAAQ,CAACQ,gBAAT,CAA0B,SAA1B,CAAqC,SAAAjB,CAAC,CAAI,CACtC,GAAc,QAAV,GAAAA,CAAC,CAACkB,GAAF,EAAsBlB,CAAC,CAACE,MAAF,CAASiB,OAAT,CAAiB,2BAAjB,CAA1B,CAAuE,CACnE,cAAEnB,CAAC,CAACE,MAAJ,EAAYW,OAAZ,CAAoB,MAApB,CACH,CACJ,CAJD,CAKH,C,CAMKO,CAAc,CAAG,UAAM,CACzB,cAAE,MAAF,EAAUC,OAAV,CAAkB,CACdP,SAAS,CAAE,MADG,CAEdC,QAAQ,CAAE,2BAFI,CAAlB,CAIH,C,CAEKO,CAAc,CAAG,GAAIC,UAAJ,CAAY,yBAAZ,C,CAGvB,gBAGAC,CAAI,CAACC,IAAL,GAGA3B,CAAY,GAGZc,CAAc,GAGdQ,CAAc,GAGb,GAAIM,UAAJ,EAAD,CAAeD,IAAf,GAGAE,UAAEC,EAAF,CAAKC,QAAL,CAAcC,WAAd,CAA0BC,OAA1B,CAAkCC,IAAlC,IAEAV,CAAc,CAACW,OAAf,E","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Template renderer for Moodle. Load and render Moodle templates with Mustache.\n *\n * @module core/templates\n * @package core\n * @class templates\n * @copyright 2015 Damyon Wiese <damyon@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\n\nimport $ from 'jquery';\nimport * as Aria from './aria';\nimport Bootstrap from './index';\nimport Pending from 'core/pending';\nimport Scroll from './scroll';\nimport setupBootstrapPendingChecks from './pending';\n\n/**\n * Rember the last visited tabs.\n */\nconst rememberTabs = () => {\n $('a[data-toggle=\"tab\"]').on('shown.bs.tab', function(e) {\n var hash = $(e.target).attr('href');\n if (history.replaceState) {\n history.replaceState(null, null, hash);\n } else {\n location.hash = hash;\n }\n });\n const hash = window.location.hash;\n if (hash) {\n const tab = document.querySelector('.nav-link[href=\"' + hash + '\"]');\n if (tab) {\n tab.click();\n }\n }\n};\n\n/**\n * Enable all popovers\n *\n */\nconst enablePopovers = () => {\n $('body').popover({\n container: 'body',\n selector: '[data-toggle=\"popover\"]',\n trigger: 'focus',\n });\n\n document.addEventListener('keydown', e => {\n if (e.key === 'Escape' && e.target.closest('[data-toggle=\"popover\"]')) {\n $(e.target).popover('hide');\n }\n });\n};\n\n/**\n * Enable tooltips\n *\n */\nconst enableTooltips = () => {\n $('body').tooltip({\n container: 'body',\n selector: '[data-toggle=\"tooltip\"]',\n });\n};\n\nconst pendingPromise = new Pending('theme_boost/loader:init');\n\n// Add pending promise event listeners to relevant Bootstrap custom events.\nsetupBootstrapPendingChecks();\n\n// Setup Aria helpers for Bootstrap features.\nAria.init();\n\n// Remember the last visited tabs.\nrememberTabs();\n\n// Enable all popovers.\nenablePopovers();\n\n// Enable all tooltips.\nenableTooltips();\n\n// Add scroll handling.\n(new Scroll()).init();\n\n// Disables flipping the dropdowns up and getting hidden behind the navbar.\n$.fn.dropdown.Constructor.Default.flip = false;\n\npendingPromise.resolve();\n\nexport {\n Bootstrap,\n};\n"],"file":"loader.min.js"}

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): alert.js * Bootstrap (v4.6.0): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,22 +14,22 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'alert' const NAME = 'alert'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.alert' const DATA_KEY = 'bs.alert'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const SELECTOR_DISMISS = '[data-dismiss="alert"]' const SELECTOR_DISMISS = '[data-dismiss="alert"]'
const EVENT_CLOSE = `close${EVENT_KEY}` const EVENT_CLOSE = `close${EVENT_KEY}`
const EVENT_CLOSED = `closed${EVENT_KEY}` const EVENT_CLOSED = `closed${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_ALERT = 'alert' const CLASS_NAME_ALERT = 'alert'
const CLASS_NAME_FADE = 'fade' const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
@ -74,7 +74,7 @@ class Alert {
_getRootElement(element) { _getRootElement(element) {
const selector = Util.getSelectorFromElement(element) const selector = Util.getSelectorFromElement(element)
let parent = false let parent = false
if (selector) { if (selector) {
parent = document.querySelector(selector) parent = document.querySelector(selector)
@ -105,7 +105,7 @@ class Alert {
const transitionDuration = Util.getTransitionDurationFromElement(element) const transitionDuration = Util.getTransitionDurationFromElement(element)
$(element) $(element)
.one(Util.TRANSITION_END, (event) => this._destroyElement(element, event)) .one(Util.TRANSITION_END, event => this._destroyElement(element, event))
.emulateTransitionEnd(transitionDuration) .emulateTransitionEnd(transitionDuration)
} }
@ -121,7 +121,7 @@ class Alert {
static _jQueryInterface(config) { static _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const $element = $(this) const $element = $(this)
let data = $element.data(DATA_KEY) let data = $element.data(DATA_KEY)
if (!data) { if (!data) {
data = new Alert(this) data = new Alert(this)
@ -163,9 +163,9 @@ $(document).on(
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
$.fn[NAME] = Alert._jQueryInterface $.fn[NAME] = Alert._jQueryInterface
$.fn[NAME].Constructor = Alert $.fn[NAME].Constructor = Alert
$.fn[NAME].noConflict = () => { $.fn[NAME].noConflict = () => {
$.fn[NAME] = JQUERY_NO_CONFLICT $.fn[NAME] = JQUERY_NO_CONFLICT
return Alert._jQueryInterface return Alert._jQueryInterface
} }

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): button.js * Bootstrap (v4.6.0): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -13,29 +13,29 @@ import $ from 'jquery'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'button' const NAME = 'button'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.button' const DATA_KEY = 'bs.button'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_BUTTON = 'btn' const CLASS_NAME_BUTTON = 'btn'
const CLASS_NAME_FOCUS = 'focus' const CLASS_NAME_FOCUS = 'focus'
const SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]' const SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]'
const SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]' const SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]'
const SELECTOR_DATA_TOGGLE = '[data-toggle="button"]' const SELECTOR_DATA_TOGGLE = '[data-toggle="button"]'
const SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn' const SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn'
const SELECTOR_INPUT = 'input:not([type="hidden"])' const SELECTOR_INPUT = 'input:not([type="hidden"])'
const SELECTOR_ACTIVE = '.active' const SELECTOR_ACTIVE = '.active'
const SELECTOR_BUTTON = '.btn' const SELECTOR_BUTTON = '.btn'
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` + const EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +
`blur${EVENT_KEY}${DATA_API_KEY}` `blur${EVENT_KEY}${DATA_API_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
/** /**
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
@ -46,6 +46,7 @@ const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
class Button { class Button {
constructor(element) { constructor(element) {
this._element = element this._element = element
this.shouldAvoidTriggerChange = false
} }
// Getters // Getters
@ -59,17 +60,14 @@ class Button {
toggle() { toggle() {
let triggerChangeEvent = true let triggerChangeEvent = true
let addAriaPressed = true let addAriaPressed = true
const rootElement = $(this._element).closest( const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]
SELECTOR_DATA_TOGGLES
)[0]
if (rootElement) { if (rootElement) {
const input = this._element.querySelector(SELECTOR_INPUT) const input = this._element.querySelector(SELECTOR_INPUT)
if (input) { if (input) {
if (input.type === 'radio') { if (input.type === 'radio') {
if (input.checked && if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {
this._element.classList.contains(CLASS_NAME_ACTIVE)) {
triggerChangeEvent = false triggerChangeEvent = false
} else { } else {
const activeElement = rootElement.querySelector(SELECTOR_ACTIVE) const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)
@ -85,7 +83,10 @@ class Button {
if (input.type === 'checkbox' || input.type === 'radio') { if (input.type === 'checkbox' || input.type === 'radio') {
input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE) input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)
} }
$(input).trigger('change')
if (!this.shouldAvoidTriggerChange) {
$(input).trigger('change')
}
} }
input.focus() input.focus()
@ -95,8 +96,7 @@ class Button {
if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
if (addAriaPressed) { if (addAriaPressed) {
this._element.setAttribute('aria-pressed', this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))
!this._element.classList.contains(CLASS_NAME_ACTIVE))
} }
if (triggerChangeEvent) { if (triggerChangeEvent) {
@ -112,15 +112,18 @@ class Button {
// Static // Static
static _jQueryInterface(config) { static _jQueryInterface(config, avoidTriggerChange) {
return this.each(function () { return this.each(function () {
let data = $(this).data(DATA_KEY) const $element = $(this)
let data = $element.data(DATA_KEY)
if (!data) { if (!data) {
data = new Button(this) data = new Button(this)
$(this).data(DATA_KEY, data) $element.data(DATA_KEY, data)
} }
data.shouldAvoidTriggerChange = avoidTriggerChange
if (config === 'toggle') { if (config === 'toggle') {
data[config]() data[config]()
} }
@ -135,7 +138,7 @@ class Button {
*/ */
$(document) $(document)
.on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, (event) => { .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {
let button = event.target let button = event.target
const initialButton = button const initialButton = button
@ -153,13 +156,12 @@ $(document)
return return
} }
if (initialButton.tagName === 'LABEL' && inputBtn && inputBtn.type === 'checkbox') { if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
event.preventDefault() // work around event sent to label and input Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')
} }
Button._jQueryInterface.call($(button), 'toggle')
} }
}) })
.on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, (event) => { .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {
const button = $(event.target).closest(SELECTOR_BUTTON)[0] const button = $(event.target).closest(SELECTOR_BUTTON)[0]
$(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)) $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))
}) })

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): carousel.js * Bootstrap (v4.6.0): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,75 +14,75 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'carousel' const NAME = 'carousel'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.carousel' const DATA_KEY = 'bs.carousel'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key
const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key
const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch
const SWIPE_THRESHOLD = 40 const SWIPE_THRESHOLD = 40
const Default = { const Default = {
interval : 5000, interval: 5000,
keyboard : true, keyboard: true,
slide : false, slide: false,
pause : 'hover', pause: 'hover',
wrap : true, wrap: true,
touch : true touch: true
} }
const DefaultType = { const DefaultType = {
interval : '(number|boolean)', interval: '(number|boolean)',
keyboard : 'boolean', keyboard: 'boolean',
slide : '(boolean|string)', slide: '(boolean|string)',
pause : '(string|boolean)', pause: '(string|boolean)',
wrap : 'boolean', wrap: 'boolean',
touch : 'boolean' touch: 'boolean'
} }
const DIRECTION_NEXT = 'next' const DIRECTION_NEXT = 'next'
const DIRECTION_PREV = 'prev' const DIRECTION_PREV = 'prev'
const DIRECTION_LEFT = 'left' const DIRECTION_LEFT = 'left'
const DIRECTION_RIGHT = 'right' const DIRECTION_RIGHT = 'right'
const EVENT_SLIDE = `slide${EVENT_KEY}` const EVENT_SLIDE = `slide${EVENT_KEY}`
const EVENT_SLID = `slid${EVENT_KEY}` const EVENT_SLID = `slid${EVENT_KEY}`
const EVENT_KEYDOWN = `keydown${EVENT_KEY}` const EVENT_KEYDOWN = `keydown${EVENT_KEY}`
const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}` const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`
const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}` const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`
const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}` const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`
const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}` const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`
const EVENT_TOUCHEND = `touchend${EVENT_KEY}` const EVENT_TOUCHEND = `touchend${EVENT_KEY}`
const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}` const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`
const EVENT_POINTERUP = `pointerup${EVENT_KEY}` const EVENT_POINTERUP = `pointerup${EVENT_KEY}`
const EVENT_DRAG_START = `dragstart${EVENT_KEY}` const EVENT_DRAG_START = `dragstart${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_CAROUSEL = 'carousel' const CLASS_NAME_CAROUSEL = 'carousel'
const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_SLIDE = 'slide' const CLASS_NAME_SLIDE = 'slide'
const CLASS_NAME_RIGHT = 'carousel-item-right' const CLASS_NAME_RIGHT = 'carousel-item-right'
const CLASS_NAME_LEFT = 'carousel-item-left' const CLASS_NAME_LEFT = 'carousel-item-left'
const CLASS_NAME_NEXT = 'carousel-item-next' const CLASS_NAME_NEXT = 'carousel-item-next'
const CLASS_NAME_PREV = 'carousel-item-prev' const CLASS_NAME_PREV = 'carousel-item-prev'
const CLASS_NAME_POINTER_EVENT = 'pointer-event' const CLASS_NAME_POINTER_EVENT = 'pointer-event'
const SELECTOR_ACTIVE = '.active' const SELECTOR_ACTIVE = '.active'
const SELECTOR_ACTIVE_ITEM = '.active.carousel-item' const SELECTOR_ACTIVE_ITEM = '.active.carousel-item'
const SELECTOR_ITEM = '.carousel-item' const SELECTOR_ITEM = '.carousel-item'
const SELECTOR_ITEM_IMG = '.carousel-item img' const SELECTOR_ITEM_IMG = '.carousel-item img'
const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev' const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'
const SELECTOR_INDICATORS = '.carousel-indicators' const SELECTOR_INDICATORS = '.carousel-indicators'
const SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]' const SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'
const SELECTOR_DATA_RIDE = '[data-ride="carousel"]' const SELECTOR_DATA_RIDE = '[data-ride="carousel"]'
const PointerType = { const PointerType = {
TOUCH : 'touch', TOUCH: 'touch',
PEN : 'pen' PEN: 'pen'
} }
/** /**
@ -92,20 +92,20 @@ const PointerType = {
*/ */
class Carousel { class Carousel {
constructor(element, config) { constructor(element, config) {
this._items = null this._items = null
this._interval = null this._interval = null
this._activeElement = null this._activeElement = null
this._isPaused = false this._isPaused = false
this._isSliding = false this._isSliding = false
this.touchTimeout = null this.touchTimeout = null
this.touchStartX = 0 this.touchStartX = 0
this.touchDeltaX = 0 this.touchDeltaX = 0
this._config = this._getConfig(config) this._config = this._getConfig(config)
this._element = element this._element = element
this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS) this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent) this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)
this._addEventListeners() this._addEventListeners()
} }
@ -129,10 +129,11 @@ class Carousel {
} }
nextWhenVisible() { nextWhenVisible() {
const $element = $(this._element)
// Don't call next when the page isn't visible // Don't call next when the page isn't visible
// or the carousel or its parent isn't visible // or the carousel or its parent isn't visible
if (!document.hidden && if (!document.hidden &&
($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) { ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {
this.next() this.next()
} }
} }
@ -168,6 +169,8 @@ class Carousel {
} }
if (this._config.interval && !this._isPaused) { if (this._config.interval && !this._isPaused) {
this._updateInterval()
this._interval = setInterval( this._interval = setInterval(
(document.visibilityState ? this.nextWhenVisible : this.next).bind(this), (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),
this._config.interval this._config.interval
@ -195,9 +198,9 @@ class Carousel {
return return
} }
const direction = index > activeIndex const direction = index > activeIndex ?
? DIRECTION_NEXT DIRECTION_NEXT :
: DIRECTION_PREV DIRECTION_PREV
this._slide(direction, this._items[index]) this._slide(direction, this._items[index])
} }
@ -206,13 +209,13 @@ class Carousel {
$(this._element).off(EVENT_KEY) $(this._element).off(EVENT_KEY)
$.removeData(this._element, DATA_KEY) $.removeData(this._element, DATA_KEY)
this._items = null this._items = null
this._config = null this._config = null
this._element = null this._element = null
this._interval = null this._interval = null
this._isPaused = null this._isPaused = null
this._isSliding = null this._isSliding = null
this._activeElement = null this._activeElement = null
this._indicatorsElement = null this._indicatorsElement = null
} }
@ -251,13 +254,13 @@ class Carousel {
_addEventListeners() { _addEventListeners() {
if (this._config.keyboard) { if (this._config.keyboard) {
$(this._element).on(EVENT_KEYDOWN, (event) => this._keydown(event)) $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))
} }
if (this._config.pause === 'hover') { if (this._config.pause === 'hover') {
$(this._element) $(this._element)
.on(EVENT_MOUSEENTER, (event) => this.pause(event)) .on(EVENT_MOUSEENTER, event => this.pause(event))
.on(EVENT_MOUSELEAVE, (event) => this.cycle(event)) .on(EVENT_MOUSELEAVE, event => this.cycle(event))
} }
if (this._config.touch) { if (this._config.touch) {
@ -270,7 +273,7 @@ class Carousel {
return return
} }
const start = (event) => { const start = event => {
if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
this.touchStartX = event.originalEvent.clientX this.touchStartX = event.originalEvent.clientX
} else if (!this._pointerEvent) { } else if (!this._pointerEvent) {
@ -278,7 +281,7 @@ class Carousel {
} }
} }
const move = (event) => { const move = event => {
// ensure swiping with one touch and not pinching // ensure swiping with one touch and not pinching
if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {
this.touchDeltaX = 0 this.touchDeltaX = 0
@ -287,7 +290,7 @@ class Carousel {
} }
} }
const end = (event) => { const end = event => {
if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
this.touchDeltaX = event.originalEvent.clientX - this.touchStartX this.touchDeltaX = event.originalEvent.clientX - this.touchStartX
} }
@ -306,22 +309,23 @@ class Carousel {
if (this.touchTimeout) { if (this.touchTimeout) {
clearTimeout(this.touchTimeout) clearTimeout(this.touchTimeout)
} }
this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)
} }
} }
$(this._element.querySelectorAll(SELECTOR_ITEM_IMG)) $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))
.on(EVENT_DRAG_START, (e) => e.preventDefault()) .on(EVENT_DRAG_START, e => e.preventDefault())
if (this._pointerEvent) { if (this._pointerEvent) {
$(this._element).on(EVENT_POINTERDOWN, (event) => start(event)) $(this._element).on(EVENT_POINTERDOWN, event => start(event))
$(this._element).on(EVENT_POINTERUP, (event) => end(event)) $(this._element).on(EVENT_POINTERUP, event => end(event))
this._element.classList.add(CLASS_NAME_POINTER_EVENT) this._element.classList.add(CLASS_NAME_POINTER_EVENT)
} else { } else {
$(this._element).on(EVENT_TOUCHSTART, (event) => start(event)) $(this._element).on(EVENT_TOUCHSTART, event => start(event))
$(this._element).on(EVENT_TOUCHMOVE, (event) => move(event)) $(this._element).on(EVENT_TOUCHMOVE, event => move(event))
$(this._element).on(EVENT_TOUCHEND, (event) => end(event)) $(this._element).on(EVENT_TOUCHEND, event => end(event))
} }
} }
@ -344,29 +348,29 @@ class Carousel {
} }
_getItemIndex(element) { _getItemIndex(element) {
this._items = element && element.parentNode this._items = element && element.parentNode ?
? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :
: [] []
return this._items.indexOf(element) return this._items.indexOf(element)
} }
_getItemByDirection(direction, activeElement) { _getItemByDirection(direction, activeElement) {
const isNextDirection = direction === DIRECTION_NEXT const isNextDirection = direction === DIRECTION_NEXT
const isPrevDirection = direction === DIRECTION_PREV const isPrevDirection = direction === DIRECTION_PREV
const activeIndex = this._getItemIndex(activeElement) const activeIndex = this._getItemIndex(activeElement)
const lastItemIndex = this._items.length - 1 const lastItemIndex = this._items.length - 1
const isGoingToWrap = isPrevDirection && activeIndex === 0 || const isGoingToWrap = isPrevDirection && activeIndex === 0 ||
isNextDirection && activeIndex === lastItemIndex isNextDirection && activeIndex === lastItemIndex
if (isGoingToWrap && !this._config.wrap) { if (isGoingToWrap && !this._config.wrap) {
return activeElement return activeElement
} }
const delta = direction === DIRECTION_PREV ? -1 : 1 const delta = direction === DIRECTION_PREV ? -1 : 1
const itemIndex = (activeIndex + delta) % this._items.length const itemIndex = (activeIndex + delta) % this._items.length
return itemIndex === -1 return itemIndex === -1 ?
? this._items[this._items.length - 1] : this._items[itemIndex] this._items[this._items.length - 1] : this._items[itemIndex]
} }
_triggerSlideEvent(relatedTarget, eventDirectionName) { _triggerSlideEvent(relatedTarget, eventDirectionName) {
@ -399,10 +403,27 @@ class Carousel {
} }
} }
_updateInterval() {
const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)
if (!element) {
return
}
const elementInterval = parseInt(element.getAttribute('data-interval'), 10)
if (elementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval
this._config.interval = elementInterval
} else {
this._config.interval = this._config.defaultInterval || this._config.interval
}
}
_slide(direction, element) { _slide(direction, element) {
const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM) const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)
const activeElementIndex = this._getItemIndex(activeElement) const activeElementIndex = this._getItemIndex(activeElement)
const nextElement = element || activeElement && const nextElement = element || activeElement &&
this._getItemByDirection(direction, activeElement) this._getItemByDirection(direction, activeElement)
const nextElementIndex = this._getItemIndex(nextElement) const nextElementIndex = this._getItemIndex(nextElement)
const isCycling = Boolean(this._interval) const isCycling = Boolean(this._interval)
@ -443,6 +464,7 @@ class Carousel {
} }
this._setActiveIndicatorElement(nextElement) this._setActiveIndicatorElement(nextElement)
this._activeElement = nextElement
const slidEvent = $.Event(EVENT_SLID, { const slidEvent = $.Event(EVENT_SLID, {
relatedTarget: nextElement, relatedTarget: nextElement,
@ -459,14 +481,6 @@ class Carousel {
$(activeElement).addClass(directionalClassName) $(activeElement).addClass(directionalClassName)
$(nextElement).addClass(directionalClassName) $(nextElement).addClass(directionalClassName)
const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10)
if (nextElementInterval) {
this._config.defaultInterval = this._config.defaultInterval || this._config.interval
this._config.interval = nextElementInterval
} else {
this._config.interval = this._config.defaultInterval || this._config.interval
}
const transitionDuration = Util.getTransitionDurationFromElement(activeElement) const transitionDuration = Util.getTransitionDurationFromElement(activeElement)
$(activeElement) $(activeElement)
@ -525,6 +539,7 @@ class Carousel {
if (typeof data[action] === 'undefined') { if (typeof data[action] === 'undefined') {
throw new TypeError(`No method named "${action}"`) throw new TypeError(`No method named "${action}"`)
} }
data[action]() data[action]()
} else if (_config.interval && _config.ride) { } else if (_config.interval && _config.ride) {
data.pause() data.pause()

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): collapse.js * Bootstrap (v4.6.0): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,38 +14,38 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'collapse' const NAME = 'collapse'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.collapse' const DATA_KEY = 'bs.collapse'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const Default = { const Default = {
toggle : true, toggle: true,
parent : '' parent: ''
} }
const DefaultType = { const DefaultType = {
toggle : 'boolean', toggle: 'boolean',
parent : '(string|element)' parent: '(string|element)'
} }
const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_COLLAPSE = 'collapse' const CLASS_NAME_COLLAPSE = 'collapse'
const CLASS_NAME_COLLAPSING = 'collapsing' const CLASS_NAME_COLLAPSING = 'collapsing'
const CLASS_NAME_COLLAPSED = 'collapsed' const CLASS_NAME_COLLAPSED = 'collapsed'
const DIMENSION_WIDTH = 'width' const DIMENSION_WIDTH = 'width'
const DIMENSION_HEIGHT = 'height' const DIMENSION_HEIGHT = 'height'
const SELECTOR_ACTIVES = '.show, .collapsing' const SELECTOR_ACTIVES = '.show, .collapsing'
const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]' const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]'
/** /**
@ -57,9 +57,9 @@ const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]'
class Collapse { class Collapse {
constructor(element, config) { constructor(element, config) {
this._isTransitioning = false this._isTransitioning = false
this._element = element this._element = element
this._config = this._getConfig(config) this._config = this._getConfig(config)
this._triggerArray = [].slice.call(document.querySelectorAll( this._triggerArray = [].slice.call(document.querySelectorAll(
`[data-toggle="collapse"][href="#${element.id}"],` + `[data-toggle="collapse"][href="#${element.id}"],` +
`[data-toggle="collapse"][data-target="#${element.id}"]` `[data-toggle="collapse"][data-target="#${element.id}"]`
)) ))
@ -69,7 +69,7 @@ class Collapse {
const elem = toggleList[i] const elem = toggleList[i]
const selector = Util.getSelectorFromElement(elem) const selector = Util.getSelectorFromElement(elem)
const filterElement = [].slice.call(document.querySelectorAll(selector)) const filterElement = [].slice.call(document.querySelectorAll(selector))
.filter((foundElem) => foundElem === element) .filter(foundElem => foundElem === element)
if (selector !== null && filterElement.length > 0) { if (selector !== null && filterElement.length > 0) {
this._selector = selector this._selector = selector
@ -119,7 +119,7 @@ class Collapse {
if (this._parent) { if (this._parent) {
actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)) actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))
.filter((elem) => { .filter(elem => {
if (typeof this._config.parent === 'string') { if (typeof this._config.parent === 'string') {
return elem.getAttribute('data-parent') === this._config.parent return elem.getAttribute('data-parent') === this._config.parent
} }
@ -254,10 +254,10 @@ class Collapse {
dispose() { dispose() {
$.removeData(this._element, DATA_KEY) $.removeData(this._element, DATA_KEY)
this._config = null this._config = null
this._parent = null this._parent = null
this._element = null this._element = null
this._triggerArray = null this._triggerArray = null
this._isTransitioning = null this._isTransitioning = null
} }
@ -324,12 +324,12 @@ class Collapse {
static _jQueryInterface(config) { static _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const $this = $(this) const $element = $(this)
let data = $this.data(DATA_KEY) let data = $element.data(DATA_KEY)
const _config = { const _config = {
...Default, ...Default,
...$this.data(), ...$element.data(),
...typeof config === 'object' && config ? config : {} ...(typeof config === 'object' && config ? config : {})
} }
if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
@ -338,13 +338,14 @@ class Collapse {
if (!data) { if (!data) {
data = new Collapse(this, _config) data = new Collapse(this, _config)
$this.data(DATA_KEY, data) $element.data(DATA_KEY, data)
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })
@ -369,8 +370,8 @@ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
$(selectors).each(function () { $(selectors).each(function () {
const $target = $(this) const $target = $(this)
const data = $target.data(DATA_KEY) const data = $target.data(DATA_KEY)
const config = data ? 'toggle' : $trigger.data() const config = data ? 'toggle' : $trigger.data()
Collapse._jQueryInterface.call($target, config) Collapse._jQueryInterface.call($target, config)
}) })
}) })

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): dropdown.js * Bootstrap (v4.6.0): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -15,66 +15,66 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'dropdown' const NAME = 'dropdown'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.dropdown' const DATA_KEY = 'bs.dropdown'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key
const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key
const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key
const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key
const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key
const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse) const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`) const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)
const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_CLICK = `click${EVENT_KEY}` const EVENT_CLICK = `click${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}` const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`
const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}` const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DISABLED = 'disabled' const CLASS_NAME_DISABLED = 'disabled'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_DROPUP = 'dropup' const CLASS_NAME_DROPUP = 'dropup'
const CLASS_NAME_DROPRIGHT = 'dropright' const CLASS_NAME_DROPRIGHT = 'dropright'
const CLASS_NAME_DROPLEFT = 'dropleft' const CLASS_NAME_DROPLEFT = 'dropleft'
const CLASS_NAME_MENURIGHT = 'dropdown-menu-right' const CLASS_NAME_MENURIGHT = 'dropdown-menu-right'
const CLASS_NAME_POSITION_STATIC = 'position-static' const CLASS_NAME_POSITION_STATIC = 'position-static'
const SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]' const SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]'
const SELECTOR_FORM_CHILD = '.dropdown form' const SELECTOR_FORM_CHILD = '.dropdown form'
const SELECTOR_MENU = '.dropdown-menu' const SELECTOR_MENU = '.dropdown-menu'
const SELECTOR_NAVBAR_NAV = '.navbar-nav' const SELECTOR_NAVBAR_NAV = '.navbar-nav'
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'
const PLACEMENT_TOP = 'top-start' const PLACEMENT_TOP = 'top-start'
const PLACEMENT_TOPEND = 'top-end' const PLACEMENT_TOPEND = 'top-end'
const PLACEMENT_BOTTOM = 'bottom-start' const PLACEMENT_BOTTOM = 'bottom-start'
const PLACEMENT_BOTTOMEND = 'bottom-end' const PLACEMENT_BOTTOMEND = 'bottom-end'
const PLACEMENT_RIGHT = 'right-start' const PLACEMENT_RIGHT = 'right-start'
const PLACEMENT_LEFT = 'left-start' const PLACEMENT_LEFT = 'left-start'
const Default = { const Default = {
offset : 0, offset: 0,
flip : true, flip: true,
boundary : 'scrollParent', boundary: 'scrollParent',
reference : 'toggle', reference: 'toggle',
display : 'dynamic', display: 'dynamic',
popperConfig : null popperConfig: null
} }
const DefaultType = { const DefaultType = {
offset : '(number|string|function)', offset: '(number|string|function)',
flip : 'boolean', flip: 'boolean',
boundary : '(string|element)', boundary: '(string|element)',
reference : '(string|element)', reference: '(string|element)',
display : 'string', display: 'string',
popperConfig : '(null|object)' popperConfig: '(null|object)'
} }
/** /**
@ -85,10 +85,10 @@ const DefaultType = {
class Dropdown { class Dropdown {
constructor(element, config) { constructor(element, config) {
this._element = element this._element = element
this._popper = null this._popper = null
this._config = this._getConfig(config) this._config = this._getConfig(config)
this._menu = this._getMenuElement() this._menu = this._getMenuElement()
this._inNavbar = this._detectNavbar() this._inNavbar = this._detectNavbar()
this._addEventListeners() this._addEventListeners()
@ -143,14 +143,14 @@ class Dropdown {
return return
} }
// Disable totally Popper.js for Dropdown in Navbar // Totally disable Popper for Dropdowns in Navbar
if (!this._inNavbar && usePopper) { if (!this._inNavbar && usePopper) {
/** /**
* Check for Popper dependency * Check for Popper dependency
* Popper - https://popper.js.org * Popper - https://popper.js.org
*/ */
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)') throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)')
} }
let referenceElement = this._element let referenceElement = this._element
@ -172,6 +172,7 @@ class Dropdown {
if (this._config.boundary !== 'scrollParent') { if (this._config.boundary !== 'scrollParent') {
$(parent).addClass(CLASS_NAME_POSITION_STATIC) $(parent).addClass(CLASS_NAME_POSITION_STATIC)
} }
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()) this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())
} }
@ -241,7 +242,7 @@ class Dropdown {
// Private // Private
_addEventListeners() { _addEventListeners() {
$(this._element).on(EVENT_CLICK, (event) => { $(this._element).on(EVENT_CLICK, event => {
event.preventDefault() event.preventDefault()
event.stopPropagation() event.stopPropagation()
this.toggle() this.toggle()
@ -272,6 +273,7 @@ class Dropdown {
this._menu = parent.querySelector(SELECTOR_MENU) this._menu = parent.querySelector(SELECTOR_MENU)
} }
} }
return this._menu return this._menu
} }
@ -281,9 +283,9 @@ class Dropdown {
// Handle dropup // Handle dropup
if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?
? PLACEMENT_TOPEND PLACEMENT_TOPEND :
: PLACEMENT_TOP PLACEMENT_TOP
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
placement = PLACEMENT_RIGHT placement = PLACEMENT_RIGHT
} else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
@ -291,6 +293,7 @@ class Dropdown {
} else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) { } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
placement = PLACEMENT_BOTTOMEND placement = PLACEMENT_BOTTOMEND
} }
return placement return placement
} }
@ -302,10 +305,10 @@ class Dropdown {
const offset = {} const offset = {}
if (typeof this._config.offset === 'function') { if (typeof this._config.offset === 'function') {
offset.fn = (data) => { offset.fn = data => {
data.offsets = { data.offsets = {
...data.offsets, ...data.offsets,
...this._config.offset(data.offsets, this._element) || {} ...(this._config.offset(data.offsets, this._element) || {})
} }
return data return data
@ -331,7 +334,7 @@ class Dropdown {
} }
} }
// Disable Popper.js if we have a static display // Disable Popper if we have a static display
if (this._config.display === 'static') { if (this._config.display === 'static') {
popperConfig.modifiers.applyStyle = { popperConfig.modifiers.applyStyle = {
enabled: false enabled: false
@ -360,6 +363,7 @@ class Dropdown {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })
@ -444,8 +448,8 @@ class Dropdown {
// - If key is other than escape // - If key is other than escape
// - If key is not up or down => not a dropdown command // - If key is not up or down => not a dropdown command
// - If trigger inside the menu => not a dropdown command // - If trigger inside the menu => not a dropdown command
if (/input|textarea/i.test(event.target.tagName) if (/input|textarea/i.test(event.target.tagName) ?
? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&
(event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||
$(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
return return
@ -455,7 +459,7 @@ class Dropdown {
return return
} }
const parent = Dropdown._getParentFromElement(this) const parent = Dropdown._getParentFromElement(this)
const isActive = $(parent).hasClass(CLASS_NAME_SHOW) const isActive = $(parent).hasClass(CLASS_NAME_SHOW)
if (!isActive && event.which === ESCAPE_KEYCODE) { if (!isActive && event.which === ESCAPE_KEYCODE) {
@ -465,7 +469,7 @@ class Dropdown {
event.preventDefault() event.preventDefault()
event.stopPropagation() event.stopPropagation()
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {
if (event.which === ESCAPE_KEYCODE) { if (event.which === ESCAPE_KEYCODE) {
$(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus') $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')
} }
@ -475,7 +479,7 @@ class Dropdown {
} }
const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)) const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))
.filter((item) => $(item).is(':visible')) .filter(item => $(item).is(':visible'))
if (items.length === 0) { if (items.length === 0) {
return return
@ -514,7 +518,7 @@ $(document)
event.stopPropagation() event.stopPropagation()
Dropdown._jQueryInterface.call($(this), 'toggle') Dropdown._jQueryInterface.call($(this), 'toggle')
}) })
.on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, (e) => { .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {
e.stopPropagation() e.stopPropagation()
}) })

View file

@ -1,34 +0,0 @@
import Alert from './alert'
import Button from './button'
import Carousel from './carousel'
import Collapse from './collapse'
import Dropdown from './dropdown'
import Modal from './modal'
import Popover from './popover'
import Scrollspy from './scrollspy'
import Tab from './tab'
import Toast from './toast'
import Tooltip from './tooltip'
import Util from './util'
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.5.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
export {
Util,
Alert,
Button,
Carousel,
Collapse,
Dropdown,
Modal,
Popover,
Scrollspy,
Tab,
Toast,
Tooltip
}

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): modal.js * Bootstrap (v4.6.0): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,54 +14,54 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'modal' const NAME = 'modal'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.modal' const DATA_KEY = 'bs.modal'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key
const Default = { const Default = {
backdrop : true, backdrop: true,
keyboard : true, keyboard: true,
focus : true, focus: true,
show : true show: true
} }
const DefaultType = { const DefaultType = {
backdrop : '(boolean|string)', backdrop: '(boolean|string)',
keyboard : 'boolean', keyboard: 'boolean',
focus : 'boolean', focus: 'boolean',
show : 'boolean' show: 'boolean'
} }
const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}` const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_FOCUSIN = `focusin${EVENT_KEY}` const EVENT_FOCUSIN = `focusin${EVENT_KEY}`
const EVENT_RESIZE = `resize${EVENT_KEY}` const EVENT_RESIZE = `resize${EVENT_KEY}`
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}` const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}` const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`
const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}` const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`
const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}` const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable' const CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'
const CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure' const CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'
const CLASS_NAME_BACKDROP = 'modal-backdrop' const CLASS_NAME_BACKDROP = 'modal-backdrop'
const CLASS_NAME_OPEN = 'modal-open' const CLASS_NAME_OPEN = 'modal-open'
const CLASS_NAME_FADE = 'fade' const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_STATIC = 'modal-static' const CLASS_NAME_STATIC = 'modal-static'
const SELECTOR_DIALOG = '.modal-dialog' const SELECTOR_DIALOG = '.modal-dialog'
const SELECTOR_MODAL_BODY = '.modal-body' const SELECTOR_MODAL_BODY = '.modal-body'
const SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]' const SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]'
const SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]' const SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]'
const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top' const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'
const SELECTOR_STICKY_CONTENT = '.sticky-top' const SELECTOR_STICKY_CONTENT = '.sticky-top'
/** /**
@ -72,15 +72,15 @@ const SELECTOR_STICKY_CONTENT = '.sticky-top'
class Modal { class Modal {
constructor(element, config) { constructor(element, config) {
this._config = this._getConfig(config) this._config = this._getConfig(config)
this._element = element this._element = element
this._dialog = element.querySelector(SELECTOR_DIALOG) this._dialog = element.querySelector(SELECTOR_DIALOG)
this._backdrop = null this._backdrop = null
this._isShown = false this._isShown = false
this._isBodyOverflowing = false this._isBodyOverflowing = false
this._ignoreBackdropClick = false this._ignoreBackdropClick = false
this._isTransitioning = false this._isTransitioning = false
this._scrollbarWidth = 0 this._scrollbarWidth = 0
} }
// Getters // Getters
@ -131,11 +131,11 @@ class Modal {
$(this._element).on( $(this._element).on(
EVENT_CLICK_DISMISS, EVENT_CLICK_DISMISS,
SELECTOR_DATA_DISMISS, SELECTOR_DATA_DISMISS,
(event) => this.hide(event) event => this.hide(event)
) )
$(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => { $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {
$(this._element).one(EVENT_MOUSEUP_DISMISS, (event) => { $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {
if ($(event.target).is(this._element)) { if ($(event.target).is(this._element)) {
this._ignoreBackdropClick = true this._ignoreBackdropClick = true
} }
@ -180,10 +180,10 @@ class Modal {
$(this._dialog).off(EVENT_MOUSEDOWN_DISMISS) $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)
if (transition) { if (transition) {
const transitionDuration = Util.getTransitionDurationFromElement(this._element) const transitionDuration = Util.getTransitionDurationFromElement(this._element)
$(this._element) $(this._element)
.one(Util.TRANSITION_END, (event) => this._hideModal(event)) .one(Util.TRANSITION_END, event => this._hideModal(event))
.emulateTransitionEnd(transitionDuration) .emulateTransitionEnd(transitionDuration)
} else { } else {
this._hideModal() this._hideModal()
@ -192,7 +192,7 @@ class Modal {
dispose() { dispose() {
[window, this._element, this._dialog] [window, this._element, this._dialog]
.forEach((htmlElement) => $(htmlElement).off(EVENT_KEY)) .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))
/** /**
* `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
@ -203,15 +203,15 @@ class Modal {
$.removeData(this._element, DATA_KEY) $.removeData(this._element, DATA_KEY)
this._config = null this._config = null
this._element = null this._element = null
this._dialog = null this._dialog = null
this._backdrop = null this._backdrop = null
this._isShown = null this._isShown = null
this._isBodyOverflowing = null this._isBodyOverflowing = null
this._ignoreBackdropClick = null this._ignoreBackdropClick = null
this._isTransitioning = null this._isTransitioning = null
this._scrollbarWidth = null this._scrollbarWidth = null
} }
handleUpdate() { handleUpdate() {
@ -230,26 +230,35 @@ class Modal {
} }
_triggerBackdropTransition() { _triggerBackdropTransition() {
if (this._config.backdrop === 'static') { const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)
const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)
$(this._element).trigger(hideEventPrevented) $(this._element).trigger(hideEventPrevented)
if (hideEventPrevented.defaultPrevented) { if (hideEventPrevented.isDefaultPrevented()) {
return return
}
this._element.classList.add(CLASS_NAME_STATIC)
const modalTransitionDuration = Util.getTransitionDurationFromElement(this._element)
$(this._element).one(Util.TRANSITION_END, () => {
this._element.classList.remove(CLASS_NAME_STATIC)
})
.emulateTransitionEnd(modalTransitionDuration)
this._element.focus()
} else {
this.hide()
} }
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden'
}
this._element.classList.add(CLASS_NAME_STATIC)
const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)
$(this._element).off(Util.TRANSITION_END)
$(this._element).one(Util.TRANSITION_END, () => {
this._element.classList.remove(CLASS_NAME_STATIC)
if (!isModalOverflowing) {
$(this._element).one(Util.TRANSITION_END, () => {
this._element.style.overflowY = ''
})
.emulateTransitionEnd(this._element, modalTransitionDuration)
}
})
.emulateTransitionEnd(modalTransitionDuration)
this._element.focus()
} }
_showElement(relatedTarget) { _showElement(relatedTarget) {
@ -265,6 +274,7 @@ class Modal {
this._element.style.display = 'block' this._element.style.display = 'block'
this._element.removeAttribute('aria-hidden') this._element.removeAttribute('aria-hidden')
this._element.setAttribute('aria-modal', true) this._element.setAttribute('aria-modal', true)
this._element.setAttribute('role', 'dialog')
if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
modalBody.scrollTop = 0 modalBody.scrollTop = 0
@ -290,12 +300,13 @@ class Modal {
if (this._config.focus) { if (this._config.focus) {
this._element.focus() this._element.focus()
} }
this._isTransitioning = false this._isTransitioning = false
$(this._element).trigger(shownEvent) $(this._element).trigger(shownEvent)
} }
if (transition) { if (transition) {
const transitionDuration = Util.getTransitionDurationFromElement(this._dialog) const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)
$(this._dialog) $(this._dialog)
.one(Util.TRANSITION_END, transitionComplete) .one(Util.TRANSITION_END, transitionComplete)
@ -308,7 +319,7 @@ class Modal {
_enforceFocus() { _enforceFocus() {
$(document) $(document)
.off(EVENT_FOCUSIN) // Guard against infinite focus loop .off(EVENT_FOCUSIN) // Guard against infinite focus loop
.on(EVENT_FOCUSIN, (event) => { .on(EVENT_FOCUSIN, event => {
if (document !== event.target && if (document !== event.target &&
this._element !== event.target && this._element !== event.target &&
$(this._element).has(event.target).length === 0) { $(this._element).has(event.target).length === 0) {
@ -319,7 +330,7 @@ class Modal {
_setEscapeEvent() { _setEscapeEvent() {
if (this._isShown) { if (this._isShown) {
$(this._element).on(EVENT_KEYDOWN_DISMISS, (event) => { $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {
if (this._config.keyboard && event.which === ESCAPE_KEYCODE) { if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {
event.preventDefault() event.preventDefault()
this.hide() this.hide()
@ -334,7 +345,7 @@ class Modal {
_setResizeEvent() { _setResizeEvent() {
if (this._isShown) { if (this._isShown) {
$(window).on(EVENT_RESIZE, (event) => this.handleUpdate(event)) $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))
} else { } else {
$(window).off(EVENT_RESIZE) $(window).off(EVENT_RESIZE)
} }
@ -344,6 +355,7 @@ class Modal {
this._element.style.display = 'none' this._element.style.display = 'none'
this._element.setAttribute('aria-hidden', true) this._element.setAttribute('aria-hidden', true)
this._element.removeAttribute('aria-modal') this._element.removeAttribute('aria-modal')
this._element.removeAttribute('role')
this._isTransitioning = false this._isTransitioning = false
this._showBackdrop(() => { this._showBackdrop(() => {
$(document.body).removeClass(CLASS_NAME_OPEN) $(document.body).removeClass(CLASS_NAME_OPEN)
@ -361,8 +373,8 @@ class Modal {
} }
_showBackdrop(callback) { _showBackdrop(callback) {
const animate = $(this._element).hasClass(CLASS_NAME_FADE) const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?
? CLASS_NAME_FADE : '' CLASS_NAME_FADE : ''
if (this._isShown && this._config.backdrop) { if (this._isShown && this._config.backdrop) {
this._backdrop = document.createElement('div') this._backdrop = document.createElement('div')
@ -374,16 +386,21 @@ class Modal {
$(this._backdrop).appendTo(document.body) $(this._backdrop).appendTo(document.body)
$(this._element).on(EVENT_CLICK_DISMISS, (event) => { $(this._element).on(EVENT_CLICK_DISMISS, event => {
if (this._ignoreBackdropClick) { if (this._ignoreBackdropClick) {
this._ignoreBackdropClick = false this._ignoreBackdropClick = false
return return
} }
if (event.target !== event.currentTarget) { if (event.target !== event.currentTarget) {
return return
} }
this._triggerBackdropTransition() if (this._config.backdrop === 'static') {
this._triggerBackdropTransition()
} else {
this.hide()
}
}) })
if (animate) { if (animate) {
@ -436,8 +453,7 @@ class Modal {
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
_adjustDialog() { _adjustDialog() {
const isModalOverflowing = const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight
this._element.scrollHeight > document.documentElement.clientHeight
if (!this._isBodyOverflowing && isModalOverflowing) { if (!this._isBodyOverflowing && isModalOverflowing) {
this._element.style.paddingLeft = `${this._scrollbarWidth}px` this._element.style.paddingLeft = `${this._scrollbarWidth}px`
@ -536,7 +552,7 @@ class Modal {
const _config = { const _config = {
...Default, ...Default,
...$(this).data(), ...$(this).data(),
...typeof config === 'object' && config ? config : {} ...(typeof config === 'object' && config ? config : {})
} }
if (!data) { if (!data) {
@ -548,6 +564,7 @@ class Modal {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config](relatedTarget) data[config](relatedTarget)
} else if (_config.show) { } else if (_config.show) {
data.show(relatedTarget) data.show(relatedTarget)
@ -570,8 +587,8 @@ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
target = document.querySelector(selector) target = document.querySelector(selector)
} }
const config = $(target).data(DATA_KEY) const config = $(target).data(DATA_KEY) ?
? 'toggle' : { 'toggle' : {
...$(target).data(), ...$(target).data(),
...$(this).data() ...$(this).data()
} }
@ -580,7 +597,7 @@ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault() event.preventDefault()
} }
const $target = $(target).one(EVENT_SHOW, (showEvent) => { const $target = $(target).one(EVENT_SHOW, showEvent => {
if (showEvent.isDefaultPrevented()) { if (showEvent.isDefaultPrevented()) {
// Only register focus restorer if modal will actually get shown // Only register focus restorer if modal will actually get shown
return return

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): popover.js * Bootstrap (v4.6.0): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,20 +14,20 @@ import Tooltip from './tooltip'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'popover' const NAME = 'popover'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.popover' const DATA_KEY = 'bs.popover'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_PREFIX = 'bs-popover' const CLASS_PREFIX = 'bs-popover'
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
const Default = { const Default = {
...Tooltip.Default, ...Tooltip.Default,
placement : 'right', placement: 'right',
trigger : 'click', trigger: 'click',
content : '', content: '',
template : '<div class="popover" role="tooltip">' + template: '<div class="popover" role="tooltip">' +
'<div class="arrow"></div>' + '<div class="arrow"></div>' +
'<h3 class="popover-header"></h3>' + '<h3 class="popover-header"></h3>' +
'<div class="popover-body"></div></div>' '<div class="popover-body"></div></div>'
@ -35,26 +35,26 @@ const Default = {
const DefaultType = { const DefaultType = {
...Tooltip.DefaultType, ...Tooltip.DefaultType,
content : '(string|element|function)' content: '(string|element|function)'
} }
const CLASS_NAME_FADE = 'fade' const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const SELECTOR_TITLE = '.popover-header' const SELECTOR_TITLE = '.popover-header'
const SELECTOR_CONTENT = '.popover-body' const SELECTOR_CONTENT = '.popover-body'
const Event = { const Event = {
HIDE : `hide${EVENT_KEY}`, HIDE: `hide${EVENT_KEY}`,
HIDDEN : `hidden${EVENT_KEY}`, HIDDEN: `hidden${EVENT_KEY}`,
SHOW : `show${EVENT_KEY}`, SHOW: `show${EVENT_KEY}`,
SHOWN : `shown${EVENT_KEY}`, SHOWN: `shown${EVENT_KEY}`,
INSERTED : `inserted${EVENT_KEY}`, INSERTED: `inserted${EVENT_KEY}`,
CLICK : `click${EVENT_KEY}`, CLICK: `click${EVENT_KEY}`,
FOCUSIN : `focusin${EVENT_KEY}`, FOCUSIN: `focusin${EVENT_KEY}`,
FOCUSOUT : `focusout${EVENT_KEY}`, FOCUSOUT: `focusout${EVENT_KEY}`,
MOUSEENTER : `mouseenter${EVENT_KEY}`, MOUSEENTER: `mouseenter${EVENT_KEY}`,
MOUSELEAVE : `mouseleave${EVENT_KEY}` MOUSELEAVE: `mouseleave${EVENT_KEY}`
} }
/** /**
@ -118,6 +118,7 @@ class Popover extends Tooltip {
if (typeof content === 'function') { if (typeof content === 'function') {
content = content.call(this.element) content = content.call(this.element)
} }
this.setElementContent($tip.find(SELECTOR_CONTENT), content) this.setElementContent($tip.find(SELECTOR_CONTENT), content)
$tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`) $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)
@ -158,6 +159,7 @@ class Popover extends Tooltip {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): scrollspy.js * Bootstrap (v4.6.0): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,42 +14,42 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'scrollspy' const NAME = 'scrollspy'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.scrollspy' const DATA_KEY = 'bs.scrollspy'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const Default = { const Default = {
offset : 10, offset: 10,
method : 'auto', method: 'auto',
target : '' target: ''
} }
const DefaultType = { const DefaultType = {
offset : 'number', offset: 'number',
method : 'string', method: 'string',
target : '(string|element)' target: '(string|element)'
} }
const EVENT_ACTIVATE = `activate${EVENT_KEY}` const EVENT_ACTIVATE = `activate${EVENT_KEY}`
const EVENT_SCROLL = `scroll${EVENT_KEY}` const EVENT_SCROLL = `scroll${EVENT_KEY}`
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item' const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'
const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_ACTIVE = 'active'
const SELECTOR_DATA_SPY = '[data-spy="scroll"]' const SELECTOR_DATA_SPY = '[data-spy="scroll"]'
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group' const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
const SELECTOR_NAV_LINKS = '.nav-link' const SELECTOR_NAV_LINKS = '.nav-link'
const SELECTOR_NAV_ITEMS = '.nav-item' const SELECTOR_NAV_ITEMS = '.nav-item'
const SELECTOR_LIST_ITEMS = '.list-group-item' const SELECTOR_LIST_ITEMS = '.list-group-item'
const SELECTOR_DROPDOWN = '.dropdown' const SELECTOR_DROPDOWN = '.dropdown'
const SELECTOR_DROPDOWN_ITEMS = '.dropdown-item' const SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle' const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
const METHOD_OFFSET = 'offset' const METHOD_OFFSET = 'offset'
const METHOD_POSITION = 'position' const METHOD_POSITION = 'position'
/** /**
@ -60,18 +60,18 @@ const METHOD_POSITION = 'position'
class ScrollSpy { class ScrollSpy {
constructor(element, config) { constructor(element, config) {
this._element = element this._element = element
this._scrollElement = element.tagName === 'BODY' ? window : element this._scrollElement = element.tagName === 'BODY' ? window : element
this._config = this._getConfig(config) this._config = this._getConfig(config)
this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` + this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +
`${this._config.target} ${SELECTOR_LIST_ITEMS},` + `${this._config.target} ${SELECTOR_LIST_ITEMS},` +
`${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}` `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`
this._offsets = [] this._offsets = []
this._targets = [] this._targets = []
this._activeTarget = null this._activeTarget = null
this._scrollHeight = 0 this._scrollHeight = 0
$(this._scrollElement).on(EVENT_SCROLL, (event) => this._process(event)) $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))
this.refresh() this.refresh()
this._process() this._process()
@ -90,14 +90,14 @@ class ScrollSpy {
// Public // Public
refresh() { refresh() {
const autoMethod = this._scrollElement === this._scrollElement.window const autoMethod = this._scrollElement === this._scrollElement.window ?
? METHOD_OFFSET : METHOD_POSITION METHOD_OFFSET : METHOD_POSITION
const offsetMethod = this._config.method === 'auto' const offsetMethod = this._config.method === 'auto' ?
? autoMethod : this._config.method autoMethod : this._config.method
const offsetBase = offsetMethod === METHOD_POSITION const offsetBase = offsetMethod === METHOD_POSITION ?
? this._getScrollTop() : 0 this._getScrollTop() : 0
this._offsets = [] this._offsets = []
this._targets = [] this._targets = []
@ -107,7 +107,7 @@ class ScrollSpy {
const targets = [].slice.call(document.querySelectorAll(this._selector)) const targets = [].slice.call(document.querySelectorAll(this._selector))
targets targets
.map((element) => { .map(element => {
let target let target
const targetSelector = Util.getSelectorFromElement(element) const targetSelector = Util.getSelectorFromElement(element)
@ -125,11 +125,12 @@ class ScrollSpy {
] ]
} }
} }
return null return null
}) })
.filter((item) => item) .filter(item => item)
.sort((a, b) => a[0] - b[0]) .sort((a, b) => a[0] - b[0])
.forEach((item) => { .forEach(item => {
this._offsets.push(item[0]) this._offsets.push(item[0])
this._targets.push(item[1]) this._targets.push(item[1])
}) })
@ -139,14 +140,14 @@ class ScrollSpy {
$.removeData(this._element, DATA_KEY) $.removeData(this._element, DATA_KEY)
$(this._scrollElement).off(EVENT_KEY) $(this._scrollElement).off(EVENT_KEY)
this._element = null this._element = null
this._scrollElement = null this._scrollElement = null
this._config = null this._config = null
this._selector = null this._selector = null
this._offsets = null this._offsets = null
this._targets = null this._targets = null
this._activeTarget = null this._activeTarget = null
this._scrollHeight = null this._scrollHeight = null
} }
// Private // Private
@ -154,7 +155,7 @@ class ScrollSpy {
_getConfig(config) { _getConfig(config) {
config = { config = {
...Default, ...Default,
...typeof config === 'object' && config ? config : {} ...(typeof config === 'object' && config ? config : {})
} }
if (typeof config.target !== 'string' && Util.isElement(config.target)) { if (typeof config.target !== 'string' && Util.isElement(config.target)) {
@ -163,6 +164,7 @@ class ScrollSpy {
id = Util.getUID(NAME) id = Util.getUID(NAME)
$(config.target).attr('id', id) $(config.target).attr('id', id)
} }
config.target = `#${id}` config.target = `#${id}`
} }
@ -172,8 +174,8 @@ class ScrollSpy {
} }
_getScrollTop() { _getScrollTop() {
return this._scrollElement === window return this._scrollElement === window ?
? this._scrollElement.pageYOffset : this._scrollElement.scrollTop this._scrollElement.pageYOffset : this._scrollElement.scrollTop
} }
_getScrollHeight() { _getScrollHeight() {
@ -184,14 +186,14 @@ class ScrollSpy {
} }
_getOffsetHeight() { _getOffsetHeight() {
return this._scrollElement === window return this._scrollElement === window ?
? window.innerHeight : this._scrollElement.getBoundingClientRect().height window.innerHeight : this._scrollElement.getBoundingClientRect().height
} }
_process() { _process() {
const scrollTop = this._getScrollTop() + this._config.offset const scrollTop = this._getScrollTop() + this._config.offset
const scrollHeight = this._getScrollHeight() const scrollHeight = this._getScrollHeight()
const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight() const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()
if (this._scrollHeight !== scrollHeight) { if (this._scrollHeight !== scrollHeight) {
this.refresh() this.refresh()
@ -203,6 +205,7 @@ class ScrollSpy {
if (this._activeTarget !== target) { if (this._activeTarget !== target) {
this._activate(target) this._activate(target)
} }
return return
} }
@ -231,7 +234,7 @@ class ScrollSpy {
const queries = this._selector const queries = this._selector
.split(',') .split(',')
.map((selector) => `${selector}[data-target="${target}"],${selector}[href="${target}"]`) .map(selector => `${selector}[data-target="${target}"],${selector}[href="${target}"]`)
const $link = $([].slice.call(document.querySelectorAll(queries.join(',')))) const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))
@ -262,8 +265,8 @@ class ScrollSpy {
_clear() { _clear() {
[].slice.call(document.querySelectorAll(this._selector)) [].slice.call(document.querySelectorAll(this._selector))
.filter((node) => node.classList.contains(CLASS_NAME_ACTIVE)) .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))
.forEach((node) => node.classList.remove(CLASS_NAME_ACTIVE)) .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))
} }
// Static // Static
@ -282,6 +285,7 @@ class ScrollSpy {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): tab.js * Bootstrap (v4.6.0): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,31 +14,31 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'tab' const NAME = 'tab'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.tab' const DATA_KEY = 'bs.tab'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const DATA_API_KEY = '.data-api' const DATA_API_KEY = '.data-api'
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}`
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`
const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu' const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'
const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_ACTIVE = 'active'
const CLASS_NAME_DISABLED = 'disabled' const CLASS_NAME_DISABLED = 'disabled'
const CLASS_NAME_FADE = 'fade' const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const SELECTOR_DROPDOWN = '.dropdown' const SELECTOR_DROPDOWN = '.dropdown'
const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group' const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'
const SELECTOR_ACTIVE = '.active' const SELECTOR_ACTIVE = '.active'
const SELECTOR_ACTIVE_UL = '> li > .active' const SELECTOR_ACTIVE_UL = '> li > .active'
const SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]' const SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]'
const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle' const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'
const SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active' const SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'
/** /**
@ -135,9 +135,9 @@ class Tab {
// Private // Private
_activate(element, container, callback) { _activate(element, container, callback) {
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?
? $(container).find(SELECTOR_ACTIVE_UL) $(container).find(SELECTOR_ACTIVE_UL) :
: $(container).children(SELECTOR_ACTIVE) $(container).children(SELECTOR_ACTIVE)
const active = activeElements[0] const active = activeElements[0]
const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE)) const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))
@ -220,6 +220,7 @@ class Tab {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): toast.js * Bootstrap (v4.6.0): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -14,33 +14,33 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'toast' const NAME = 'toast'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.toast' const DATA_KEY = 'bs.toast'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}` const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`
const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}`
const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}`
const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}`
const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}`
const CLASS_NAME_FADE = 'fade' const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_HIDE = 'hide' const CLASS_NAME_HIDE = 'hide'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const CLASS_NAME_SHOWING = 'showing' const CLASS_NAME_SHOWING = 'showing'
const DefaultType = { const DefaultType = {
animation : 'boolean', animation: 'boolean',
autohide : 'boolean', autohide: 'boolean',
delay : 'number' delay: 'number'
} }
const Default = { const Default = {
animation : true, animation: true,
autohide : true, autohide: true,
delay : 500 delay: 500
} }
const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]' const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'
@ -54,7 +54,7 @@ const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]'
class Toast { class Toast {
constructor(element, config) { constructor(element, config) {
this._element = element this._element = element
this._config = this._getConfig(config) this._config = this._getConfig(config)
this._timeout = null this._timeout = null
this._setListeners() this._setListeners()
} }
@ -83,6 +83,8 @@ class Toast {
return return
} }
this._clearTimeout()
if (this._config.animation) { if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE) this._element.classList.add(CLASS_NAME_FADE)
} }
@ -130,8 +132,7 @@ class Toast {
} }
dispose() { dispose() {
clearTimeout(this._timeout) this._clearTimeout()
this._timeout = null
if (this._element.classList.contains(CLASS_NAME_SHOW)) { if (this._element.classList.contains(CLASS_NAME_SHOW)) {
this._element.classList.remove(CLASS_NAME_SHOW) this._element.classList.remove(CLASS_NAME_SHOW)
@ -141,7 +142,7 @@ class Toast {
$.removeData(this._element, DATA_KEY) $.removeData(this._element, DATA_KEY)
this._element = null this._element = null
this._config = null this._config = null
} }
// Private // Private
@ -150,7 +151,7 @@ class Toast {
config = { config = {
...Default, ...Default,
...$(this._element).data(), ...$(this._element).data(),
...typeof config === 'object' && config ? config : {} ...(typeof config === 'object' && config ? config : {})
} }
Util.typeCheckConfig( Util.typeCheckConfig(
@ -184,13 +185,18 @@ class Toast {
} }
} }
_clearTimeout() {
clearTimeout(this._timeout)
this._timeout = null
}
// Static // Static
static _jQueryInterface(config) { static _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const $element = $(this) const $element = $(this)
let data = $element.data(DATA_KEY) let data = $element.data(DATA_KEY)
const _config = typeof config === 'object' && config const _config = typeof config === 'object' && config
if (!data) { if (!data) {
data = new Toast(this, _config) data = new Toast(this, _config)
@ -214,9 +220,9 @@ class Toast {
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
$.fn[NAME] = Toast._jQueryInterface $.fn[NAME] = Toast._jQueryInterface
$.fn[NAME].Constructor = Toast $.fn[NAME].Constructor = Toast
$.fn[NAME].noConflict = () => { $.fn[NAME].noConflict = () => {
$.fn[NAME] = JQUERY_NO_CONFLICT $.fn[NAME] = JQUERY_NO_CONFLICT
return Toast._jQueryInterface return Toast._jQueryInterface
} }

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): tools/sanitizer.js * Bootstrap (v4.6.0): tools/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -77,7 +77,7 @@ function allowedAttribute(attr, allowedAttributeList) {
return true return true
} }
const regExp = allowedAttributeList.filter((attrRegex) => attrRegex instanceof RegExp) const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)
// Check if a regular expression validates the attribute. // Check if a regular expression validates the attribute.
for (let i = 0, len = regExp.length; i < len; i++) { for (let i = 0, len = regExp.length; i < len; i++) {
@ -116,7 +116,7 @@ export function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
const attributeList = [].slice.call(el.attributes) const attributeList = [].slice.call(el.attributes)
const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []) const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])
attributeList.forEach((attr) => { attributeList.forEach(attr => {
if (!allowedAttribute(attr, whitelistedAttributes)) { if (!allowedAttribute(attr, whitelistedAttributes)) {
el.removeAttribute(attr.nodeName) el.removeAttribute(attr.nodeName)
} }

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): tooltip.js * Bootstrap (v4.6.0): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -19,88 +19,90 @@ import Util from './util'
* ------------------------------------------------------------------------ * ------------------------------------------------------------------------
*/ */
const NAME = 'tooltip' const NAME = 'tooltip'
const VERSION = '4.5.0' const VERSION = '4.6.0'
const DATA_KEY = 'bs.tooltip' const DATA_KEY = 'bs.tooltip'
const EVENT_KEY = `.${DATA_KEY}` const EVENT_KEY = `.${DATA_KEY}`
const JQUERY_NO_CONFLICT = $.fn[NAME] const JQUERY_NO_CONFLICT = $.fn[NAME]
const CLASS_PREFIX = 'bs-tooltip' const CLASS_PREFIX = 'bs-tooltip'
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g')
const DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'] const DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']
const DefaultType = { const DefaultType = {
animation : 'boolean', animation: 'boolean',
template : 'string', template: 'string',
title : '(string|element|function)', title: '(string|element|function)',
trigger : 'string', trigger: 'string',
delay : '(number|object)', delay: '(number|object)',
html : 'boolean', html: 'boolean',
selector : '(string|boolean)', selector: '(string|boolean)',
placement : '(string|function)', placement: '(string|function)',
offset : '(number|string|function)', offset: '(number|string|function)',
container : '(string|element|boolean)', container: '(string|element|boolean)',
fallbackPlacement : '(string|array)', fallbackPlacement: '(string|array)',
boundary : '(string|element)', boundary: '(string|element)',
sanitize : 'boolean', customClass: '(string|function)',
sanitizeFn : '(null|function)', sanitize: 'boolean',
whiteList : 'object', sanitizeFn: '(null|function)',
popperConfig : '(null|object)' whiteList: 'object',
popperConfig: '(null|object)'
} }
const AttachmentMap = { const AttachmentMap = {
AUTO : 'auto', AUTO: 'auto',
TOP : 'top', TOP: 'top',
RIGHT : 'right', RIGHT: 'right',
BOTTOM : 'bottom', BOTTOM: 'bottom',
LEFT : 'left' LEFT: 'left'
} }
const Default = { const Default = {
animation : true, animation: true,
template : '<div class="tooltip" role="tooltip">' + template: '<div class="tooltip" role="tooltip">' +
'<div class="arrow"></div>' + '<div class="arrow"></div>' +
'<div class="tooltip-inner"></div></div>', '<div class="tooltip-inner"></div></div>',
trigger : 'hover focus', trigger: 'hover focus',
title : '', title: '',
delay : 0, delay: 0,
html : false, html: false,
selector : false, selector: false,
placement : 'top', placement: 'top',
offset : 0, offset: 0,
container : false, container: false,
fallbackPlacement : 'flip', fallbackPlacement: 'flip',
boundary : 'scrollParent', boundary: 'scrollParent',
sanitize : true, customClass: '',
sanitizeFn : null, sanitize: true,
whiteList : DefaultWhitelist, sanitizeFn: null,
popperConfig : null whiteList: DefaultWhitelist,
popperConfig: null
} }
const HOVER_STATE_SHOW = 'show' const HOVER_STATE_SHOW = 'show'
const HOVER_STATE_OUT = 'out' const HOVER_STATE_OUT = 'out'
const Event = { const Event = {
HIDE : `hide${EVENT_KEY}`, HIDE: `hide${EVENT_KEY}`,
HIDDEN : `hidden${EVENT_KEY}`, HIDDEN: `hidden${EVENT_KEY}`,
SHOW : `show${EVENT_KEY}`, SHOW: `show${EVENT_KEY}`,
SHOWN : `shown${EVENT_KEY}`, SHOWN: `shown${EVENT_KEY}`,
INSERTED : `inserted${EVENT_KEY}`, INSERTED: `inserted${EVENT_KEY}`,
CLICK : `click${EVENT_KEY}`, CLICK: `click${EVENT_KEY}`,
FOCUSIN : `focusin${EVENT_KEY}`, FOCUSIN: `focusin${EVENT_KEY}`,
FOCUSOUT : `focusout${EVENT_KEY}`, FOCUSOUT: `focusout${EVENT_KEY}`,
MOUSEENTER : `mouseenter${EVENT_KEY}`, MOUSEENTER: `mouseenter${EVENT_KEY}`,
MOUSELEAVE : `mouseleave${EVENT_KEY}` MOUSELEAVE: `mouseleave${EVENT_KEY}`
} }
const CLASS_NAME_FADE = 'fade' const CLASS_NAME_FADE = 'fade'
const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOW = 'show'
const SELECTOR_TOOLTIP_INNER = '.tooltip-inner' const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'
const SELECTOR_ARROW = '.arrow' const SELECTOR_ARROW = '.arrow'
const TRIGGER_HOVER = 'hover' const TRIGGER_HOVER = 'hover'
const TRIGGER_FOCUS = 'focus' const TRIGGER_FOCUS = 'focus'
const TRIGGER_CLICK = 'click' const TRIGGER_CLICK = 'click'
const TRIGGER_MANUAL = 'manual' const TRIGGER_MANUAL = 'manual'
/** /**
@ -112,20 +114,20 @@ const TRIGGER_MANUAL = 'manual'
class Tooltip { class Tooltip {
constructor(element, config) { constructor(element, config) {
if (typeof Popper === 'undefined') { if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)') throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)')
} }
// private // private
this._isEnabled = true this._isEnabled = true
this._timeout = 0 this._timeout = 0
this._hoverState = '' this._hoverState = ''
this._activeTrigger = {} this._activeTrigger = {}
this._popper = null this._popper = null
// Protected // Protected
this.element = element this.element = element
this.config = this._getConfig(config) this.config = this._getConfig(config)
this.tip = null this.tip = null
this._setListeners() this._setListeners()
} }
@ -220,9 +222,9 @@ class Tooltip {
$(this.tip).remove() $(this.tip).remove()
} }
this._isEnabled = null this._isEnabled = null
this._timeout = null this._timeout = null
this._hoverState = null this._hoverState = null
this._activeTrigger = null this._activeTrigger = null
if (this._popper) { if (this._popper) {
this._popper.destroy() this._popper.destroy()
@ -230,8 +232,8 @@ class Tooltip {
this._popper = null this._popper = null
this.element = null this.element = null
this.config = null this.config = null
this.tip = null this.tip = null
} }
show() { show() {
@ -253,7 +255,7 @@ class Tooltip {
return return
} }
const tip = this.getTipElement() const tip = this.getTipElement()
const tipId = Util.getUID(this.constructor.NAME) const tipId = Util.getUID(this.constructor.NAME)
tip.setAttribute('id', tipId) tip.setAttribute('id', tipId)
@ -265,9 +267,9 @@ class Tooltip {
$(tip).addClass(CLASS_NAME_FADE) $(tip).addClass(CLASS_NAME_FADE)
} }
const placement = typeof this.config.placement === 'function' const placement = typeof this.config.placement === 'function' ?
? this.config.placement.call(this, tip, this.element) this.config.placement.call(this, tip, this.element) :
: this.config.placement this.config.placement
const attachment = this._getAttachment(placement) const attachment = this._getAttachment(placement)
this.addAttachmentClass(attachment) this.addAttachmentClass(attachment)
@ -284,6 +286,7 @@ class Tooltip {
this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)) this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))
$(tip).addClass(CLASS_NAME_SHOW) $(tip).addClass(CLASS_NAME_SHOW)
$(tip).addClass(this.config.customClass)
// If this is a touch-enabled device we add extra // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
@ -297,8 +300,9 @@ class Tooltip {
if (this.config.animation) { if (this.config.animation) {
this._fixTransition() this._fixTransition()
} }
const prevHoverState = this._hoverState const prevHoverState = this._hoverState
this._hoverState = null this._hoverState = null
$(this.element).trigger(this.constructor.Event.SHOWN) $(this.element).trigger(this.constructor.Event.SHOWN)
@ -320,7 +324,7 @@ class Tooltip {
} }
hide(callback) { hide(callback) {
const tip = this.getTipElement() const tip = this.getTipElement()
const hideEvent = $.Event(this.constructor.Event.HIDE) const hideEvent = $.Event(this.constructor.Event.HIDE)
const complete = () => { const complete = () => {
if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
@ -426,9 +430,9 @@ class Tooltip {
let title = this.element.getAttribute('data-original-title') let title = this.element.getAttribute('data-original-title')
if (!title) { if (!title) {
title = typeof this.config.title === 'function' title = typeof this.config.title === 'function' ?
? this.config.title.call(this.element) this.config.title.call(this.element) :
: this.config.title this.config.title
} }
return title return title
@ -451,12 +455,12 @@ class Tooltip {
boundariesElement: this.config.boundary boundariesElement: this.config.boundary
} }
}, },
onCreate: (data) => { onCreate: data => {
if (data.originalPlacement !== data.placement) { if (data.originalPlacement !== data.placement) {
this._handlePopperPlacementChange(data) this._handlePopperPlacementChange(data)
} }
}, },
onUpdate: (data) => this._handlePopperPlacementChange(data) onUpdate: data => this._handlePopperPlacementChange(data)
} }
return { return {
@ -469,10 +473,10 @@ class Tooltip {
const offset = {} const offset = {}
if (typeof this.config.offset === 'function') { if (typeof this.config.offset === 'function') {
offset.fn = (data) => { offset.fn = data => {
data.offsets = { data.offsets = {
...data.offsets, ...data.offsets,
...this.config.offset(data.offsets, this.element) || {} ...(this.config.offset(data.offsets, this.element) || {})
} }
return data return data
@ -503,24 +507,24 @@ class Tooltip {
_setListeners() { _setListeners() {
const triggers = this.config.trigger.split(' ') const triggers = this.config.trigger.split(' ')
triggers.forEach((trigger) => { triggers.forEach(trigger => {
if (trigger === 'click') { if (trigger === 'click') {
$(this.element).on( $(this.element).on(
this.constructor.Event.CLICK, this.constructor.Event.CLICK,
this.config.selector, this.config.selector,
(event) => this.toggle(event) event => this.toggle(event)
) )
} else if (trigger !== TRIGGER_MANUAL) { } else if (trigger !== TRIGGER_MANUAL) {
const eventIn = trigger === TRIGGER_HOVER const eventIn = trigger === TRIGGER_HOVER ?
? this.constructor.Event.MOUSEENTER this.constructor.Event.MOUSEENTER :
: this.constructor.Event.FOCUSIN this.constructor.Event.FOCUSIN
const eventOut = trigger === TRIGGER_HOVER const eventOut = trigger === TRIGGER_HOVER ?
? this.constructor.Event.MOUSELEAVE this.constructor.Event.MOUSELEAVE :
: this.constructor.Event.FOCUSOUT this.constructor.Event.FOCUSOUT
$(this.element) $(this.element)
.on(eventIn, this.config.selector, (event) => this._enter(event)) .on(eventIn, this.config.selector, event => this._enter(event))
.on(eventOut, this.config.selector, (event) => this._leave(event)) .on(eventOut, this.config.selector, event => this._leave(event))
} }
}) })
@ -647,7 +651,7 @@ class Tooltip {
const dataAttributes = $(this.element).data() const dataAttributes = $(this.element).data()
Object.keys(dataAttributes) Object.keys(dataAttributes)
.forEach((dataAttr) => { .forEach(dataAttr => {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr] delete dataAttributes[dataAttr]
} }
@ -656,7 +660,7 @@ class Tooltip {
config = { config = {
...this.constructor.Default, ...this.constructor.Default,
...dataAttributes, ...dataAttributes,
...typeof config === 'object' && config ? config : {} ...(typeof config === 'object' && config ? config : {})
} }
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
@ -734,7 +738,8 @@ class Tooltip {
static _jQueryInterface(config) { static _jQueryInterface(config) {
return this.each(function () { return this.each(function () {
let data = $(this).data(DATA_KEY) const $element = $(this)
let data = $element.data(DATA_KEY)
const _config = typeof config === 'object' && config const _config = typeof config === 'object' && config
if (!data && /dispose|hide/.test(config)) { if (!data && /dispose|hide/.test(config)) {
@ -743,13 +748,14 @@ class Tooltip {
if (!data) { if (!data) {
data = new Tooltip(this, _config) data = new Tooltip(this, _config)
$(this).data(DATA_KEY, data) $element.data(DATA_KEY, data)
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`) throw new TypeError(`No method named "${config}"`)
} }
data[config]() data[config]()
} }
}) })

View file

@ -1,7 +1,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v4.5.0): util.js * Bootstrap (v4.6.0): util.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@ -34,6 +34,7 @@ function getSpecialTransitionEndEvent() {
if ($(event.target).is(this)) { if ($(event.target).is(this)) {
return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params
} }
return undefined return undefined
} }
} }
@ -71,9 +72,9 @@ const Util = {
getUID(prefix) { getUID(prefix) {
do { do {
// eslint-disable-next-line no-bitwise
prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here
} while (document.getElementById(prefix)) } while (document.getElementById(prefix))
return prefix return prefix
}, },
@ -87,7 +88,7 @@ const Util = {
try { try {
return document.querySelector(selector) ? selector : null return document.querySelector(selector) ? selector : null
} catch (err) { } catch (_) {
return null return null
} }
}, },
@ -124,7 +125,6 @@ const Util = {
$(element).trigger(TRANSITION_END) $(element).trigger(TRANSITION_END)
}, },
// TODO: Remove in v5
supportsTransitionEnd() { supportsTransitionEnd() {
return Boolean(TRANSITION_END) return Boolean(TRANSITION_END)
}, },
@ -137,9 +137,9 @@ const Util = {
for (const property in configTypes) { for (const property in configTypes) {
if (Object.prototype.hasOwnProperty.call(configTypes, property)) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
const expectedTypes = configTypes[property] const expectedTypes = configTypes[property]
const value = config[property] const value = config[property]
const valueType = value && Util.isElement(value) const valueType = value && Util.isElement(value) ?
? 'element' : toType(value) 'element' : toType(value)
if (!new RegExp(expectedTypes).test(valueType)) { if (!new RegExp(expectedTypes).test(valueType)) {
throw new Error( throw new Error(

View file

@ -0,0 +1,34 @@
/**
* --------------------------------------------------------------------------
* Bootstrap (v4.6.0): index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import Alert from './bootstrap/alert';
import Button from './bootstrap/button';
import Carousel from './bootstrap/carousel';
import Collapse from './bootstrap/collapse';
import Dropdown from './bootstrap/dropdown';
import Modal from './bootstrap/modal';
import Popover from './bootstrap/popover';
import Scrollspy from './bootstrap/scrollspy';
import Tab from './bootstrap/tab';
import Toast from './bootstrap/toast';
import Tooltip from './bootstrap/tooltip';
import Util from './bootstrap/util';
export {
Util,
Alert,
Button,
Carousel,
Collapse,
Dropdown,
Modal,
Popover,
Scrollspy,
Tab,
Toast,
Tooltip
};

View file

@ -26,7 +26,7 @@
import $ from 'jquery'; import $ from 'jquery';
import * as Aria from './aria'; import * as Aria from './aria';
import Bootstrap from './bootstrap/index'; import Bootstrap from './index';
import Pending from 'core/pending'; import Pending from 'core/pending';
import Scroll from './scroll'; import Scroll from './scroll';
import setupBootstrapPendingChecks from './pending'; import setupBootstrapPendingChecks from './pending';

View file

@ -4,7 +4,7 @@ Twitter bootstrap
----------------- -----------------
Sass: Sass:
This theme uses Bootstrap version 4.5.0 This theme uses Bootstrap version 4.6.0
The Bootstrap repository is available on: The Bootstrap repository is available on:
https://github.com/twitter/bootstrap.git https://github.com/twitter/bootstrap.git
@ -24,9 +24,13 @@ To update to the latest release of twitter bootstrap:
Javascript: Javascript:
* remove folder theme/boost/amd/src/bootstrap
* copy the js files from ~/bootstrap/js/src to theme/boost/amd/src/bootstrap (including the subfolder) * copy the js files from ~/bootstrap/js/src to theme/boost/amd/src/bootstrap (including the subfolder)
* copy index.js from ~/bootstrap/js to theme/boost/amd/src
* edit theme/boost/amd/src/index.js and update import path (src -> bootstrap)
* Moodle core includes the popper.js library, make sure each of the new Bootstrap js files * Moodle core includes the popper.js library, make sure each of the new Bootstrap js files
includes the 'core/popper' library instead of 'popper.js'. For version 4.5.0 these files were: tooltip.js and dropdown.js includes the 'core/popper' library instead of 'popper.js'. For version 4.6.0 these files were: tooltip.js and dropdown.js
* update ./thirdpartylibs.xml to include all new Bootstrap js files * update ./thirdpartylibs.xml to include all new Bootstrap js files
* run "Grunt ignorefiles" to prevent linting errors appearing from the new Bootstrap js files. * run "grunt ignorefiles" to prevent linting errors appearing from the new Bootstrap js files.
* in folder theme/boost run "Grunt amd" to compile the bootstrap JS * in folder theme/boost run "grunt amd" to compile the bootstrap JS
* in folder theme/boost run "grunt css" to compile scss

View file

@ -34,6 +34,7 @@
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
z-index: 2;
padding: $alert-padding-y $alert-padding-x; padding: $alert-padding-y $alert-padding-x;
color: inherit; color: inherit;
} }

View file

@ -10,14 +10,12 @@
} }
.breadcrumb-item { .breadcrumb-item {
display: flex;
// The separator between breadcrumbs (by default, a forward-slash: "/") // The separator between breadcrumbs (by default, a forward-slash: "/")
+ .breadcrumb-item { + .breadcrumb-item {
padding-left: $breadcrumb-item-padding; padding-left: $breadcrumb-item-padding;
&::before { &::before {
display: inline-block; // Suppress underlining of the separator in modern browsers float: left; // Suppress inline spacings and underlining of the separator
padding-right: $breadcrumb-item-padding; padding-right: $breadcrumb-item-padding;
color: $breadcrumb-divider-color; color: $breadcrumb-divider-color;
content: escape-svg($breadcrumb-divider); content: escape-svg($breadcrumb-divider);

View file

@ -33,6 +33,13 @@
@include border-bottom-radius($card-inner-border-radius); @include border-bottom-radius($card-inner-border-radius);
} }
} }
// Due to specificity of the above selector (`.card > .list-group`), we must
// use a child selector here to prevent double borders.
> .card-header + .list-group,
> .list-group + .card-footer {
border-top: 0;
}
} }
.card-body { .card-body {
@ -83,12 +90,6 @@
&:first-child { &:first-child {
@include border-radius($card-inner-border-radius $card-inner-border-radius 0 0); @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0);
} }
+ .list-group {
.list-group-item:first-child {
border-top: 0;
}
}
} }
.card-footer { .card-footer {
@ -127,6 +128,7 @@
bottom: 0; bottom: 0;
left: 0; left: 0;
padding: $card-img-overlay-padding; padding: $card-img-overlay-padding;
@include border-radius($card-inner-border-radius);
} }
.card-img, .card-img,
@ -204,12 +206,12 @@
.card-img-top, .card-img-top,
.card-header { .card-header {
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-top-right-radius: 0; border-top-right-radius: 0;
} }
.card-img-bottom, .card-img-bottom,
.card-footer { .card-footer {
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-bottom-right-radius: 0; border-bottom-right-radius: 0;
} }
} }
@ -219,12 +221,12 @@
.card-img-top, .card-img-top,
.card-header { .card-header {
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-top-left-radius: 0; border-top-left-radius: 0;
} }
.card-img-bottom, .card-img-bottom,
.card-footer { .card-footer {
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-bottom-left-radius: 0; border-bottom-left-radius: 0;
} }
} }
@ -262,6 +264,8 @@
// //
.accordion { .accordion {
overflow-anchor: none;
> .card { > .card {
overflow: hidden; overflow: hidden;

View file

@ -127,7 +127,7 @@
display: inline-block; display: inline-block;
width: $carousel-control-icon-width; width: $carousel-control-icon-width;
height: $carousel-control-icon-width; height: $carousel-control-icon-width;
background: no-repeat 50% / 100% 100%; background: 50% / 100% 100% no-repeat;
} }
.carousel-control-prev-icon { .carousel-control-prev-icon {
background-image: escape-svg($carousel-control-prev-icon-bg); background-image: escape-svg($carousel-control-prev-icon-bg);

View file

@ -9,9 +9,11 @@
.custom-control { .custom-control {
position: relative; position: relative;
z-index: 1;
display: block; display: block;
min-height: $font-size-base * $line-height-base; min-height: $font-size-base * $line-height-base;
padding-left: $custom-control-gutter + $custom-control-indicator-size; padding-left: $custom-control-gutter + $custom-control-indicator-size;
color-adjust: exact; // Keep themed appearance for print
} }
.custom-control-inline { .custom-control-inline {
@ -37,7 +39,7 @@
&:focus ~ .custom-control-label::before { &: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
@if $enable-shadows { @if $enable-shadows {
box-shadow: $input-box-shadow, $input-focus-box-shadow; box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow;
} @else { } @else {
box-shadow: $custom-control-indicator-focus-box-shadow; box-shadow: $custom-control-indicator-focus-box-shadow;
} }
@ -102,7 +104,7 @@
width: $custom-control-indicator-size; width: $custom-control-indicator-size;
height: $custom-control-indicator-size; height: $custom-control-indicator-size;
content: ""; content: "";
background: no-repeat 50% / #{$custom-control-indicator-bg-size}; background: 50% / #{$custom-control-indicator-bg-size} no-repeat;
} }
} }
@ -135,10 +137,10 @@
.custom-control-input:disabled { .custom-control-input:disabled {
&:checked ~ .custom-control-label::before { &:checked ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg; @include gradient-bg($custom-control-indicator-checked-disabled-bg);
} }
&:indeterminate ~ .custom-control-label::before { &:indeterminate ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg; @include gradient-bg($custom-control-indicator-checked-disabled-bg);
} }
} }
} }
@ -149,7 +151,7 @@
.custom-radio { .custom-radio {
.custom-control-label::before { .custom-control-label::before {
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-radius: $custom-radio-indicator-border-radius; border-radius: $custom-radio-indicator-border-radius;
} }
@ -161,7 +163,7 @@
.custom-control-input:disabled { .custom-control-input:disabled {
&:checked ~ .custom-control-label::before { &:checked ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg; @include gradient-bg($custom-control-indicator-checked-disabled-bg);
} }
} }
} }
@ -179,7 +181,7 @@
left: -($custom-switch-width + $custom-control-gutter); left: -($custom-switch-width + $custom-control-gutter);
width: $custom-switch-width; width: $custom-switch-width;
pointer-events: all; pointer-events: all;
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-radius: $custom-switch-indicator-border-radius; border-radius: $custom-switch-indicator-border-radius;
} }
@ -189,7 +191,7 @@
width: $custom-switch-indicator-size; width: $custom-switch-indicator-size;
height: $custom-switch-indicator-size; height: $custom-switch-indicator-size;
background-color: $custom-control-indicator-border-color; background-color: $custom-control-indicator-border-color;
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-radius: $custom-switch-indicator-border-radius; border-radius: $custom-switch-indicator-border-radius;
@include transition(transform .15s ease-in-out, $custom-forms-transition); @include transition(transform .15s ease-in-out, $custom-forms-transition);
} }
@ -204,7 +206,7 @@
.custom-control-input:disabled { .custom-control-input:disabled {
&:checked ~ .custom-control-label::before { &:checked ~ .custom-control-label::before {
background-color: $custom-control-indicator-checked-disabled-bg; @include gradient-bg($custom-control-indicator-checked-disabled-bg);
} }
} }
} }
@ -313,6 +315,7 @@
width: 100%; width: 100%;
height: $custom-file-height; height: $custom-file-height;
margin: 0; margin: 0;
overflow: hidden;
opacity: 0; opacity: 0;
&:focus ~ .custom-file-label { &:focus ~ .custom-file-label {
@ -345,6 +348,7 @@
z-index: 1; z-index: 1;
height: $custom-file-height; height: $custom-file-height;
padding: $custom-file-padding-y $custom-file-padding-x; padding: $custom-file-padding-y $custom-file-padding-x;
overflow: hidden;
font-family: $custom-file-font-family; font-family: $custom-file-font-family;
font-weight: $custom-file-font-weight; font-weight: $custom-file-font-weight;
line-height: $custom-file-line-height; line-height: $custom-file-line-height;
@ -386,7 +390,7 @@
appearance: none; appearance: none;
&:focus { &:focus {
outline: none; outline: 0;
// Pseudo-elements must be split across multiple rulesets to have an effect. // Pseudo-elements must be split across multiple rulesets to have an effect.
// No box-shadow() mixin for focus accessibility. // No box-shadow() mixin for focus accessibility.

View file

@ -22,7 +22,7 @@
display: none; // none by default, but block on "open" of the menu display: none; // none by default, but block on "open" of the menu
float: left; float: left;
min-width: $dropdown-min-width; min-width: $dropdown-min-width;
padding: $dropdown-padding-y 0; padding: $dropdown-padding-y $dropdown-padding-x;
margin: $dropdown-spacer 0 0; // override default ul margin: $dropdown-spacer 0 0; // override default ul
@include font-size($dropdown-font-size); @include font-size($dropdown-font-size);
color: $dropdown-color; color: $dropdown-color;
@ -100,7 +100,7 @@
} }
} }
// When enabled Popper.js, reset basic dropdown position // When Popper is enabled, reset the basic dropdown position
// stylelint-disable-next-line no-duplicate-selectors // stylelint-disable-next-line no-duplicate-selectors
.dropdown-menu { .dropdown-menu {
&[x-placement^="top"], &[x-placement^="top"],

View file

@ -51,6 +51,9 @@
} }
// See https://codepen.io/kevinweber/pen/dXWoRw // See https://codepen.io/kevinweber/pen/dXWoRw
//
// Requires the use of quotes around data URIs.
@function escape-svg($string) { @function escape-svg($string) {
@if str-index($string, "data:image/svg+xml") { @if str-index($string, "data:image/svg+xml") {
@each $char, $encoded in $escaped-characters { @each $char, $encoded in $escaped-characters {

View file

@ -4,11 +4,7 @@
@if $enable-grid-classes { @if $enable-grid-classes {
// Single container class with breakpoint max-widths // Single container class with breakpoint max-widths
.container { .container,
@include make-container();
@include make-container-max-widths();
}
// 100% wide container at all breakpoints // 100% wide container at all breakpoints
.container-fluid { .container-fluid {
@include make-container(); @include make-container();

View file

@ -42,7 +42,6 @@
> .form-control, > .form-control,
> .custom-select { > .custom-select {
&:not(:last-child) { @include border-right-radius(0); }
&:not(:first-child) { @include border-left-radius(0); } &:not(:first-child) { @include border-left-radius(0); }
} }
@ -53,9 +52,24 @@
align-items: center; align-items: center;
&:not(:last-child) .custom-file-label, &:not(:last-child) .custom-file-label,
&:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
&:not(:first-child) .custom-file-label { @include border-left-radius(0); } &:not(:first-child) .custom-file-label { @include border-left-radius(0); }
} }
&:not(.has-validation) {
> .form-control:not(:last-child),
> .custom-select:not(:last-child),
> .custom-file:not(:last-child) .custom-file-label::after {
@include border-right-radius(0);
}
}
&.has-validation {
> .form-control:nth-last-child(n + 3),
> .custom-select:nth-last-child(n + 3),
> .custom-file:nth-last-child(n + 3) .custom-file-label::after {
@include border-right-radius(0);
}
}
} }
@ -175,8 +189,10 @@
.input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .btn,
.input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-prepend > .input-group-text,
.input-group > .input-group-append:not(:last-child) > .btn, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
.input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .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) { .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
@include border-right-radius(0); @include border-right-radius(0);

View file

@ -111,7 +111,7 @@
margin-top: 0; margin-top: 0;
} }
& + .list-group-item { + .list-group-item {
border-top-width: $list-group-border-width; border-top-width: $list-group-border-width;
border-left-width: 0; border-left-width: 0;

View file

@ -182,7 +182,6 @@
// Place margin between footer elements // Place margin between footer elements
// This solution is far from ideal because of the universal selector usage, // This solution is far from ideal because of the universal selector usage,
// but is needed to fix https://github.com/twbs/bootstrap/issues/24800 // but is needed to fix https://github.com/twbs/bootstrap/issues/24800
// stylelint-disable-next-line selector-max-universal
> * { > * {
margin: $modal-footer-margin-between / 2; margin: $modal-footer-margin-between / 2;
} }

View file

@ -35,11 +35,8 @@
.nav-tabs { .nav-tabs {
border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color; border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color;
.nav-item {
margin-bottom: -$nav-tabs-border-width;
}
.nav-link { .nav-link {
margin-bottom: -$nav-tabs-border-width;
border: $nav-tabs-border-width solid transparent; border: $nav-tabs-border-width solid transparent;
@include border-top-radius($nav-tabs-border-radius); @include border-top-radius($nav-tabs-border-radius);
@ -92,6 +89,7 @@
// //
.nav-fill { .nav-fill {
> .nav-link,
.nav-item { .nav-item {
flex: 1 1 auto; flex: 1 1 auto;
text-align: center; text-align: center;
@ -99,6 +97,7 @@
} }
.nav-justified { .nav-justified {
> .nav-link,
.nav-item { .nav-item {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;

View file

@ -136,8 +136,12 @@
height: 1.5em; height: 1.5em;
vertical-align: middle; vertical-align: middle;
content: ""; content: "";
background: no-repeat center center; background: 50% / 100% 100% no-repeat;
background-size: 100% 100%; }
.navbar-nav-scroll {
max-height: $navbar-nav-scroll-max-height;
overflow-y: auto;
} }
// Generate series of `.navbar-expand-*` responsive classes for configuring // Generate series of `.navbar-expand-*` responsive classes for configuring
@ -199,6 +203,10 @@
} }
} }
.navbar-nav-scroll {
overflow: visible;
}
.navbar-collapse { .navbar-collapse {
display: flex !important; // stylelint-disable-line declaration-no-important display: flex !important; // stylelint-disable-line declaration-no-important

View file

@ -66,9 +66,9 @@
// //
.pagination-lg { .pagination-lg {
@include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $border-radius-lg); @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg);
} }
.pagination-sm { .pagination-sm {
@include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $border-radius-sm); @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm);
} }

View file

@ -36,7 +36,7 @@
@if $enable-transitions { @if $enable-transitions {
.progress-bar-animated { .progress-bar-animated {
animation: progress-bar-stripes $progress-bar-animation-timing; animation: $progress-bar-animation-timing progress-bar-stripes;
@if $enable-prefers-reduced-motion-media-query { @if $enable-prefers-reduced-motion-media-query {
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {

View file

@ -1,4 +1,4 @@
// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix // stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix
// Reboot // Reboot
// //
@ -199,7 +199,7 @@ a {
// causes specificity issues in many other styles that are too complex to fix. // causes specificity issues in many other styles that are too complex to fix.
// See https://github.com/twbs/bootstrap/issues/19402 // See https://github.com/twbs/bootstrap/issues/19402
a:not([href]) { a:not([href]):not([class]) {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
@ -278,10 +278,14 @@ caption {
caption-side: bottom; caption-side: bottom;
} }
// 1. Removes font-weight bold by inheriting
// 2. Matches default `<td>` alignment by inheriting `text-align`.
// 3. Fix alignment for Safari
th { th {
// Matches default `<td>` alignment by inheriting from the `<body>`, or the font-weight: $table-th-font-weight; // 1
// closest parent with a set `text-align`. text-align: inherit; // 2
text-align: inherit; text-align: -webkit-match-parent; // 3
} }
@ -299,17 +303,17 @@ label {
// //
// Details at https://github.com/twbs/bootstrap/issues/24093 // Details at https://github.com/twbs/bootstrap/issues/24093
button { button {
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-radius: 0; border-radius: 0;
} }
// Work around a Firefox/IE bug where the transparent `button` background // Explicitly remove focus outline in Chromium when it shouldn't be
// results in a loss of the default `button` focus styles. // visible (e.g. as result of mouse click or touch tap). It already
// // should be doing this automatically, but seems to currently be
// Credit: https://github.com/suitcss/base/ // confused and applies its very visible two-tone outline anyway.
button:focus {
outline: 1px dotted; button:focus:not(:focus-visible) {
outline: 5px auto -webkit-focus-ring-color; outline: 0;
} }
input, input,

View file

@ -1,4 +1,3 @@
// Do not forget to update getting-started/theming.md!
:root { :root {
// Custom variable values only support SassScript inside `#{}`. // Custom variable values only support SassScript inside `#{}`.
@each $color, $value in $colors { @each $color, $value in $colors {

View file

@ -13,9 +13,9 @@
vertical-align: text-bottom; vertical-align: text-bottom;
border: $spinner-border-width solid currentColor; border: $spinner-border-width solid currentColor;
border-right-color: transparent; border-right-color: transparent;
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-radius: 50%; border-radius: 50%;
animation: spinner-border .75s linear infinite; animation: .75s linear infinite spinner-border;
} }
.spinner-border-sm { .spinner-border-sm {
@ -44,13 +44,22 @@
height: $spinner-height; height: $spinner-height;
vertical-align: text-bottom; vertical-align: text-bottom;
background-color: currentColor; background-color: currentColor;
// stylelint-disable-next-line property-blacklist // stylelint-disable-next-line property-disallowed-list
border-radius: 50%; border-radius: 50%;
opacity: 0; opacity: 0;
animation: spinner-grow .75s linear infinite; animation: .75s linear infinite spinner-grow;
} }
.spinner-grow-sm { .spinner-grow-sm {
width: $spinner-width-sm; width: $spinner-width-sm;
height: $spinner-height-sm; height: $spinner-height-sm;
} }
@if $enable-prefers-reduced-motion-media-query {
@media (prefers-reduced-motion: reduce) {
.spinner-border,
.spinner-grow {
animation-duration: 1.5s;
}
}
}

View file

@ -1,13 +1,14 @@
.toast { .toast {
// Prevents from shrinking in IE11, when in a flex container
// See https://github.com/twbs/bootstrap/issues/28341
flex-basis: $toast-max-width;
max-width: $toast-max-width; max-width: $toast-max-width;
overflow: hidden; // cheap rounded corners on nested items
@include font-size($toast-font-size); @include font-size($toast-font-size);
color: $toast-color; color: $toast-color;
background-color: $toast-background-color; background-color: $toast-background-color;
background-clip: padding-box; background-clip: padding-box;
border: $toast-border-width solid $toast-border-color; border: $toast-border-width solid $toast-border-color;
box-shadow: $toast-box-shadow; box-shadow: $toast-box-shadow;
backdrop-filter: blur(10px);
opacity: 0; opacity: 0;
@include border-radius($toast-border-radius); @include border-radius($toast-border-radius);
@ -37,6 +38,7 @@
background-color: $toast-header-background-color; background-color: $toast-header-background-color;
background-clip: padding-box; background-clip: padding-box;
border-bottom: $toast-border-width solid $toast-header-border-color; border-bottom: $toast-border-width solid $toast-header-border-color;
@include border-top-radius(subtract($toast-border-radius, $toast-border-width));
} }
.toast-body { .toast-body {

View file

@ -1,4 +1,4 @@
// stylelint-disable declaration-no-important, selector-list-comma-newline-after // stylelint-disable selector-list-comma-newline-after
// //
// Headings // Headings

View file

@ -18,7 +18,6 @@ $gray-900: #212529 !default;
$black: #000 !default; $black: #000 !default;
$grays: () !default; $grays: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$grays: map-merge( $grays: map-merge(
( (
"100": $gray-100, "100": $gray-100,
@ -46,7 +45,6 @@ $teal: #20c997 !default;
$cyan: #17a2b8 !default; $cyan: #17a2b8 !default;
$colors: () !default; $colors: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$colors: map-merge( $colors: map-merge(
( (
"blue": $blue, "blue": $blue,
@ -76,7 +74,6 @@ $light: $gray-100 !default;
$dark: $gray-800 !default; $dark: $gray-800 !default;
$theme-colors: () !default; $theme-colors: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$theme-colors: map-merge( $theme-colors: map-merge(
( (
"primary": $primary, "primary": $primary,
@ -103,11 +100,11 @@ $yiq-text-light: $white !default;
// Characters which are escaped by the escape-svg function // Characters which are escaped by the escape-svg function
$escaped-characters: ( $escaped-characters: (
("<","%3c"), ("<", "%3c"),
(">","%3e"), (">", "%3e"),
("#","%23"), ("#", "%23"),
("(","%28"), ("(", "%28"),
(")","%29"), (")", "%29"),
) !default; ) !default;
@ -138,7 +135,6 @@ $enable-deprecation-messages: true !default;
$spacer: 1rem !default; $spacer: 1rem !default;
$spacers: () !default; $spacers: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$spacers: map-merge( $spacers: map-merge(
( (
0: 0, 0: 0,
@ -153,7 +149,6 @@ $spacers: map-merge(
// This variable affects the `.h-*` and `.w-*` classes. // This variable affects the `.h-*` and `.w-*` classes.
$sizes: () !default; $sizes: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$sizes: map-merge( $sizes: map-merge(
( (
25: 25%, 25: 25%,
@ -264,7 +259,6 @@ $transition-fade: opacity .15s linear !default;
$transition-collapse: height .35s ease !default; $transition-collapse: height .35s ease !default;
$embed-responsive-aspect-ratios: () !default; $embed-responsive-aspect-ratios: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$embed-responsive-aspect-ratios: join( $embed-responsive-aspect-ratios: join(
( (
(21 9), (21 9),
@ -280,7 +274,7 @@ $embed-responsive-aspect-ratios: join(
// Font, line-height, and color for body text, headings, and more. // Font, line-height, and color for body text, headings, and more.
// stylelint-disable value-keyword-case // stylelint-disable value-keyword-case
$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; $font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
$font-family-base: $font-family-sans-serif !default; $font-family-base: $font-family-sans-serif !default;
// stylelint-enable value-keyword-case // stylelint-enable value-keyword-case
@ -369,6 +363,7 @@ $table-border-color: $border-color !default;
$table-head-bg: $gray-200 !default; $table-head-bg: $gray-200 !default;
$table-head-color: $gray-700 !default; $table-head-color: $gray-700 !default;
$table-th-font-weight: null !default;
$table-dark-color: $white !default; $table-dark-color: $white !default;
$table-dark-bg: $gray-800 !default; $table-dark-bg: $gray-800 !default;
@ -546,7 +541,7 @@ $custom-control-label-disabled-color: $gray-600 !default;
$custom-control-indicator-checked-color: $component-active-color !default; $custom-control-indicator-checked-color: $component-active-color !default;
$custom-control-indicator-checked-bg: $component-active-bg !default; $custom-control-indicator-checked-bg: $component-active-bg !default;
$custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default; $custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default;
$custom-control-indicator-checked-box-shadow: none !default; $custom-control-indicator-checked-box-shadow: null !default;
$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default; $custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;
$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default; $custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;
@ -554,7 +549,7 @@ $custom-control-indicator-focus-border-color: $input-focus-border-color !defau
$custom-control-indicator-active-color: $component-active-color !default; $custom-control-indicator-active-color: $component-active-color !default;
$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default; $custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;
$custom-control-indicator-active-box-shadow: none !default; $custom-control-indicator-active-box-shadow: null !default;
$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default; $custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;
$custom-checkbox-indicator-border-radius: $border-radius !default; $custom-checkbox-indicator-border-radius: $border-radius !default;
@ -563,7 +558,7 @@ $custom-checkbox-indicator-icon-checked: url("data:image/svg+xml,<svg xml
$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default; $custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;
$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default; $custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;
$custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>") !default; $custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>") !default;
$custom-checkbox-indicator-indeterminate-box-shadow: none !default; $custom-checkbox-indicator-indeterminate-box-shadow: null !default;
$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default; $custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;
$custom-radio-indicator-border-radius: 50% !default; $custom-radio-indicator-border-radius: 50% !default;
@ -588,7 +583,7 @@ $custom-select-disabled-bg: $gray-200 !default;
$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions
$custom-select-indicator-color: $gray-800 !default; $custom-select-indicator-color: $gray-800 !default;
$custom-select-indicator: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") !default; $custom-select-indicator: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") !default;
$custom-select-background: escape-svg($custom-select-indicator) no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon) $custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)
$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default; $custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;
$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default; $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;
@ -668,7 +663,6 @@ $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;
$form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default; $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default;
$form-validation-states: () !default; $form-validation-states: () !default;
// stylelint-disable-next-line scss/dollar-variable-default
$form-validation-states: map-merge( $form-validation-states: map-merge(
( (
"valid": ( "valid": (
@ -737,6 +731,8 @@ $navbar-toggler-padding-x: .75rem !default;
$navbar-toggler-font-size: $font-size-lg !default; $navbar-toggler-font-size: $font-size-lg !default;
$navbar-toggler-border-radius: $btn-border-radius !default; $navbar-toggler-border-radius: $btn-border-radius !default;
$navbar-nav-scroll-max-height: 75vh !default;
$navbar-dark-color: rgba($white, .5) !default; $navbar-dark-color: rgba($white, .5) !default;
$navbar-dark-hover-color: rgba($white, .75) !default; $navbar-dark-hover-color: rgba($white, .75) !default;
$navbar-dark-active-color: $white !default; $navbar-dark-active-color: $white !default;
@ -762,6 +758,7 @@ $navbar-dark-brand-hover-color: $navbar-dark-active-color !default;
// Dropdown menu container and contents. // Dropdown menu container and contents.
$dropdown-min-width: 10rem !default; $dropdown-min-width: 10rem !default;
$dropdown-padding-x: 0 !default;
$dropdown-padding-y: .5rem !default; $dropdown-padding-y: .5rem !default;
$dropdown-spacer: .125rem !default; $dropdown-spacer: .125rem !default;
$dropdown-font-size: $font-size-base !default; $dropdown-font-size: $font-size-base !default;
@ -777,12 +774,12 @@ $dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;
$dropdown-link-color: $gray-900 !default; $dropdown-link-color: $gray-900 !default;
$dropdown-link-hover-color: darken($gray-900, 5%) !default; $dropdown-link-hover-color: darken($gray-900, 5%) !default;
$dropdown-link-hover-bg: $gray-100 !default; $dropdown-link-hover-bg: $gray-200 !default;
$dropdown-link-active-color: $component-active-color !default; $dropdown-link-active-color: $component-active-color !default;
$dropdown-link-active-bg: $component-active-bg !default; $dropdown-link-active-bg: $component-active-bg !default;
$dropdown-link-disabled-color: $gray-600 !default; $dropdown-link-disabled-color: $gray-500 !default;
$dropdown-item-padding-y: .25rem !default; $dropdown-item-padding-y: .25rem !default;
$dropdown-item-padding-x: 1.5rem !default; $dropdown-item-padding-x: 1.5rem !default;
@ -821,6 +818,8 @@ $pagination-disabled-color: $gray-600 !default;
$pagination-disabled-bg: $white !default; $pagination-disabled-bg: $white !default;
$pagination-disabled-border-color: $gray-300 !default; $pagination-disabled-border-color: $gray-300 !default;
$pagination-border-radius-sm: $border-radius-sm !default;
$pagination-border-radius-lg: $border-radius-lg !default;
// Jumbotron // Jumbotron

View file

@ -1,8 +1,8 @@
/*! /*!
* Bootstrap Grid v4.5.0 (https://getbootstrap.com/) * Bootstrap Grid v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
html { html {
@ -19,6 +19,7 @@ html {
@import "functions"; @import "functions";
@import "variables"; @import "variables";
@import "mixins/deprecate";
@import "mixins/breakpoints"; @import "mixins/breakpoints";
@import "mixins/grid-framework"; @import "mixins/grid-framework";
@import "mixins/grid"; @import "mixins/grid";

View file

@ -1,8 +1,8 @@
/*! /*!
* Bootstrap Reboot v4.5.0 (https://getbootstrap.com/) * Bootstrap Reboot v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/ */

View file

@ -1,8 +1,8 @@
/*! /*!
* Bootstrap v4.5.0 (https://getbootstrap.com/) * Bootstrap v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@import "functions"; @import "functions";

View file

@ -1,4 +1,4 @@
// stylelint-disable property-blacklist // stylelint-disable property-disallowed-list
// Single side border-radius // Single side border-radius
// Helper function to replace negative values with 0 // Helper function to replace negative values with 0

View file

@ -53,6 +53,7 @@
.#{$state}-tooltip { .#{$state}-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; // Contain to parent when possible max-width: 100%; // Contain to parent when possible
@ -63,6 +64,13 @@
color: color-yiq($color); color: color-yiq($color);
background-color: rgba($color, $form-feedback-tooltip-opacity); background-color: rgba($color, $form-feedback-tooltip-opacity);
@include border-radius($form-feedback-tooltip-border-radius); @include border-radius($form-feedback-tooltip-border-radius);
// See https://github.com/twbs/bootstrap/pull/31557
// Align tooltip to form elements
.form-row > .col > &,
.form-row > [class*="col-"] > & {
left: $form-grid-gutter-width / 2;
}
} }
@include form-validation-state-selector($state) { @include form-validation-state-selector($state) {
@ -107,7 +115,7 @@
@if $enable-validation-icons { @if $enable-validation-icons {
padding-right: $custom-select-feedback-icon-padding-right; padding-right: $custom-select-feedback-icon-padding-right;
background: $custom-select-background, escape-svg($icon) $custom-select-bg no-repeat $custom-select-feedback-icon-position / $custom-select-feedback-icon-size; background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat;
} }
&:focus { &:focus {

View file

@ -34,7 +34,6 @@
.col#{$infix} { .col#{$infix} {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0; // See https://github.com/twbs/bootstrap/issues/25410
max-width: 100%; max-width: 100%;
} }

View file

@ -10,6 +10,12 @@
margin-left: auto; margin-left: auto;
} }
@mixin make-row($gutter: $grid-gutter-width) {
display: flex;
flex-wrap: wrap;
margin-right: -$gutter / 2;
margin-left: -$gutter / 2;
}
// For each breakpoint, define the maximum width of the container in a media query // For each breakpoint, define the maximum width of the container in a media query
@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) { @mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {
@ -18,13 +24,7 @@
max-width: $container-max-width; max-width: $container-max-width;
} }
} }
} @include deprecate("The `make-container-max-widths` mixin", "v4.5.2", "v5");
@mixin make-row($gutter: $grid-gutter-width) {
display: flex;
flex-wrap: wrap;
margin-right: -$gutter / 2;
margin-left: -$gutter / 2;
} }
@mixin make-col-ready($gutter: $grid-gutter-width) { @mixin make-col-ready($gutter: $grid-gutter-width) {
@ -62,7 +62,7 @@
// numberof columns. Supports wrapping to new lines, but does not do a Masonry // numberof columns. Supports wrapping to new lines, but does not do a Masonry
// style grid. // style grid.
@mixin row-cols($count) { @mixin row-cols($count) {
& > * { > * {
flex: 0 0 100% / $count; flex: 0 0 100% / $count;
max-width: 100% / $count; max-width: 100% / $count;
} }

View file

@ -26,7 +26,7 @@
// Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,
// but doesn't convert dppx=>dpi. // but doesn't convert dppx=>dpi.
// There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.
// Compatibility info: https://caniuse.com/#feat=css-media-resolution // Compatibility info: https://caniuse.com/css-media-resolution
@media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx
only screen and (min-resolution: 2dppx) { // Standardized only screen and (min-resolution: 2dppx) { // Standardized
background-image: url($file-2x); background-image: url($file-2x);

View file

@ -1,6 +1,6 @@
// Only display content to screen readers // Only display content to screen readers
// //
// See: https://a11yproject.com/posts/how-to-hide-content/ // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/
// See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/
@mixin sr-only() { @mixin sr-only() {

View file

@ -1,4 +1,4 @@
// stylelint-disable property-blacklist // stylelint-disable property-disallowed-list
@mixin transition($transition...) { @mixin transition($transition...) {
@if length($transition) == 0 { @if length($transition) == 0 {
$transition: $transition-base; $transition: $transition-base;

View file

@ -1,4 +1,4 @@
// stylelint-disable property-blacklist, declaration-no-important // stylelint-disable property-disallowed-list, declaration-no-important
// //
// Border // Border

View file

@ -63,7 +63,8 @@
.text-decoration-none { text-decoration: none !important; } .text-decoration-none { text-decoration: none !important; }
.text-break { .text-break {
word-wrap: break-word !important; word-break: break-word !important; // Deprecated, but avoids issues with flex containers
word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy
} }
// Reset // Reset

View file

@ -2327,10 +2327,10 @@
clip: auto; } clip: auto; }
/*! /*!
* Bootstrap v4.5.0 (https://getbootstrap.com/) * Bootstrap v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root { :root {
--blue: #0f6fc5; --blue: #0f6fc5;
@ -2359,7 +2359,7 @@
--breakpoint-md: 768px; --breakpoint-md: 768px;
--breakpoint-lg: 992px; --breakpoint-lg: 992px;
--breakpoint-xl: 1200px; --breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
*, *,
@ -2378,7 +2378,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
body { body {
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 0.9375rem; font-size: 0.9375rem;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
@ -2468,10 +2468,10 @@ a {
color: #0a477e; color: #0a477e;
text-decoration: underline; } text-decoration: underline; }
a:not([href]) { a:not([href]):not([class]) {
color: inherit; color: inherit;
text-decoration: none; } text-decoration: none; }
a:not([href]):hover { a:not([href]):not([class]):hover {
color: inherit; color: inherit;
text-decoration: none; } text-decoration: none; }
@ -2510,7 +2510,8 @@ caption {
caption-side: bottom; } caption-side: bottom; }
th { th {
text-align: inherit; } text-align: inherit;
text-align: -webkit-match-parent; }
label { label {
display: inline-block; display: inline-block;
@ -2519,9 +2520,8 @@ label {
button { button {
border-radius: 0; } border-radius: 0; }
button:focus { button:focus:not(:focus-visible) {
outline: 1px dotted; outline: 0; }
outline: 5px auto -webkit-focus-ring-color; }
input, input,
button, button,
@ -2806,26 +2806,12 @@ pre {
max-height: 340px; max-height: 340px;
overflow-y: scroll; } overflow-y: scroll; }
.container { .container,
width: 100%; .container-fluid,
padding-right: 15px; .container-sm,
padding-left: 15px; .container-md,
margin-right: auto; .container-lg,
margin-left: auto; } .container-xl {
@media (min-width: 576px) {
.container {
max-width: 540px; } }
@media (min-width: 768px) {
.container {
max-width: 720px; } }
@media (min-width: 992px) {
.container {
max-width: 960px; } }
@media (min-width: 1200px) {
.container {
max-width: 1140px; } }
.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {
width: 100%; width: 100%;
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
@ -2876,7 +2862,6 @@ pre {
.col { .col {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-1 > * { .row-cols-1 > * {
@ -3038,7 +3023,6 @@ pre {
.col-sm { .col-sm {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-sm-1 > * { .row-cols-sm-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3157,7 +3141,6 @@ pre {
.col-md { .col-md {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-md-1 > * { .row-cols-md-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3276,7 +3259,6 @@ pre {
.col-lg { .col-lg {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-lg-1 > * { .row-cols-lg-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3395,7 +3377,6 @@ pre {
.col-xl { .col-xl {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-xl-1 > * { .row-cols-xl-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3936,6 +3917,7 @@ textarea.form-control {
.valid-tooltip { .valid-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; max-width: 100%;
@ -3945,6 +3927,9 @@ textarea.form-control {
line-height: 1.5; line-height: 1.5;
color: #fff; color: #fff;
background-color: rgba(53, 122, 50, 0.9); } background-color: rgba(53, 122, 50, 0.9); }
.form-row > .col > .valid-tooltip,
.form-row > [class*="col-"] > .valid-tooltip {
left: 5px; }
.was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-feedback,
.was-validated :valid ~ .valid-tooltip, .was-validated :valid ~ .valid-tooltip,
@ -3970,7 +3955,7 @@ textarea.form-control {
.was-validated .custom-select:valid, .custom-select.is-valid { .was-validated .custom-select:valid, .custom-select.is-valid {
border-color: #357a32; border-color: #357a32;
padding-right: calc(0.75em + 2.3125rem); padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23357a32' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23357a32' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; }
.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
border-color: #357a32; border-color: #357a32;
box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); } box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); }
@ -4015,6 +4000,7 @@ textarea.form-control {
.invalid-tooltip { .invalid-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; max-width: 100%;
@ -4024,6 +4010,9 @@ textarea.form-control {
line-height: 1.5; line-height: 1.5;
color: #fff; color: #fff;
background-color: rgba(202, 49, 32, 0.9); } background-color: rgba(202, 49, 32, 0.9); }
.form-row > .col > .invalid-tooltip,
.form-row > [class*="col-"] > .invalid-tooltip {
left: 5px; }
.was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-tooltip, .was-validated :invalid ~ .invalid-tooltip,
@ -4049,7 +4038,7 @@ textarea.form-control {
.was-validated .custom-select:invalid, .custom-select.is-invalid { .was-validated .custom-select:invalid, .custom-select.is-invalid {
border-color: #ca3120; border-color: #ca3120;
padding-right: calc(0.75em + 2.3125rem); padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; }
.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
border-color: #ca3120; border-color: #ca3120;
box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); }
@ -4783,7 +4772,7 @@ input[type="button"].btn-block {
text-decoration: none; text-decoration: none;
background-color: #0f6fc5; } background-color: #0f6fc5; }
.dropdown-item.disabled, .dropdown-item:disabled { .dropdown-item.disabled, .dropdown-item:disabled {
color: #6c757d; color: #8f959e;
pointer-events: none; pointer-events: none;
background-color: transparent; } background-color: transparent; }
@ -4998,9 +4987,11 @@ input[type="button"].btn-block {
.custom-control { .custom-control {
position: relative; position: relative;
z-index: 1;
display: block; display: block;
min-height: 1.40625rem; min-height: 1.40625rem;
padding-left: 1.75rem; } padding-left: 1.75rem;
color-adjust: exact; }
.custom-control-inline { .custom-control-inline {
display: inline-flex; display: inline-flex;
@ -5053,7 +5044,7 @@ input[type="button"].btn-block {
width: 1.25rem; width: 1.25rem;
height: 1.25rem; height: 1.25rem;
content: ""; content: "";
background: no-repeat 50% / 50% 50%; } background: 50% / 50% 50% no-repeat; }
.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { .custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); } background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); }
@ -5114,7 +5105,7 @@ input[type="button"].btn-block {
line-height: 1.5; line-height: 1.5;
color: #495057; color: #495057;
vertical-align: middle; vertical-align: middle;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat;
border: 1px solid #8f959e; border: 1px solid #8f959e;
border-radius: 0; border-radius: 0;
appearance: none; } appearance: none; }
@ -5171,6 +5162,7 @@ input[type="button"].btn-block {
width: 100%; width: 100%;
height: calc(1.5em + 0.75rem + 2px); height: calc(1.5em + 0.75rem + 2px);
margin: 0; margin: 0;
overflow: hidden;
opacity: 0; } opacity: 0; }
.custom-file-input:focus ~ .custom-file-label { .custom-file-input:focus ~ .custom-file-label {
border-color: #61aef3; border-color: #61aef3;
@ -5191,6 +5183,7 @@ input[type="button"].btn-block {
z-index: 1; z-index: 1;
height: calc(1.5em + 0.75rem + 2px); height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem; padding: 0.375rem 0.75rem;
overflow: hidden;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
color: #495057; color: #495057;
@ -5218,7 +5211,7 @@ input[type="button"].btn-block {
background-color: transparent; background-color: transparent;
appearance: none; } appearance: none; }
.custom-range:focus { .custom-range:focus {
outline: none; } outline: 0; }
.custom-range:focus::-webkit-slider-thumb { .custom-range:focus::-webkit-slider-thumb {
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 111, 197, 0.75); } box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 111, 197, 0.75); }
.custom-range:focus::-moz-range-thumb { .custom-range:focus::-moz-range-thumb {
@ -5334,9 +5327,8 @@ input[type="button"].btn-block {
.nav-tabs { .nav-tabs {
border-bottom: 1px solid #dee2e6; } border-bottom: 1px solid #dee2e6; }
.nav-tabs .nav-item {
margin-bottom: -1px; }
.nav-tabs .nav-link { .nav-tabs .nav-link {
margin-bottom: -1px;
border: 1px solid transparent; } border: 1px solid transparent; }
.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
border-color: #e9ecef #e9ecef #dee2e6; } border-color: #e9ecef #e9ecef #dee2e6; }
@ -5357,10 +5349,12 @@ input[type="button"].btn-block {
color: #fff; color: #fff;
background-color: #0f6fc5; } background-color: #0f6fc5; }
.nav-fill > .nav-link,
.nav-fill .nav-item { .nav-fill .nav-item {
flex: 1 1 auto; flex: 1 1 auto;
text-align: center; } text-align: center; }
.nav-justified > .nav-link,
.nav-justified .nav-item { .nav-justified .nav-item {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
@ -5441,8 +5435,11 @@ input[type="button"].btn-block {
height: 1.5em; height: 1.5em;
vertical-align: middle; vertical-align: middle;
content: ""; content: "";
background: no-repeat center center; background: 50% / 100% 100% no-repeat; }
background-size: 100% 100%; }
.navbar-nav-scroll {
max-height: 75vh;
overflow-y: auto; }
@media (max-width: 575.98px) { @media (max-width: 575.98px) {
.navbar-expand-sm > .container, .navbar-expand-sm > .container,
@ -5464,6 +5461,8 @@ input[type="button"].btn-block {
.navbar-expand-sm > .container, .navbar-expand-sm > .container,
.navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-sm .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-sm .navbar-collapse { .navbar-expand-sm .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5490,6 +5489,8 @@ input[type="button"].btn-block {
.navbar-expand-md > .container, .navbar-expand-md > .container,
.navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-md .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-md .navbar-collapse { .navbar-expand-md .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5516,6 +5517,8 @@ input[type="button"].btn-block {
.navbar-expand-lg > .container, .navbar-expand-lg > .container,
.navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-lg .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-lg .navbar-collapse { .navbar-expand-lg .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5542,6 +5545,8 @@ input[type="button"].btn-block {
.navbar-expand-xl > .container, .navbar-expand-xl > .container,
.navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-xl .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-xl .navbar-collapse { .navbar-expand-xl .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5565,6 +5570,8 @@ input[type="button"].btn-block {
.navbar-expand > .container, .navbar-expand > .container,
.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { .navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand .navbar-nav-scroll {
overflow: visible; }
.navbar-expand .navbar-collapse { .navbar-expand .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5654,6 +5661,9 @@ input[type="button"].btn-block {
border-top-width: 0; } border-top-width: 0; }
.card > .list-group:last-child { .card > .list-group:last-child {
border-bottom-width: 0; } border-bottom-width: 0; }
.card > .card-header + .list-group,
.card > .list-group + .card-footer {
border-top: 0; }
.card-body { .card-body {
flex: 1 1 auto; flex: 1 1 auto;
@ -5681,8 +5691,6 @@ input[type="button"].btn-block {
margin-bottom: 0; margin-bottom: 0;
background-color: rgba(0, 0, 0, 0.03); background-color: rgba(0, 0, 0, 0.03);
border-bottom: 1px solid rgba(0, 0, 0, 0.125); } border-bottom: 1px solid rgba(0, 0, 0, 0.125); }
.card-header + .list-group .list-group-item:first-child {
border-top: 0; }
.card-footer { .card-footer {
padding: 0.75rem 1.25rem; padding: 0.75rem 1.25rem;
@ -5755,12 +5763,14 @@ input[type="button"].btn-block {
display: inline-block; display: inline-block;
width: 100%; } } width: 100%; } }
.accordion > .card { .accordion {
overflow: hidden; } overflow-anchor: none; }
.accordion > .card:not(:last-of-type) { .accordion > .card {
border-bottom: 0; } overflow: hidden; }
.accordion > .card > .card-header { .accordion > .card:not(:last-of-type) {
margin-bottom: -1px; } border-bottom: 0; }
.accordion > .card > .card-header {
margin-bottom: -1px; }
.breadcrumb { .breadcrumb {
display: flex; display: flex;
@ -5770,21 +5780,22 @@ input[type="button"].btn-block {
list-style: none; list-style: none;
background-color: transparent; } background-color: transparent; }
.breadcrumb-item { .breadcrumb-item + .breadcrumb-item {
display: flex; } padding-left: 0.5rem; }
.breadcrumb-item + .breadcrumb-item { .breadcrumb-item + .breadcrumb-item::before {
padding-left: 0.5rem; } float: left;
.breadcrumb-item + .breadcrumb-item::before { padding-right: 0.5rem;
display: inline-block; color: #6c757d;
padding-right: 0.5rem; content: "/"; }
color: #6c757d;
content: "/"; } .breadcrumb-item + .breadcrumb-item:hover::before {
.breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; }
text-decoration: underline; }
.breadcrumb-item + .breadcrumb-item:hover::before { .breadcrumb-item + .breadcrumb-item:hover::before {
text-decoration: none; } text-decoration: none; }
.breadcrumb-item.active {
color: #6c757d; } .breadcrumb-item.active {
color: #6c757d; }
.pagination { .pagination {
display: flex; display: flex;
@ -5976,6 +5987,7 @@ input[type="button"].btn-block {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
z-index: 2;
padding: 0.75rem 1.25rem; padding: 0.75rem 1.25rem;
color: inherit; } color: inherit; }
@ -6084,7 +6096,7 @@ input[type="button"].btn-block {
background-size: 1rem 1rem; } background-size: 1rem 1rem; }
.progress-bar-animated { .progress-bar-animated {
animation: progress-bar-stripes 1s linear infinite; } animation: 1s linear infinite progress-bar-stripes; }
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
.progress-bar-animated { .progress-bar-animated {
animation: none; } } animation: none; } }
@ -6314,14 +6326,13 @@ a.close.disabled {
pointer-events: none; } pointer-events: none; }
.toast { .toast {
flex-basis: 350px;
max-width: 350px; max-width: 350px;
overflow: hidden;
font-size: 0.875rem; font-size: 0.875rem;
background-color: rgba(255, 255, 255, 0.85); background-color: rgba(255, 255, 255, 0.85);
background-clip: padding-box; background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.1); border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
backdrop-filter: blur(10px);
opacity: 0; } opacity: 0; }
.toast:not(:last-child) { .toast:not(:last-child) {
margin-bottom: 0.75rem; } margin-bottom: 0.75rem; }
@ -6498,7 +6509,7 @@ a.close.disabled {
z-index: 1070; z-index: 1070;
display: block; display: block;
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
@ -6581,7 +6592,7 @@ a.close.disabled {
z-index: 1060; z-index: 1060;
display: block; display: block;
max-width: 276px; max-width: 276px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
@ -6794,7 +6805,7 @@ a.close.disabled {
display: inline-block; display: inline-block;
width: 20px; width: 20px;
height: 20px; height: 20px;
background: no-repeat 50% / 100% 100%; } background: 50% / 100% 100% no-repeat; }
.carousel-control-prev-icon { .carousel-control-prev-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); } background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); }
@ -6858,7 +6869,7 @@ a.close.disabled {
border: 0.25em solid currentColor; border: 0.25em solid currentColor;
border-right-color: transparent; border-right-color: transparent;
border-radius: 50%; border-radius: 50%;
animation: spinner-border .75s linear infinite; } animation: .75s linear infinite spinner-border; }
.spinner-border-sm { .spinner-border-sm {
width: 1rem; width: 1rem;
@ -6880,12 +6891,17 @@ a.close.disabled {
background-color: currentColor; background-color: currentColor;
border-radius: 50%; border-radius: 50%;
opacity: 0; opacity: 0;
animation: spinner-grow .75s linear infinite; } animation: .75s linear infinite spinner-grow; }
.spinner-grow-sm { .spinner-grow-sm {
width: 1rem; width: 1rem;
height: 1rem; } height: 1rem; }
@media (prefers-reduced-motion: reduce) {
.spinner-border,
.spinner-grow {
animation-duration: 1.5s; } }
.align-baseline { .align-baseline {
vertical-align: baseline !important; } vertical-align: baseline !important; }
@ -9536,6 +9552,7 @@ a.text-dark:hover, a.text-dark:focus {
text-decoration: none !important; } text-decoration: none !important; }
.text-break { .text-break {
word-break: break-word !important;
word-wrap: break-word !important; } word-wrap: break-word !important; }
.text-reset { .text-reset {
@ -19565,6 +19582,7 @@ div.editor_atto_content:hover .atto_control {
.has-danger .editor_atto_content.form-control-danger .invalid-tooltip { .has-danger .editor_atto_content.form-control-danger .invalid-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; max-width: 100%;
@ -19574,6 +19592,12 @@ div.editor_atto_content:hover .atto_control {
line-height: 1.5; line-height: 1.5;
color: #fff; color: #fff;
background-color: rgba(202, 49, 32, 0.9); } background-color: rgba(202, 49, 32, 0.9); }
.form-row > .col > .has-danger .editor_atto_content.form-control .invalid-tooltip,
.form-row > [class*="col-"] > .has-danger .editor_atto_content.form-control .invalid-tooltip, .form-row > .col >
.has-danger .editor_atto_content.form-control-danger .invalid-tooltip,
.form-row > [class*="col-"] >
.has-danger .editor_atto_content.form-control-danger .invalid-tooltip {
left: 5px; }
.was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-feedback,
.was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control.is-invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control.is-invalid ~ .invalid-feedback,
@ -19611,7 +19635,7 @@ div.editor_atto_content:hover .atto_control {
.has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid { .has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid {
border-color: #ca3120; border-color: #ca3120;
padding-right: calc(0.75em + 2.3125rem); padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; }
.was-validated .has-danger .editor_atto_content.form-control .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control .custom-select.is-invalid:focus, .was-validated .was-validated .has-danger .editor_atto_content.form-control .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control .custom-select.is-invalid:focus, .was-validated
.has-danger .editor_atto_content.form-control-danger .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control-danger .custom-select:invalid:focus,
.has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid:focus { .has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid:focus {

View file

@ -4,105 +4,105 @@
<location>scss/bootstrap</location> <location>scss/bootstrap</location>
<name>Twitter Bootstrap</name> <name>Twitter Bootstrap</name>
<license>MIT</license> <license>MIT</license>
<version>4.5.0</version> <version>4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/alert.js</location> <location>amd/src/bootstrap/alert.js</location>
<name>bootstrap-alert</name> <name>bootstrap-alert</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/button.js</location> <location>amd/src/bootstrap/button.js</location>
<name>bootstrap-button</name> <name>bootstrap-button</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/carousel.js</location> <location>amd/src/bootstrap/carousel.js</location>
<name>bootstrap-carousel</name> <name>bootstrap-carousel</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/collapse.js</location> <location>amd/src/bootstrap/collapse.js</location>
<name>bootstrap-collapse</name> <name>bootstrap-collapse</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/dropdown.js</location> <location>amd/src/bootstrap/dropdown.js</location>
<name>bootstrap-dropdown</name> <name>bootstrap-dropdown</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/index.js</location> <location>amd/src/index.js</location>
<name>bootstrap-util</name> <name>bootstrap-util</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/modal.js</location> <location>amd/src/bootstrap/modal.js</location>
<name>bootstrap-modal</name> <name>bootstrap-modal</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/popover.js</location> <location>amd/src/bootstrap/popover.js</location>
<name>bootstrap-popover</name> <name>bootstrap-popover</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/tools/sanitizer.js</location> <location>amd/src/bootstrap/tools/sanitizer.js</location>
<name>bootstrap-sanitizer</name> <name>bootstrap-sanitizer</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/scrollspy.js</location> <location>amd/src/bootstrap/scrollspy.js</location>
<name>bootstrap-scrollspy</name> <name>bootstrap-scrollspy</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/tab.js</location> <location>amd/src/bootstrap/tab.js</location>
<name>bootstrap-tab</name> <name>bootstrap-tab</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/toast.js</location> <location>amd/src/bootstrap/toast.js</location>
<name>bootstrap-toast</name> <name>bootstrap-toast</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/tooltip.js</location> <location>amd/src/bootstrap/tooltip.js</location>
<name>bootstrap-tooltip</name> <name>bootstrap-tooltip</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>
<location>amd/src/bootstrap/util.js</location> <location>amd/src/bootstrap/util.js</location>
<name>bootstrap-util</name> <name>bootstrap-util</name>
<license>(MIT)</license> <license>(MIT)</license>
<version>v4.5.0</version> <version>v4.6.0</version>
<licenseversion></licenseversion> <licenseversion></licenseversion>
</library> </library>
<library> <library>

View file

@ -2327,10 +2327,10 @@
clip: auto; } clip: auto; }
/*! /*!
* Bootstrap v4.5.0 (https://getbootstrap.com/) * Bootstrap v4.6.0 (https://getbootstrap.com/)
* Copyright 2011-2020 The Bootstrap Authors * Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2020 Twitter, Inc. * Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root { :root {
--blue: #0f6fc5; --blue: #0f6fc5;
@ -2359,7 +2359,7 @@
--breakpoint-md: 768px; --breakpoint-md: 768px;
--breakpoint-lg: 992px; --breakpoint-lg: 992px;
--breakpoint-xl: 1200px; --breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
*, *,
@ -2378,7 +2378,7 @@ article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
body { body {
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 0.9375rem; font-size: 0.9375rem;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
@ -2468,10 +2468,10 @@ a {
color: #0a477e; color: #0a477e;
text-decoration: underline; } text-decoration: underline; }
a:not([href]) { a:not([href]):not([class]) {
color: inherit; color: inherit;
text-decoration: none; } text-decoration: none; }
a:not([href]):hover { a:not([href]):not([class]):hover {
color: inherit; color: inherit;
text-decoration: none; } text-decoration: none; }
@ -2510,7 +2510,8 @@ caption {
caption-side: bottom; } caption-side: bottom; }
th { th {
text-align: inherit; } text-align: inherit;
text-align: -webkit-match-parent; }
label { label {
display: inline-block; display: inline-block;
@ -2519,9 +2520,8 @@ label {
button { button {
border-radius: 0; } border-radius: 0; }
button:focus { button:focus:not(:focus-visible) {
outline: 1px dotted; outline: 0; }
outline: 5px auto -webkit-focus-ring-color; }
input, input,
button, button,
@ -2808,26 +2808,12 @@ pre {
max-height: 340px; max-height: 340px;
overflow-y: scroll; } overflow-y: scroll; }
.container { .container,
width: 100%; .container-fluid,
padding-right: 15px; .container-sm,
padding-left: 15px; .container-md,
margin-right: auto; .container-lg,
margin-left: auto; } .container-xl {
@media (min-width: 576px) {
.container {
max-width: 540px; } }
@media (min-width: 768px) {
.container {
max-width: 720px; } }
@media (min-width: 992px) {
.container {
max-width: 960px; } }
@media (min-width: 1200px) {
.container {
max-width: 1140px; } }
.container-fluid, .container-sm, .container-md, .container-lg, .container-xl {
width: 100%; width: 100%;
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
@ -2878,7 +2864,6 @@ pre {
.col { .col {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-1 > * { .row-cols-1 > * {
@ -3040,7 +3025,6 @@ pre {
.col-sm { .col-sm {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-sm-1 > * { .row-cols-sm-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3159,7 +3143,6 @@ pre {
.col-md { .col-md {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-md-1 > * { .row-cols-md-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3278,7 +3261,6 @@ pre {
.col-lg { .col-lg {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-lg-1 > * { .row-cols-lg-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3397,7 +3379,6 @@ pre {
.col-xl { .col-xl {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
min-width: 0;
max-width: 100%; } max-width: 100%; }
.row-cols-xl-1 > * { .row-cols-xl-1 > * {
flex: 0 0 100%; flex: 0 0 100%;
@ -3940,6 +3921,7 @@ textarea.form-control {
.valid-tooltip { .valid-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; max-width: 100%;
@ -3950,6 +3932,9 @@ textarea.form-control {
color: #fff; color: #fff;
background-color: rgba(53, 122, 50, 0.9); background-color: rgba(53, 122, 50, 0.9);
border-radius: 0.25rem; } border-radius: 0.25rem; }
.form-row > .col > .valid-tooltip,
.form-row > [class*="col-"] > .valid-tooltip {
left: 5px; }
.was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-feedback,
.was-validated :valid ~ .valid-tooltip, .was-validated :valid ~ .valid-tooltip,
@ -3975,7 +3960,7 @@ textarea.form-control {
.was-validated .custom-select:valid, .custom-select.is-valid { .was-validated .custom-select:valid, .custom-select.is-valid {
border-color: #357a32; border-color: #357a32;
padding-right: calc(0.75em + 2.3125rem); padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23357a32' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23357a32' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; }
.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {
border-color: #357a32; border-color: #357a32;
box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); } box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); }
@ -4020,6 +4005,7 @@ textarea.form-control {
.invalid-tooltip { .invalid-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; max-width: 100%;
@ -4030,6 +4016,9 @@ textarea.form-control {
color: #fff; color: #fff;
background-color: rgba(202, 49, 32, 0.9); background-color: rgba(202, 49, 32, 0.9);
border-radius: 0.25rem; } border-radius: 0.25rem; }
.form-row > .col > .invalid-tooltip,
.form-row > [class*="col-"] > .invalid-tooltip {
left: 5px; }
.was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-feedback,
.was-validated :invalid ~ .invalid-tooltip, .was-validated :invalid ~ .invalid-tooltip,
@ -4055,7 +4044,7 @@ textarea.form-control {
.was-validated .custom-select:invalid, .custom-select.is-invalid { .was-validated .custom-select:invalid, .custom-select.is-invalid {
border-color: #ca3120; border-color: #ca3120;
padding-right: calc(0.75em + 2.3125rem); padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; }
.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {
border-color: #ca3120; border-color: #ca3120;
box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); }
@ -4790,7 +4779,7 @@ input[type="button"].btn-block {
text-decoration: none; text-decoration: none;
background-color: #0f6fc5; } background-color: #0f6fc5; }
.dropdown-item.disabled, .dropdown-item:disabled { .dropdown-item.disabled, .dropdown-item:disabled {
color: #6c757d; color: #8f959e;
pointer-events: none; pointer-events: none;
background-color: transparent; } background-color: transparent; }
@ -4931,10 +4920,6 @@ input[type="button"].btn-block {
z-index: 3; } z-index: 3; }
.input-group > .custom-file .custom-file-input:focus { .input-group > .custom-file .custom-file-input:focus {
z-index: 4; } z-index: 4; }
.input-group > .form-control:not(:last-child),
.input-group > .custom-select:not(:last-child) {
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.input-group > .form-control:not(:first-child), .input-group > .form-control:not(:first-child),
.input-group > .custom-select:not(:first-child) { .input-group > .custom-select:not(:first-child) {
border-top-left-radius: 0; border-top-left-radius: 0;
@ -4943,12 +4928,19 @@ input[type="button"].btn-block {
display: flex; display: flex;
align-items: center; } align-items: center; }
.input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label,
.input-group > .custom-file:not(:last-child) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.input-group > .custom-file:not(:first-child) .custom-file-label { .input-group > .custom-file:not(:first-child) .custom-file-label {
border-top-left-radius: 0; border-top-left-radius: 0;
border-bottom-left-radius: 0; } border-bottom-left-radius: 0; }
.input-group:not(.has-validation) > .form-control:not(:last-child),
.input-group:not(.has-validation) > .custom-select:not(:last-child),
.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.input-group.has-validation > .form-control:nth-last-child(n + 3),
.input-group.has-validation > .custom-select:nth-last-child(n + 3),
.input-group.has-validation > .custom-file:nth-last-child(n + 3) .custom-file-label::after {
border-top-right-radius: 0;
border-bottom-right-radius: 0; }
.input-group-prepend, .input-group-prepend,
.input-group-append { .input-group-append {
@ -5041,8 +5033,10 @@ input[type="button"].btn-block {
.input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .btn,
.input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-prepend > .input-group-text,
.input-group > .input-group-append:not(:last-child) > .btn, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
.input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .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) { .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
border-top-right-radius: 0; border-top-right-radius: 0;
@ -5059,9 +5053,11 @@ input[type="button"].btn-block {
.custom-control { .custom-control {
position: relative; position: relative;
z-index: 1;
display: block; display: block;
min-height: 1.40625rem; min-height: 1.40625rem;
padding-left: 1.5rem; } padding-left: 1.5rem;
color-adjust: exact; }
.custom-control-inline { .custom-control-inline {
display: inline-flex; display: inline-flex;
@ -5114,7 +5110,7 @@ input[type="button"].btn-block {
width: 1rem; width: 1rem;
height: 1rem; height: 1rem;
content: ""; content: "";
background: no-repeat 50% / 50% 50%; } background: 50% / 50% 50% no-repeat; }
.custom-checkbox .custom-control-label::before { .custom-checkbox .custom-control-label::before {
border-radius: 0.25rem; } border-radius: 0.25rem; }
@ -5178,7 +5174,7 @@ input[type="button"].btn-block {
line-height: 1.5; line-height: 1.5;
color: #495057; color: #495057;
vertical-align: middle; vertical-align: middle;
background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat;
border: 1px solid #8f959e; border: 1px solid #8f959e;
border-radius: 0.25rem; border-radius: 0.25rem;
appearance: none; } appearance: none; }
@ -5235,6 +5231,7 @@ input[type="button"].btn-block {
width: 100%; width: 100%;
height: calc(1.5em + 0.75rem + 2px); height: calc(1.5em + 0.75rem + 2px);
margin: 0; margin: 0;
overflow: hidden;
opacity: 0; } opacity: 0; }
.custom-file-input:focus ~ .custom-file-label { .custom-file-input:focus ~ .custom-file-label {
border-color: #61aef3; border-color: #61aef3;
@ -5255,6 +5252,7 @@ input[type="button"].btn-block {
z-index: 1; z-index: 1;
height: calc(1.5em + 0.75rem + 2px); height: calc(1.5em + 0.75rem + 2px);
padding: 0.375rem 0.75rem; padding: 0.375rem 0.75rem;
overflow: hidden;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
color: #495057; color: #495057;
@ -5284,7 +5282,7 @@ input[type="button"].btn-block {
background-color: transparent; background-color: transparent;
appearance: none; } appearance: none; }
.custom-range:focus { .custom-range:focus {
outline: none; } outline: 0; }
.custom-range:focus::-webkit-slider-thumb { .custom-range:focus::-webkit-slider-thumb {
box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 111, 197, 0.75); } box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 111, 197, 0.75); }
.custom-range:focus::-moz-range-thumb { .custom-range:focus::-moz-range-thumb {
@ -5407,9 +5405,8 @@ input[type="button"].btn-block {
.nav-tabs { .nav-tabs {
border-bottom: 1px solid #dee2e6; } border-bottom: 1px solid #dee2e6; }
.nav-tabs .nav-item {
margin-bottom: -1px; }
.nav-tabs .nav-link { .nav-tabs .nav-link {
margin-bottom: -1px;
border: 1px solid transparent; border: 1px solid transparent;
border-top-left-radius: 0.25rem; border-top-left-radius: 0.25rem;
border-top-right-radius: 0.25rem; } border-top-right-radius: 0.25rem; }
@ -5437,10 +5434,12 @@ input[type="button"].btn-block {
color: #fff; color: #fff;
background-color: #0f6fc5; } background-color: #0f6fc5; }
.nav-fill > .nav-link,
.nav-fill .nav-item { .nav-fill .nav-item {
flex: 1 1 auto; flex: 1 1 auto;
text-align: center; } text-align: center; }
.nav-justified > .nav-link,
.nav-justified .nav-item { .nav-justified .nav-item {
flex-basis: 0; flex-basis: 0;
flex-grow: 1; flex-grow: 1;
@ -5522,8 +5521,11 @@ input[type="button"].btn-block {
height: 1.5em; height: 1.5em;
vertical-align: middle; vertical-align: middle;
content: ""; content: "";
background: no-repeat center center; background: 50% / 100% 100% no-repeat; }
background-size: 100% 100%; }
.navbar-nav-scroll {
max-height: 75vh;
overflow-y: auto; }
@media (max-width: 575.98px) { @media (max-width: 575.98px) {
.navbar-expand-sm > .container, .navbar-expand-sm > .container,
@ -5545,6 +5547,8 @@ input[type="button"].btn-block {
.navbar-expand-sm > .container, .navbar-expand-sm > .container,
.navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-sm .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-sm .navbar-collapse { .navbar-expand-sm .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5571,6 +5575,8 @@ input[type="button"].btn-block {
.navbar-expand-md > .container, .navbar-expand-md > .container,
.navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-md .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-md .navbar-collapse { .navbar-expand-md .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5597,6 +5603,8 @@ input[type="button"].btn-block {
.navbar-expand-lg > .container, .navbar-expand-lg > .container,
.navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-lg .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-lg .navbar-collapse { .navbar-expand-lg .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5623,6 +5631,8 @@ input[type="button"].btn-block {
.navbar-expand-xl > .container, .navbar-expand-xl > .container,
.navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand-xl .navbar-nav-scroll {
overflow: visible; }
.navbar-expand-xl .navbar-collapse { .navbar-expand-xl .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5646,6 +5656,8 @@ input[type="button"].btn-block {
.navbar-expand > .container, .navbar-expand > .container,
.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { .navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl {
flex-wrap: nowrap; } flex-wrap: nowrap; }
.navbar-expand .navbar-nav-scroll {
overflow: visible; }
.navbar-expand .navbar-collapse { .navbar-expand .navbar-collapse {
display: flex !important; display: flex !important;
flex-basis: auto; } flex-basis: auto; }
@ -5740,6 +5752,9 @@ input[type="button"].btn-block {
border-bottom-width: 0; border-bottom-width: 0;
border-bottom-right-radius: calc(0.25rem - 1px); border-bottom-right-radius: calc(0.25rem - 1px);
border-bottom-left-radius: calc(0.25rem - 1px); } border-bottom-left-radius: calc(0.25rem - 1px); }
.card > .card-header + .list-group,
.card > .list-group + .card-footer {
border-top: 0; }
.card-body { .card-body {
flex: 1 1 auto; flex: 1 1 auto;
@ -5769,8 +5784,6 @@ input[type="button"].btn-block {
border-bottom: 1px solid rgba(0, 0, 0, 0.125); } border-bottom: 1px solid rgba(0, 0, 0, 0.125); }
.card-header:first-child { .card-header:first-child {
border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; }
.card-header + .list-group .list-group-item:first-child {
border-top: 0; }
.card-footer { .card-footer {
padding: 0.75rem 1.25rem; padding: 0.75rem 1.25rem;
@ -5795,7 +5808,8 @@ input[type="button"].btn-block {
right: 0; right: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
padding: 1.25rem; } padding: 1.25rem;
border-radius: calc(0.25rem - 1px); }
.card-img, .card-img,
.card-img-top, .card-img-top,
@ -5873,18 +5887,20 @@ input[type="button"].btn-block {
display: inline-block; display: inline-block;
width: 100%; } } width: 100%; } }
.accordion > .card { .accordion {
overflow: hidden; } overflow-anchor: none; }
.accordion > .card:not(:last-of-type) { .accordion > .card {
border-bottom: 0; overflow: hidden; }
border-bottom-right-radius: 0; .accordion > .card:not(:last-of-type) {
border-bottom-left-radius: 0; } border-bottom: 0;
.accordion > .card:not(:first-of-type) { border-bottom-right-radius: 0;
border-top-left-radius: 0; border-bottom-left-radius: 0; }
border-top-right-radius: 0; } .accordion > .card:not(:first-of-type) {
.accordion > .card > .card-header { border-top-left-radius: 0;
border-radius: 0; border-top-right-radius: 0; }
margin-bottom: -1px; } .accordion > .card > .card-header {
border-radius: 0;
margin-bottom: -1px; }
.breadcrumb { .breadcrumb {
display: flex; display: flex;
@ -5895,21 +5911,22 @@ input[type="button"].btn-block {
background-color: transparent; background-color: transparent;
border-radius: 0.25rem; } border-radius: 0.25rem; }
.breadcrumb-item { .breadcrumb-item + .breadcrumb-item {
display: flex; } padding-left: 0.5rem; }
.breadcrumb-item + .breadcrumb-item { .breadcrumb-item + .breadcrumb-item::before {
padding-left: 0.5rem; } float: left;
.breadcrumb-item + .breadcrumb-item::before { padding-right: 0.5rem;
display: inline-block; color: #6c757d;
padding-right: 0.5rem; content: "/"; }
color: #6c757d;
content: "/"; } .breadcrumb-item + .breadcrumb-item:hover::before {
.breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; }
text-decoration: underline; }
.breadcrumb-item + .breadcrumb-item:hover::before { .breadcrumb-item + .breadcrumb-item:hover::before {
text-decoration: none; } text-decoration: none; }
.breadcrumb-item.active {
color: #6c757d; } .breadcrumb-item.active {
color: #6c757d; }
.pagination { .pagination {
display: flex; display: flex;
@ -6129,6 +6146,7 @@ input[type="button"].btn-block {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
z-index: 2;
padding: 0.75rem 1.25rem; padding: 0.75rem 1.25rem;
color: inherit; } color: inherit; }
@ -6238,7 +6256,7 @@ input[type="button"].btn-block {
background-size: 1rem 1rem; } background-size: 1rem 1rem; }
.progress-bar-animated { .progress-bar-animated {
animation: progress-bar-stripes 1s linear infinite; } animation: 1s linear infinite progress-bar-stripes; }
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
.progress-bar-animated { .progress-bar-animated {
animation: none; } } animation: none; } }
@ -6507,14 +6525,13 @@ a.close.disabled {
pointer-events: none; } pointer-events: none; }
.toast { .toast {
flex-basis: 350px;
max-width: 350px; max-width: 350px;
overflow: hidden;
font-size: 0.875rem; font-size: 0.875rem;
background-color: rgba(255, 255, 255, 0.85); background-color: rgba(255, 255, 255, 0.85);
background-clip: padding-box; background-clip: padding-box;
border: 1px solid rgba(0, 0, 0, 0.1); border: 1px solid rgba(0, 0, 0, 0.1);
box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
backdrop-filter: blur(10px);
opacity: 0; opacity: 0;
border-radius: 0.25rem; } border-radius: 0.25rem; }
.toast:not(:last-child) { .toast:not(:last-child) {
@ -6534,7 +6551,9 @@ a.close.disabled {
color: #6c757d; color: #6c757d;
background-color: rgba(255, 255, 255, 0.85); background-color: rgba(255, 255, 255, 0.85);
background-clip: padding-box; background-clip: padding-box;
border-bottom: 1px solid rgba(0, 0, 0, 0.05); } border-bottom: 1px solid rgba(0, 0, 0, 0.05);
border-top-left-radius: calc(0.25rem - 1px);
border-top-right-radius: calc(0.25rem - 1px); }
.toast-body { .toast-body {
padding: 0.75rem; } padding: 0.75rem; }
@ -6697,7 +6716,7 @@ a.close.disabled {
z-index: 1070; z-index: 1070;
display: block; display: block;
margin: 0; margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
@ -6781,7 +6800,7 @@ a.close.disabled {
z-index: 1060; z-index: 1060;
display: block; display: block;
max-width: 276px; max-width: 276px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-style: normal; font-style: normal;
font-weight: 400; font-weight: 400;
line-height: 1.5; line-height: 1.5;
@ -6997,7 +7016,7 @@ a.close.disabled {
display: inline-block; display: inline-block;
width: 20px; width: 20px;
height: 20px; height: 20px;
background: no-repeat 50% / 100% 100%; } background: 50% / 100% 100% no-repeat; }
.carousel-control-prev-icon { .carousel-control-prev-icon {
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); } background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); }
@ -7061,7 +7080,7 @@ a.close.disabled {
border: 0.25em solid currentColor; border: 0.25em solid currentColor;
border-right-color: transparent; border-right-color: transparent;
border-radius: 50%; border-radius: 50%;
animation: spinner-border .75s linear infinite; } animation: .75s linear infinite spinner-border; }
.spinner-border-sm { .spinner-border-sm {
width: 1rem; width: 1rem;
@ -7083,12 +7102,17 @@ a.close.disabled {
background-color: currentColor; background-color: currentColor;
border-radius: 50%; border-radius: 50%;
opacity: 0; opacity: 0;
animation: spinner-grow .75s linear infinite; } animation: .75s linear infinite spinner-grow; }
.spinner-grow-sm { .spinner-grow-sm {
width: 1rem; width: 1rem;
height: 1rem; } height: 1rem; }
@media (prefers-reduced-motion: reduce) {
.spinner-border,
.spinner-grow {
animation-duration: 1.5s; } }
.align-baseline { .align-baseline {
vertical-align: baseline !important; } vertical-align: baseline !important; }
@ -9739,6 +9763,7 @@ a.text-dark:hover, a.text-dark:focus {
text-decoration: none !important; } text-decoration: none !important; }
.text-break { .text-break {
word-break: break-word !important;
word-wrap: break-word !important; } word-wrap: break-word !important; }
.text-reset { .text-reset {
@ -19747,6 +19772,7 @@ div.editor_atto_content:hover .atto_control {
.has-danger .editor_atto_content.form-control-danger .invalid-tooltip { .has-danger .editor_atto_content.form-control-danger .invalid-tooltip {
position: absolute; position: absolute;
top: 100%; top: 100%;
left: 0;
z-index: 5; z-index: 5;
display: none; display: none;
max-width: 100%; max-width: 100%;
@ -19757,6 +19783,12 @@ div.editor_atto_content:hover .atto_control {
color: #fff; color: #fff;
background-color: rgba(202, 49, 32, 0.9); background-color: rgba(202, 49, 32, 0.9);
border-radius: 0.25rem; } border-radius: 0.25rem; }
.form-row > .col > .has-danger .editor_atto_content.form-control .invalid-tooltip,
.form-row > [class*="col-"] > .has-danger .editor_atto_content.form-control .invalid-tooltip, .form-row > .col >
.has-danger .editor_atto_content.form-control-danger .invalid-tooltip,
.form-row > [class*="col-"] >
.has-danger .editor_atto_content.form-control-danger .invalid-tooltip {
left: 5px; }
.was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-feedback,
.was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control.is-invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control.is-invalid ~ .invalid-feedback,
@ -19794,7 +19826,7 @@ div.editor_atto_content:hover .atto_control {
.has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid { .has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid {
border-color: #ca3120; border-color: #ca3120;
padding-right: calc(0.75em + 2.3125rem); padding-right: calc(0.75em + 2.3125rem);
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); } background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ca3120' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; }
.was-validated .has-danger .editor_atto_content.form-control .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control .custom-select.is-invalid:focus, .was-validated .was-validated .has-danger .editor_atto_content.form-control .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control .custom-select.is-invalid:focus, .was-validated
.has-danger .editor_atto_content.form-control-danger .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control-danger .custom-select:invalid:focus,
.has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid:focus { .has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid:focus {