Compare commits

...

9 Commits

Author SHA1 Message Date
k.pienkowska
94a449062b Release: 8.2.0 2025-01-20 10:39:42 +01:00
k.pienkowska
b9c591ac83 Release: 8.1.0 2024-11-18 10:54:59 +01:00
k.pienkowska
afda5bb2de Release: 8.0.0 2024-09-16 10:25:53 +02:00
Piotr Guściora
e5d70a654d
Update README.md 2024-07-24 17:36:47 +02:00
k.pienkowska
4b70601400 release: 7.3.2 2024-06-17 09:17:01 +02:00
k.pienkowska
6e36747893 release: 7.3.1 2024-06-10 09:52:00 +02:00
k.pienkowska
44dd14903b release: 7.3.0 2024-05-27 09:23:49 +02:00
k.pienkowska
1c424aba40 release: 7.2.0 2024-03-11 12:17:27 +01:00
k.pienkowska
edf95e73b6 Update License 2024-02-15 15:26:48 +01:00
112 changed files with 6554 additions and 3804 deletions

21
LICENSE
View File

@ -1,21 +0,0 @@
MIT License
Copyright (c) 2021 MDBootstrap
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Binary file not shown.

17
License.txt Normal file
View File

@ -0,0 +1,17 @@
MIT license for MDB Free
Free packages are available under the MIT License.
-- Highlights
● Free for personal use
● Free for commercial use
● No attribution required
-- Copyright notice
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
The software is provided "As is", without warranty of any kind, express or implied, including but not limited To the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall The authors or copyright holders be liable for any claim, damages or other liability, whether in an action of Contract, tort or otherwise, arising from, out of or in connection with the software or the use or other Dealings in the software.

View File

@ -26,10 +26,13 @@ Regardless whether you want to create a Travel Blog or an e-commerce shop to sel
<p>Created by <a href="https://mdbootstrap.com"><img height="30" src="https://mdbootstrap.com/img/Marketing/general/logo/medium/mdb-r.png"></a>
<a href="https://npmcharts.com/compare/mdbootstrap?minimal=true"> <img src="https://img.shields.io/npm/dm/mdbootstrap.svg?label=NPM%20Downloads" alt="Downloads"></a>
<a href="https://github.com/mdbootstrap/bootstrap-material-design/blob/master/License.pdf"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a>
<a href="https://twitter.com/intent/tweet/?text=Thanks+@mdbootstrap+for+creating+amazing+and+free+Material+Design+for+Bootstrap+5+UI+KIT%20https://mdbootstrap.com/docs/jquery/&hashtags=javascript,code,webdesign,bootstrap"><img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Let%20us%20know%20you%20were%20here%21&"></a>
<a href="https://www.youtube.com/watch?v=c9B4TPnak1A"><img alt="YouTube Video Views" src="https://img.shields.io/youtube/views/c9B4TPnak1A?label=Bootstrap%205%20Tutorial%20Views&style=social"></a></p>
<a href="https://x.com/intent/post?text=Thanks+%40mdbootstrap+for+creating+amazing+and+free+Material+Design+for+Bootstrap+5+UI+KIT+https%3A%2F%2Fmdbootstrap.com%2Fdocs%2Fjquery%2F&hashtags=javascript%2Ccode%2Cwebdesign%2Cbootstrap"><img src="https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Let%20us%20know%20you%20were%20here%21&"></a>
<a href="https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/">
<img src="https://img.shields.io/static/v1?label=MDBootstrap&message=Tutorial&labelColor=007bff&color=ffffff&logoColor=007bff&textColor=000000" alt="MDBootstrap tutorial">
</a></p>
Trusted by <b>2 000 000+</b> developers & designers. Used by companies & institutions like
Trusted by <b>3 000 000+</b> developers & designers. Used by companies & institutions like
<table>
<tbody>
<tr>
@ -78,37 +81,37 @@ ___
# Bootstrap 5 tutorial
**[>> Learn more about Bootstrap 5](https://mdbootstrap.com/docs/standard/bootstrap-5/)**
**[>> Learn more about Bootstrap 5](https://mdbootstrap.com/docs/standard/)**
**[>> Bootstrap 5 Tutorial](https://mdbootstrap.com/docs/standard/bootstrap-5-tutorial/)**
**[>> Bootstrap 5 Tutorial](https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/)**
**[>> Subscribe to our YouTube channel with dozens of Bootstrap tutorials](https://www.youtube.com/c/Mdbootstrap?sub_confirmation=1)**
**[>> Subscribe to our YouTube channel with dozens of Bootstrap tutorials](https://www.youtube.com/c/Mdbootstrap)**
<table>
<tbody>
<tr>
<td align="center">
<a href="https://mdbootstrap.com/docs/standard/getting-started/" alt="Bootstrap Tutorials" rel="dofollow">
<a href="https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/" alt="Bootstrap Tutorials" rel="dofollow">
<img src="https://mdbootstrap.com/wp-content/uploads/2020/12/learnmore-1.png">
</a>
</td>
<td>
<a href="https://mdbootstrap.com/docs/standard/bootstrap-5-tutorial/#section-beginner" alt="Bootstrap 5" rel="dofollow">
<img src="https://mdbootstrap.com/wp-content/uploads/2020/12/cover-bootstrap-5-1.png">
<a href="https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/#section-beginner" alt="Bootstrap 5" rel="dofollow">
<img src="https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/assets/featured-image.png">
</a>
</td>
</tr>
<tr>
<td align="center">
<p align="center"><b>Start learning from Basics</b></p>
<a href="https://mdbootstrap.com/docs/standard/getting-started/" alt="Bootstrap 5" rel="dofollow">
<a href="https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/" alt="Bootstrap 5" rel="dofollow">
<img src="https://mdbootstrap.com/wp-content/uploads/2020/12/Screenshot_26.png">
</a>
</td>
<td align="center">
<p align="center"><b>Learn Bootstrap 5 | Crash Course for Beginners in 1.5H</b></p>
<a href="https://mdbootstrap.com/docs/standard/bootstrap-5-tutorial/#section-beginner" alt="Bootstrap 5" rel="dofollow">
<a href="https://mdbootstrap.com/learn/mdb-foundations/basics/introduction/#section-beginner" alt="Bootstrap 5" rel="dofollow">
<img src="https://mdbootstrap.com/wp-content/uploads/2020/12/Screenshot_26.png">
</a>
</td>

View File

@ -1,5 +1,5 @@
MDB5
Version: PRO 7.1.0
Version: FREE 8.2.0
Documentation:
https://mdbootstrap.com/docs/standard/

27
css/mdb.dark.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

13
css/mdb.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

13
css/mdb.rtl.min.css vendored

File diff suppressed because one or more lines are too long

8720
js/mdb.es.min.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

10
js/mdb.umd.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,153 +0,0 @@
Free packages are available under the MIT License.
**Hightlights**
- Free for personal use
- Free for commercial use
- No attribution required
**Copyright notice**
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions.
The above copyright notice and this permission notice shall be included in all copies
or substantial portions of the Software.
The software is provided "As is", without warranty of any kind, express or implied,
including but not limited To the warranties of merchantability, fitness for a particular purpose
and noninfringement. In no event shall The authors or copyright holders be liable for any claim,
damages or other liability, whether in an action of Contract, tort or otherwise, arising from,
out of or in connection with the software or the use or other Dealings in the software.
________________________________________
**Commercial license for MDB Pro**
We offer our clients a business-friendly commercial license tailored to their needs. We also provide
full support in both the purchasing and implementation process.
**End User License Agreement (EULA)**
**Hightlights**
- Lifetime usage of the components included in the UI Kits
- Subscription for Premium Access features (can be canceled at any time)
- You can create an unlimited number of projects
- You have right to personal use
- You have right to commercial use
- No attribution is required
________________________________________
Paid packages are licensed according to the End User License Agreement (EULA) detailed below.
By using products listed below (Product) from StartupFlow s.c. (MDB / MDBootstrap), you agree that this
is a legally binding and valid contract and agree to be bound by it. You agree to abide by the intellectual
property laws and all of the terms and conditions of this Agreement.
**Rights**
**No attribution required**
You are not required to attribute or link to Material Design for Bootstrap in any projects.
**Right to personal use**
The License grants you, the purchaser, an ongoing, non-exclusive, worldwide license to make use of the Product
in personal projects, in accordance with the EULA.
**Right to commercial use**
The License grants you, the purchaser, an ongoing, non-exclusive, worldwide license to make use of the Product
in commercial projects, in accordance with the EULA.
**Right to modification**
You may modify the resources according to your requirements.
**Right to create the End Product**
You may use the Product to create End Products in accordance with the EULA. The End Product is a customised
implementation of the Product requiring an application of skill and effort (f.e. a webiste build with MDB Template
with customized, modified content is an End Product because it requires skill and efort while a webiste which
is literally copy-pasted MDB Template isn't).
**Lifetime usage**
You are entitled to use the purchased Product for life.
**Premium Access features**
Premium Access features are covered by a reocurring subscription. As long as the subscription is active you have
access to all maintenance and bonus features. The user has a right to cancell the subscription without losing
the right to use the Pro package itself.
**User limits**
User limit for a license is specified on the checkout and during the purchase. License holder
(an owner of mdbootstrap account to which the license is assigned) has a right to allow usage for additional users
but not more then the "developer number" specified in the order.
**Unimited projects**
The License grants you, the purchaser, an ongoing, non-exclusive right to create unlimited End Products
for yourself or for multiple clients.
___________________
**Restrictions**
**Unauthorised redistribution**
You cannot redistribute, resell, lease, license, sub-license or offer the Product directly or non-directly
to any other third party, without an explicit agreement with StartupFlow s.c.. Learn more about the Reseller Terms.
**Product usage by end-user**
You cannot permit an end user of the End Product to use the Product separately from the End Product.
(f.e. Your client can use the website X that you've built for him, but he cannot build another website Y himself
using the files installed for the website X.
**Open source**
You cannot redistribute any of the software, or products created with MDB software to repositories
like GitHub, where they are publicly available or include into any Open Source projects.
**Competition**
You cannot use the Product to create any End Products that would compete with the Product itself.
(f.e. you cannot use MDB 5 Pro to create a framework, library, design system, CMS, template, plugin or a page generator).
**Premium Access terms:**
Purchase of MDB Pro comes with Monthly or Annual access to maintenance features. A license holder
has a right to use those features as long as his subscription is active. License value is 85% package
contents with 12 months of updates & Git access; 15% Premium Support.
"Single Use" licenses don't include any Premium Access features.
**Premium Access includes:**
- Premium Support - your tickets are guranteed to be answered by a professional from MDBootstrap Team
- Git repository access - acces to a repositories on git.mdbootstrap.com that enables npm installation
- Unlimited Updates - access to all Product updates released within the maintenance period (f.e. all
new versions of the same product released qithin 12 months after an annual subscription is created)
- Premium Snippets platform access - including community snippets, premium templates, lab projects and design blocks
- Documentation code examples
- Access to drag & drop Builder
- API access
- Access to PRO design generators
**Premium Support Terms**
Premium Support is provided only on the official MDB support forum (https://mdbootstrap.com/support/).
Technical code support regarding MDB UI Kits is not provided via email.
Support is provided from Monday to Friday, Premium Support tickets are usually answered within 1 workday.
Premium Support tickets are guaranteed to be answered by a professional developer from MDB team. Priority Support tickets are answered first.

View File

@ -1,11 +1,11 @@
{
"name": "mdb-ui-kit",
"version": "7.1.0",
"version": "8.2.0",
"type": "module",
"main": "./js/mdb.umd.min.js",
"module": "./js/mdb.es.min.js",
"homepage": "https://mdbootstrap.com/docs/standard/",
"repository": "https://github.com/mdbootstrap/mdb-ui-kit.git",
"author": "MDBootstrap",
"license": "MIT"
"license": "SEE LICENSE IN <License.txt>"
}

View File

@ -9,10 +9,15 @@ import {
} from '../../mdb/util';
import { enableDismissTrigger } from '../../bootstrap/mdb-prefix/util/component-functions';
const callbackInitState = new Map();
const alertCallback = (component, initSelector) => {
const Alert = component;
enableDismissTrigger(Alert, 'close');
if (!callbackInitState.has(component.name)) {
enableDismissTrigger(Alert);
callbackInitState.set(component.name, true);
}
// MDB init
SelectorEngine.find(initSelector).forEach((element) => {
@ -24,15 +29,18 @@ const buttonCallback = (component, initSelector) => {
const Button = component;
const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;
// BS init
EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, (event) => {
event.preventDefault();
if (!callbackInitState.has(component.name)) {
// BS init
EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, (event) => {
event.preventDefault();
const button = event.target.closest(initSelector);
const data = Button.getOrCreateInstance(button);
const button = event.target.closest(initSelector);
const data = Button.getOrCreateInstance(button);
data.toggle();
});
data.toggle();
});
callbackInitState.set(component.name, true);
}
// MDB init
SelectorEngine.find(initSelector).forEach((element) => {
@ -41,6 +49,10 @@ const buttonCallback = (component, initSelector) => {
};
const carouselCallback = (component, initSelector) => {
if (callbackInitState.has(component.name)) {
return;
}
const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;
const SELECTOR_DATA_SLIDE = '[data-mdb-slide], [data-mdb-slide-to]';
const CLASS_NAME_CAROUSEL = 'carousel';
@ -83,6 +95,8 @@ const carouselCallback = (component, initSelector) => {
Carousel.getOrCreateInstance(carousel);
});
});
callbackInitState.set(component.name, true);
};
const collapseCallback = (component, initSelector) => {
@ -90,22 +104,26 @@ const collapseCallback = (component, initSelector) => {
const SELECTOR_DATA_TOGGLE = initSelector;
const Collapse = component;
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (
event.target.tagName === 'A' ||
(event.delegateTarget && event.delegateTarget.tagName === 'A')
) {
event.preventDefault();
}
if (!callbackInitState.has(component.name)) {
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (
event.target.tagName === 'A' ||
(event.delegateTarget && event.delegateTarget.tagName === 'A')
) {
event.preventDefault();
}
const selector = getSelectorFromElement(this);
const selectorElements = SelectorEngine.find(selector);
const selector = getSelectorFromElement(this);
const selectorElements = SelectorEngine.find(selector);
selectorElements.forEach((element) => {
Collapse.getOrCreateInstance(element, { toggle: false }).toggle();
selectorElements.forEach((element) => {
Collapse.getOrCreateInstance(element, { toggle: false }).toggle();
});
});
});
callbackInitState.set(component.name, true);
}
SelectorEngine.find(SELECTOR_DATA_TOGGLE).forEach((el) => {
const selector = getSelectorFromElement(el);
@ -125,19 +143,28 @@ const dropdownCallback = (component, initSelector) => {
const SELECTOR_DATA_TOGGLE = `[data-mdb-${component.NAME}-initialized]`;
const Dropdown = component;
EventHandler.on(
document,
EVENT_KEYDOWN_DATA_API,
SELECTOR_DATA_TOGGLE,
Dropdown.dataApiKeydownHandler
);
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle();
});
if (!callbackInitState.has(component.name)) {
EventHandler.on(
document,
EVENT_KEYDOWN_DATA_API,
SELECTOR_DATA_TOGGLE,
Dropdown.dataApiKeydownHandler
);
EventHandler.on(
document,
EVENT_KEYDOWN_DATA_API,
SELECTOR_MENU,
Dropdown.dataApiKeydownHandler
);
EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle();
});
}
callbackInitState.set(component.name, true);
SelectorEngine.find(initSelector).forEach((el) => {
Dropdown.getOrCreateInstance(el);
@ -150,34 +177,62 @@ const inputCallback = (component, initSelector) => {
const SELECTOR_OUTLINE_TEXTAREA = `${SELECTOR_DATA_INIT} textarea`;
const Input = component;
EventHandler.on(document, 'focus', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));
EventHandler.on(document, 'input', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));
EventHandler.on(document, 'blur', SELECTOR_OUTLINE_INPUT, Input.deactivate(new Input()));
if (!callbackInitState.has(component.name)) {
EventHandler.on(document, 'focus', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));
EventHandler.on(document, 'input', SELECTOR_OUTLINE_INPUT, Input.activate(new Input()));
EventHandler.on(document, 'blur', SELECTOR_OUTLINE_INPUT, Input.deactivate(new Input()));
EventHandler.on(document, 'focus', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));
EventHandler.on(document, 'input', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));
EventHandler.on(document, 'blur', SELECTOR_OUTLINE_TEXTAREA, Input.deactivate(new Input()));
EventHandler.on(document, 'focus', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));
EventHandler.on(document, 'input', SELECTOR_OUTLINE_TEXTAREA, Input.activate(new Input()));
EventHandler.on(document, 'blur', SELECTOR_OUTLINE_TEXTAREA, Input.deactivate(new Input()));
EventHandler.on(window, 'shown.bs.modal', (e) => {
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
EventHandler.on(window, 'shown.bs.modal', (e) => {
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
});
SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
});
});
SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
});
});
EventHandler.on(window, 'shown.bs.dropdown', (e) => {
const target = e.target.parentNode.querySelector('.dropdown-menu');
if (target) {
EventHandler.on(window, 'shown.bs.dropdown', (e) => {
const target = e.target.parentNode.querySelector('.dropdown-menu');
if (target) {
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
});
SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
});
}
});
EventHandler.on(window, 'shown.bs.tab', (e) => {
let targetId;
if (e.target.href) {
targetId = e.target.href.split('#')[1];
} else {
targetId = Manipulator.getDataAttribute(e.target, 'target').split('#')[1];
}
const target = SelectorEngine.findOne(`#${targetId}`);
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
@ -192,64 +247,40 @@ const inputCallback = (component, initSelector) => {
}
instance.update();
});
}
});
});
EventHandler.on(window, 'shown.bs.tab', (e) => {
let targetId;
// form reset handler
EventHandler.on(window, 'reset', (e) => {
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.forceInactive();
});
SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.forceInactive();
});
});
if (e.target.href) {
targetId = e.target.href.split('#')[1];
} else {
targetId = Manipulator.getDataAttribute(e.target, 'target').split('#')[1];
}
const target = SelectorEngine.findOne(`#${targetId}`);
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
// auto-fill
EventHandler.on(window, 'onautocomplete', (e) => {
const instance = Input.getInstance(e.target.parentNode);
if (!instance || !e.cancelable) {
return;
}
instance.update();
instance.forceActive();
});
SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.update();
});
});
callbackInitState.set(component.name, true);
}
// auto-init
SelectorEngine.find(SELECTOR_DATA_INIT).map((element) => new Input(element));
// form reset handler
EventHandler.on(window, 'reset', (e) => {
SelectorEngine.find(SELECTOR_OUTLINE_INPUT, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.forceInactive();
});
SelectorEngine.find(SELECTOR_OUTLINE_TEXTAREA, e.target).forEach((element) => {
const instance = Input.getInstance(element.parentNode);
if (!instance) {
return;
}
instance.forceInactive();
});
});
// auto-fill
EventHandler.on(window, 'onautocomplete', (e) => {
const instance = Input.getInstance(e.target.parentNode);
if (!instance || !e.cancelable) {
return;
}
instance.forceActive();
});
SelectorEngine.find(SELECTOR_DATA_INIT).map((element) => Input.getOrCreateInstance(element));
};
const modalCallback = (component, initSelector) => {
@ -259,40 +290,43 @@ const modalCallback = (component, initSelector) => {
const EVENT_SHOW = `show.bs.${component.name}`;
const EVENT_HIDDEN = `hidden.bs.${component.name}`;
EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {
const target = getElementFromSelector(this);
if (!callbackInitState.has(component.name)) {
EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {
const target = getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
EventHandler.one(target, EVENT_SHOW, (showEvent) => {
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
return;
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
EventHandler.one(target, EVENT_HIDDEN, () => {
if (isVisible(this)) {
this.focus();
EventHandler.one(target, EVENT_SHOW, (showEvent) => {
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
return;
}
EventHandler.one(target, EVENT_HIDDEN, () => {
if (isVisible(this)) {
this.focus();
}
});
});
// avoid conflict when clicking modal toggler while another one is open
const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);
alreadyOpenedModals.forEach((modal) => {
if (!modal.classList.contains('modal-non-invasive-show')) {
Modal.getInstance(modal).hide();
}
});
const data = Modal.getOrCreateInstance(target);
data.toggle(this);
});
// avoid conflict when clicking modal toggler while another one is open
const alreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);
alreadyOpenedModals.forEach((modal) => {
if (!modal.classList.contains('modal-non-invasive-show')) {
Modal.getInstance(modal).hide();
}
});
const data = Modal.getOrCreateInstance(target);
data.toggle(this);
});
enableDismissTrigger(Modal);
enableDismissTrigger(Modal);
callbackInitState.set(component.name, true);
}
SelectorEngine.find(initSelector).forEach((el) => {
const selector = getSelectorFromElement(el);
@ -312,6 +346,10 @@ const popoverCallback = (component, initSelector) => {
};
const offcanvasCallback = (component, initSelector) => {
if (callbackInitState.has(component.name)) {
return;
}
const EVENT_CLICK_DATA_API = `click.bs.${component.name}.data-api`;
const OPEN_SELECTOR = '.offcanvas.show';
const Offcanvas = component;
@ -362,9 +400,14 @@ const offcanvasCallback = (component, initSelector) => {
});
enableDismissTrigger(Offcanvas);
callbackInitState.set(component.name, true);
};
const scrollspyCallback = (component, initSelector) => {
if (callbackInitState.has(component.name)) {
return;
}
const EVENT_LOAD_DATA_API = `load.bs.${component.name}.data-api`;
const ScrollSpy = component;
@ -373,6 +416,8 @@ const scrollspyCallback = (component, initSelector) => {
ScrollSpy.getOrCreateInstance(el);
});
});
callbackInitState.set(component.name, true);
};
const tabCallback = (component, initSelector) => {
@ -382,29 +427,36 @@ const tabCallback = (component, initSelector) => {
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-mdb-tab-init], .${CLASS_NAME_ACTIVE}[data-mdb-pill-init], .${CLASS_NAME_ACTIVE}[data-mdb-toggle="list"]`;
const Tab = component;
EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
if (!callbackInitState.has(component.name)) {
EventHandler.on(document, EVENT_CLICK_DATA_API, initSelector, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
if (isDisabled(this)) {
return;
}
if (isDisabled(this)) {
return;
}
Tab.getOrCreateInstance(this).show();
});
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE).forEach((element) => {
Tab.getOrCreateInstance(element);
Tab.getOrCreateInstance(this).show();
});
});
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE).forEach((element) => {
Tab.getOrCreateInstance(element);
});
});
callbackInitState.set(component.name, true);
}
};
const toastCallback = (component, initSelector) => {
const Toast = component;
enableDismissTrigger(Toast);
if (!callbackInitState.has(component.name)) {
enableDismissTrigger(Toast);
callbackInitState.set(component.name, true);
}
// MDB init
SelectorEngine.find(initSelector).forEach((element) => {
@ -415,7 +467,10 @@ const toastCallback = (component, initSelector) => {
const rippleCallback = (component, initSelector) => {
const Ripple = component;
EventHandler.one(document, 'mousedown', initSelector, Ripple.autoInitial(new Ripple()));
if (!callbackInitState.has(component.name)) {
EventHandler.one(document, 'mousedown', initSelector, Ripple.autoInitial(new Ripple()));
callbackInitState.set(component.name, true);
}
};
export {

View File

@ -38,7 +38,9 @@ const initComponent = (component, manualInit = false) => {
return;
}
InitializedComponents.set(component.NAME);
if (!manualInit) {
InitializedComponents.set(component.NAME);
}
const thisComponent = _defaultInitSelectors[component.NAME] || null;
const isToggler = thisComponent?.isToggler || false;

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap alert.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap alert.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap base-component.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap base-component.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@ -34,7 +34,7 @@
* Constants
*/
const VERSION = '5.3.2';
const VERSION = '5.3.3';
/**
* Class definition

View File

@ -1 +1 @@
{"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n"],"names":["VERSION","BaseComponent","Config","constructor","element","config","getElement","_element","_config","_getConfig","Data","set","DATA_KEY","dispose","remove","EventHandler","off","EVENT_KEY","propertyName","Object","getOwnPropertyNames","_queueCallback","callback","isAnimated","executeAfterTransition","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getInstance","get","getOrCreateInstance","NAME","eventName","name"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMA,OAAO,GAAG,OAAO,CAAA;;EAEvB;EACA;EACA;;EAEA,MAAMC,aAAa,SAASC,MAAM,CAAC;EACjCC,EAAAA,WAAWA,CAACC,OAAO,EAAEC,MAAM,EAAE;EAC3B,IAAA,KAAK,EAAE,CAAA;EAEPD,IAAAA,OAAO,GAAGE,mBAAU,CAACF,OAAO,CAAC,CAAA;MAC7B,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACG,QAAQ,GAAGH,OAAO,CAAA;MACvB,IAAI,CAACI,OAAO,GAAG,IAAI,CAACC,UAAU,CAACJ,MAAM,CAAC,CAAA;EAEtCK,IAAAA,IAAI,CAACC,GAAG,CAAC,IAAI,CAACJ,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACS,QAAQ,EAAE,IAAI,CAAC,CAAA;EAC1D,GAAA;;EAEA;EACAC,EAAAA,OAAOA,GAAG;EACRH,IAAAA,IAAI,CAACI,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACS,QAAQ,CAAC,CAAA;EACrDG,IAAAA,YAAY,CAACC,GAAG,CAAC,IAAI,CAACT,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACc,SAAS,CAAC,CAAA;MAE3D,KAAK,MAAMC,YAAY,IAAIC,MAAM,CAACC,mBAAmB,CAAC,IAAI,CAAC,EAAE;EAC3D,MAAA,IAAI,CAACF,YAAY,CAAC,GAAG,IAAI,CAAA;EAC3B,KAAA;EACF,GAAA;IAEAG,cAAcA,CAACC,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,GAAG,IAAI,EAAE;EACnDC,IAAAA,+BAAsB,CAACF,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,CAAC,CAAA;EACvD,GAAA;IAEAd,UAAUA,CAACJ,MAAM,EAAE;MACjBA,MAAM,GAAG,IAAI,CAACoB,eAAe,CAACpB,MAAM,EAAE,IAAI,CAACE,QAAQ,CAAC,CAAA;EACpDF,IAAAA,MAAM,GAAG,IAAI,CAACqB,iBAAiB,CAACrB,MAAM,CAAC,CAAA;EACvC,IAAA,IAAI,CAACsB,gBAAgB,CAACtB,MAAM,CAAC,CAAA;EAC7B,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;;EAEA;IACA,OAAOuB,WAAWA,CAACxB,OAAO,EAAE;EAC1B,IAAA,OAAOM,IAAI,CAACmB,GAAG,CAACvB,mBAAU,CAACF,OAAO,CAAC,EAAE,IAAI,CAACQ,QAAQ,CAAC,CAAA;EACrD,GAAA;IAEA,OAAOkB,mBAAmBA,CAAC1B,OAAO,EAAEC,MAAM,GAAG,EAAE,EAAE;MAC/C,OAAO,IAAI,CAACuB,WAAW,CAACxB,OAAO,CAAC,IAAI,IAAI,IAAI,CAACA,OAAO,EAAE,OAAOC,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,IAAI,CAAC,CAAA;EACnG,GAAA;IAEA,WAAWL,OAAOA,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;IAEA,WAAWY,QAAQA,GAAG;EACpB,IAAA,OAAQ,CAAK,GAAA,EAAA,IAAI,CAACmB,IAAK,CAAC,CAAA,CAAA;EAC1B,GAAA;IAEA,WAAWd,SAASA,GAAG;EACrB,IAAA,OAAQ,CAAG,CAAA,EAAA,IAAI,CAACL,QAAS,CAAC,CAAA,CAAA;EAC5B,GAAA;IAEA,OAAOoB,SAASA,CAACC,IAAI,EAAE;EACrB,IAAA,OAAQ,GAAEA,IAAK,CAAA,EAAE,IAAI,CAAChB,SAAU,CAAC,CAAA,CAAA;EACnC,GAAA;EACF;;;;;;;;"}
{"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n"],"names":["VERSION","BaseComponent","Config","constructor","element","config","getElement","_element","_config","_getConfig","Data","set","DATA_KEY","dispose","remove","EventHandler","off","EVENT_KEY","propertyName","Object","getOwnPropertyNames","_queueCallback","callback","isAnimated","executeAfterTransition","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getInstance","get","getOrCreateInstance","NAME","eventName","name"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAOA;EACA;EACA;;EAEA,MAAMA,OAAO,GAAG,OAAO,CAAA;;EAEvB;EACA;EACA;;EAEA,MAAMC,aAAa,SAASC,MAAM,CAAC;EACjCC,EAAAA,WAAWA,CAACC,OAAO,EAAEC,MAAM,EAAE;EAC3B,IAAA,KAAK,EAAE,CAAA;EAEPD,IAAAA,OAAO,GAAGE,mBAAU,CAACF,OAAO,CAAC,CAAA;MAC7B,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACG,QAAQ,GAAGH,OAAO,CAAA;MACvB,IAAI,CAACI,OAAO,GAAG,IAAI,CAACC,UAAU,CAACJ,MAAM,CAAC,CAAA;EAEtCK,IAAAA,IAAI,CAACC,GAAG,CAAC,IAAI,CAACJ,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACS,QAAQ,EAAE,IAAI,CAAC,CAAA;EAC1D,GAAA;;EAEA;EACAC,EAAAA,OAAOA,GAAG;EACRH,IAAAA,IAAI,CAACI,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACS,QAAQ,CAAC,CAAA;EACrDG,IAAAA,YAAY,CAACC,GAAG,CAAC,IAAI,CAACT,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACc,SAAS,CAAC,CAAA;MAE3D,KAAK,MAAMC,YAAY,IAAIC,MAAM,CAACC,mBAAmB,CAAC,IAAI,CAAC,EAAE;EAC3D,MAAA,IAAI,CAACF,YAAY,CAAC,GAAG,IAAI,CAAA;EAC3B,KAAA;EACF,GAAA;IAEAG,cAAcA,CAACC,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,GAAG,IAAI,EAAE;EACnDC,IAAAA,+BAAsB,CAACF,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,CAAC,CAAA;EACvD,GAAA;IAEAd,UAAUA,CAACJ,MAAM,EAAE;MACjBA,MAAM,GAAG,IAAI,CAACoB,eAAe,CAACpB,MAAM,EAAE,IAAI,CAACE,QAAQ,CAAC,CAAA;EACpDF,IAAAA,MAAM,GAAG,IAAI,CAACqB,iBAAiB,CAACrB,MAAM,CAAC,CAAA;EACvC,IAAA,IAAI,CAACsB,gBAAgB,CAACtB,MAAM,CAAC,CAAA;EAC7B,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;;EAEA;IACA,OAAOuB,WAAWA,CAACxB,OAAO,EAAE;EAC1B,IAAA,OAAOM,IAAI,CAACmB,GAAG,CAACvB,mBAAU,CAACF,OAAO,CAAC,EAAE,IAAI,CAACQ,QAAQ,CAAC,CAAA;EACrD,GAAA;IAEA,OAAOkB,mBAAmBA,CAAC1B,OAAO,EAAEC,MAAM,GAAG,EAAE,EAAE;MAC/C,OAAO,IAAI,CAACuB,WAAW,CAACxB,OAAO,CAAC,IAAI,IAAI,IAAI,CAACA,OAAO,EAAE,OAAOC,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,IAAI,CAAC,CAAA;EACnG,GAAA;IAEA,WAAWL,OAAOA,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;IAEA,WAAWY,QAAQA,GAAG;EACpB,IAAA,OAAQ,CAAK,GAAA,EAAA,IAAI,CAACmB,IAAK,CAAC,CAAA,CAAA;EAC1B,GAAA;IAEA,WAAWd,SAASA,GAAG;EACrB,IAAA,OAAQ,CAAG,CAAA,EAAA,IAAI,CAACL,QAAS,CAAC,CAAA,CAAA;EAC5B,GAAA;IAEA,OAAOoB,SAASA,CAACC,IAAI,EAAE;EACrB,IAAA,OAAQ,GAAEA,IAAK,CAAA,EAAE,IAAI,CAAChB,SAAU,CAAC,CAAA,CAAA;EACnC,GAAA;EACF;;;;;;;;"}

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap button.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap button.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap carousel.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap carousel.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap collapse.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap collapse.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap data.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap data.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap event-handler.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap event-handler.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap manipulator.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap manipulator.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap selector-engine.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap selector-engine.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@ -37,12 +37,14 @@
if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
}
selector =
hrefAttribute && hrefAttribute !== '#'
? index_js.parseSelector(hrefAttribute.trim())
: null;
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
}
return selector;
return selector
? selector
.split(',')
.map((sel) => index_js.parseSelector(sel))
.join(',')
: null;
};
const SelectorEngine = {
find(selector, element = document.documentElement) {

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap dropdown.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap dropdown.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap modal.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap modal.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap offcanvas.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap offcanvas.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap popover.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap popover.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap scrollspy.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap scrollspy.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap tab.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap tab.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap toast.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap toast.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap tooltip.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap tooltip.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap backdrop.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap backdrop.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@ -40,7 +40,6 @@
// if false, we use the backdrop helper without adding any element to the dom
rootElement: 'body', // give the choice to place backdrop under different elements
};
const DefaultType = {
className: 'string',
clickCallback: '(function|null)',

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap component-functions.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap component-functions.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap config.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap config.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1 +1 @@
{"version":3,"file":"config.js","sources":["../../src/util/config.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n"],"names":["Config","Default","DefaultType","NAME","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","element","jsonConfig","isElement","Manipulator","getDataAttribute","constructor","getDataAttributes","configTypes","property","expectedTypes","Object","entries","value","valueType","toType","RegExp","test","TypeError","toUpperCase"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAKA;EACA;EACA;;EAEA,MAAMA,MAAM,CAAC;EACX;IACA,WAAWC,OAAOA,GAAG;EACnB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;IAEA,WAAWC,IAAIA,GAAG;EAChB,IAAA,MAAM,IAAIC,KAAK,CAAC,qEAAqE,CAAC,CAAA;EACxF,GAAA;IAEAC,UAAUA,CAACC,MAAM,EAAE;EACjBA,IAAAA,MAAM,GAAG,IAAI,CAACC,eAAe,CAACD,MAAM,CAAC,CAAA;EACrCA,IAAAA,MAAM,GAAG,IAAI,CAACE,iBAAiB,CAACF,MAAM,CAAC,CAAA;EACvC,IAAA,IAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC,CAAA;EAC7B,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;IAEAE,iBAAiBA,CAACF,MAAM,EAAE;EACxB,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;EAEAC,EAAAA,eAAeA,CAACD,MAAM,EAAEI,OAAO,EAAE;EAC/B,IAAA,MAAMC,UAAU,GAAGC,kBAAS,CAACF,OAAO,CAAC,GAAGG,WAAW,CAACC,gBAAgB,CAACJ,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;;MAE7F,OAAO;EACL,MAAA,GAAG,IAAI,CAACK,WAAW,CAACd,OAAO;QAC3B,IAAI,OAAOU,UAAU,KAAK,QAAQ,GAAGA,UAAU,GAAG,EAAE,CAAC;EACrD,MAAA,IAAIC,kBAAS,CAACF,OAAO,CAAC,GAAGG,WAAW,CAACG,iBAAiB,CAACN,OAAO,CAAC,GAAG,EAAE,CAAC;QACrE,IAAI,OAAOJ,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,EAAE,CAAA;OAC7C,CAAA;EACH,GAAA;IAEAG,gBAAgBA,CAACH,MAAM,EAAEW,WAAW,GAAG,IAAI,CAACF,WAAW,CAACb,WAAW,EAAE;EACnE,IAAA,KAAK,MAAM,CAACgB,QAAQ,EAAEC,aAAa,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,WAAW,CAAC,EAAE;EACnE,MAAA,MAAMK,KAAK,GAAGhB,MAAM,CAACY,QAAQ,CAAC,CAAA;EAC9B,MAAA,MAAMK,SAAS,GAAGX,kBAAS,CAACU,KAAK,CAAC,GAAG,SAAS,GAAGE,eAAM,CAACF,KAAK,CAAC,CAAA;QAE9D,IAAI,CAAC,IAAIG,MAAM,CAACN,aAAa,CAAC,CAACO,IAAI,CAACH,SAAS,CAAC,EAAE;UAC9C,MAAM,IAAII,SAAS,CAChB,CAAA,EAAE,IAAI,CAACZ,WAAW,CAACZ,IAAI,CAACyB,WAAW,EAAG,aAAYV,QAAS,CAAA,iBAAA,EAAmBK,SAAU,CAAuBJ,qBAAAA,EAAAA,aAAc,IAChI,CAAC,CAAA;EACH,OAAA;EACF,KAAA;EACF,GAAA;EACF;;;;;;;;"}
{"version":3,"file":"config.js","sources":["../../src/util/config.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n"],"names":["Config","Default","DefaultType","NAME","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","element","jsonConfig","isElement","Manipulator","getDataAttribute","constructor","getDataAttributes","configTypes","property","expectedTypes","Object","entries","value","valueType","toType","RegExp","test","TypeError","toUpperCase"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;;EAKA;EACA;EACA;;EAEA,MAAMA,MAAM,CAAC;EACX;IACA,WAAWC,OAAOA,GAAG;EACnB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;IAEA,WAAWC,WAAWA,GAAG;EACvB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;IAEA,WAAWC,IAAIA,GAAG;EAChB,IAAA,MAAM,IAAIC,KAAK,CAAC,qEAAqE,CAAC,CAAA;EACxF,GAAA;IAEAC,UAAUA,CAACC,MAAM,EAAE;EACjBA,IAAAA,MAAM,GAAG,IAAI,CAACC,eAAe,CAACD,MAAM,CAAC,CAAA;EACrCA,IAAAA,MAAM,GAAG,IAAI,CAACE,iBAAiB,CAACF,MAAM,CAAC,CAAA;EACvC,IAAA,IAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC,CAAA;EAC7B,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;IAEAE,iBAAiBA,CAACF,MAAM,EAAE;EACxB,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;EAEAC,EAAAA,eAAeA,CAACD,MAAM,EAAEI,OAAO,EAAE;EAC/B,IAAA,MAAMC,UAAU,GAAGC,kBAAS,CAACF,OAAO,CAAC,GAAGG,WAAW,CAACC,gBAAgB,CAACJ,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;;MAE7F,OAAO;EACL,MAAA,GAAG,IAAI,CAACK,WAAW,CAACd,OAAO;QAC3B,IAAI,OAAOU,UAAU,KAAK,QAAQ,GAAGA,UAAU,GAAG,EAAE;EACpD,MAAA,IAAIC,kBAAS,CAACF,OAAO,CAAC,GAAGG,WAAW,CAACG,iBAAiB,CAACN,OAAO,CAAC,GAAG,EAAE;QACpE,IAAI,OAAOJ,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,EAAE;OAC7C,CAAA;EACH,GAAA;IAEAG,gBAAgBA,CAACH,MAAM,EAAEW,WAAW,GAAG,IAAI,CAACF,WAAW,CAACb,WAAW,EAAE;EACnE,IAAA,KAAK,MAAM,CAACgB,QAAQ,EAAEC,aAAa,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,WAAW,CAAC,EAAE;EACnE,MAAA,MAAMK,KAAK,GAAGhB,MAAM,CAACY,QAAQ,CAAC,CAAA;EAC9B,MAAA,MAAMK,SAAS,GAAGX,kBAAS,CAACU,KAAK,CAAC,GAAG,SAAS,GAAGE,eAAM,CAACF,KAAK,CAAC,CAAA;QAE9D,IAAI,CAAC,IAAIG,MAAM,CAACN,aAAa,CAAC,CAACO,IAAI,CAACH,SAAS,CAAC,EAAE;UAC9C,MAAM,IAAII,SAAS,CAChB,CAAA,EAAE,IAAI,CAACZ,WAAW,CAACZ,IAAI,CAACyB,WAAW,EAAG,aAAYV,QAAS,CAAA,iBAAA,EAAmBK,SAAU,CAAuBJ,qBAAAA,EAAAA,aAAc,IAChI,CAAC,CAAA;EACH,OAAA;EACF,KAAA;EACF,GAAA;EACF;;;;;;;;"}

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap focustrap.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap focustrap.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@ -40,7 +40,6 @@
autofocus: true,
trapElement: null, // The element to trap focus inside of
};
const DefaultType = {
autofocus: 'boolean',
trapElement: 'element',

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap index.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap index.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@ -169,7 +169,6 @@
const reflow = (element) => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
};
const getjQuery = () => {
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return window.jQuery;

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap sanitizer.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap sanitizer.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
@ -31,7 +31,10 @@
br: [],
col: [],
code: [],
dd: [],
div: [],
dl: [],
dt: [],
em: [],
hr: [],
h1: [],

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap scrollbar.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap scrollbar.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap swipe.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap swipe.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -1,6 +1,6 @@
/*!
* Bootstrap template-factory.js v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Bootstrap template-factory.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {

View File

@ -76,12 +76,12 @@ class Alert extends BaseComponent {
* Data API implementation
*/
// enableDismissTrigger(Alert, 'close');
// enableDismissTrigger(Alert, 'close')
/**
* jQuery
*/
// defineJQueryPlugin(Alert);
// defineJQueryPlugin(Alert)
export default Alert;

View File

@ -14,7 +14,7 @@ import { executeAfterTransition, getElement } from './util/index.js';
* Constants
*/
const VERSION = '5.3.2';
const VERSION = '5.3.3';
/**
* Class definition

View File

@ -54,19 +54,19 @@ class Button extends BaseComponent {
* Data API implementation
*/
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, (event) => {
// event.preventDefault();
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
// event.preventDefault()
// const button = event.target.closest(SELECTOR_DATA_TOGGLE);
// const data = Button.getOrCreateInstance(button);
// const button = event.target.closest(SELECTOR_DATA_TOGGLE)
// const data = Button.getOrCreateInstance(button)
// data.toggle();
// });
// data.toggle()
// })
/**
* jQuery
*/
// defineJQueryPlugin(Button);
// defineJQueryPlugin(Button)
export default Button;

View File

@ -437,45 +437,45 @@ class Carousel extends BaseComponent {
*/
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {
// const target = getElementFromSelector(this);
// const target = SelectorEngine.getElementFromSelector(this)
// if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
// return;
// return
// }
// event.preventDefault();
// event.preventDefault()
// const carousel = Carousel.getOrCreateInstance(target);
// const slideIndex = this.getAttribute('data-mdb-slide-to');
// const carousel = Carousel.getOrCreateInstance(target)
// const slideIndex = this.getAttribute('data-mdb-slide-to')
// if (slideIndex) {
// carousel.to(slideIndex);
// carousel._maybeEnableCycle();
// return;
// carousel.to(slideIndex)
// carousel._maybeEnableCycle()
// return
// }
// if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
// carousel.next();
// carousel._maybeEnableCycle();
// return;
// carousel.next()
// carousel._maybeEnableCycle()
// return
// }
// carousel.prev();
// carousel._maybeEnableCycle();
// });
// carousel.prev()
// carousel._maybeEnableCycle()
// })
// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
// const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
// const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)
// for (const carousel of carousels) {
// Carousel.getOrCreateInstance(carousel);
// Carousel.getOrCreateInstance(carousel)
// }
// });
// })
/**
* jQuery
*/
// defineJQueryPlugin(Carousel);
// defineJQueryPlugin(Carousel)
export default Carousel;

View File

@ -278,22 +278,19 @@ class Collapse extends BaseComponent {
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
// if (
// event.target.tagName === 'A' ||
// (event.delegateTarget && event.delegateTarget.tagName === 'A')
// ) {
// event.preventDefault();
// if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {
// event.preventDefault()
// }
// for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
// Collapse.getOrCreateInstance(element, { toggle: false }).toggle();
// Collapse.getOrCreateInstance(element, { toggle: false }).toggle()
// }
// });
// })
/**
* jQuery
*/
// defineJQueryPlugin(Collapse);
// defineJQueryPlugin(Collapse)
export default Collapse;

View File

@ -1,7 +1,7 @@
/**
* --------------------------------------------------------------------------
* Bootstrap dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Licensed under MIT (https://github.com/twmdb/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/

View File

@ -26,10 +26,15 @@ const getSelector = (element) => {
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
}
selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
}
return selector;
return selector
? selector
.split(',')
.map((sel) => parseSelector(sel))
.join(',')
: null;
};
const SelectorEngine = {

View File

@ -453,24 +453,19 @@ class Dropdown extends BaseComponent {
* Data API implementation
*/
// EventHandler.on(
// document,
// EVENT_KEYDOWN_DATA_API,
// SELECTOR_DATA_TOGGLE,
// Dropdown.dataApiKeydownHandler
// );
// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
// EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
// EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)
// EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)
// EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)
// EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// event.preventDefault();
// Dropdown.getOrCreateInstance(this).toggle();
// });
// event.preventDefault()
// Dropdown.getOrCreateInstance(this).toggle()
// })
/**
* jQuery
*/
// defineJQueryPlugin(Dropdown);
// defineJQueryPlugin(Dropdown)
export default Dropdown;

View File

@ -335,26 +335,26 @@ class Modal extends BaseComponent {
*/
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// const target = SelectorEngine.getElementFromSelector(this);
// const target = SelectorEngine.getElementFromSelector(this)
// if (['A', 'AREA'].includes(this.tagName)) {
// event.preventDefault();
// event.preventDefault()
// }
// EventHandler.one(target, EVENT_SHOW, (showEvent) => {
// EventHandler.one(target, EVENT_SHOW, showEvent => {
// if (showEvent.defaultPrevented) {
// // only register focus restorer if modal will actually get shown
// return;
// return
// }
// EventHandler.one(target, EVENT_HIDDEN, () => {
// if (isVisible(this)) {
// this.focus();
// this.focus()
// }
// });
// });
// })
// })
// // avoid conflict when clicking modal toggler while another one is open
// // avoid conflict when clicking moddal toggler while another one is open
// const allreadyOpenedModals = SelectorEngine.find(OPEN_SELECTOR);
// allreadyOpenedModals.forEach((modal) => {
// if (!modal.classList.contains('modal-non-invasive-show')) {
@ -362,17 +362,17 @@ class Modal extends BaseComponent {
// }
// });
// const data = Modal.getOrCreateInstance(target);
// const data = Modal.getOrCreateInstance(target)
// data.toggle(this);
// });
// data.toggle(this)
// })
// enableDismissTrigger(Modal);
// enableDismissTrigger(Modal)
/**
* jQuery
*/
// defineJQueryPlugin(Modal);
// defineJQueryPlugin(Modal)
export default Modal;

View File

@ -226,53 +226,53 @@ class Offcanvas extends BaseComponent {
*/
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// const target = SelectorEngine.getElementFromSelector(this);
// const target = SelectorEngine.getElementFromSelector(this)
// if (['A', 'AREA'].includes(this.tagName)) {
// event.preventDefault();
// event.preventDefault()
// }
// if (isDisabled(this)) {
// return;
// return
// }
// EventHandler.one(target, EVENT_HIDDEN, () => {
// // focus on trigger when it is closed
// if (isVisible(this)) {
// this.focus();
// this.focus()
// }
// });
// })
// // avoid conflict when clicking a toggler of an offcanvas, while another is open
// const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
// const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)
// if (alreadyOpen && alreadyOpen !== target) {
// Offcanvas.getInstance(alreadyOpen).hide();
// Offcanvas.getInstance(alreadyOpen).hide()
// }
// const data = Offcanvas.getOrCreateInstance(target);
// data.toggle(this);
// });
// const data = Offcanvas.getOrCreateInstance(target)
// data.toggle(this)
// })
// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
// for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
// Offcanvas.getOrCreateInstance(selector).show();
// Offcanvas.getOrCreateInstance(selector).show()
// }
// });
// })
// EventHandler.on(window, EVENT_RESIZE, () => {
// for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
// if (getComputedStyle(element).position !== 'fixed') {
// Offcanvas.getOrCreateInstance(element).hide();
// Offcanvas.getOrCreateInstance(element).hide()
// }
// }
// });
// })
// enableDismissTrigger(Offcanvas);
// enableDismissTrigger(Offcanvas)
/**
* jQuery
*/
// defineJQueryPlugin(Offcanvas);
// defineJQueryPlugin(Offcanvas)
export default Offcanvas;

View File

@ -93,6 +93,6 @@ class Popover extends Tooltip {
* jQuery
*/
// defineJQueryPlugin(Popover);
// defineJQueryPlugin(Popover)
export default Popover;

View File

@ -294,14 +294,14 @@ class ScrollSpy extends BaseComponent {
// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
// for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
// ScrollSpy.getOrCreateInstance(spy);
// ScrollSpy.getOrCreateInstance(spy)
// }
// });
// })
/**
* jQuery
*/
// defineJQueryPlugin(ScrollSpy);
// defineJQueryPlugin(ScrollSpy)
export default ScrollSpy;

View File

@ -296,28 +296,28 @@ class Tab extends BaseComponent {
// EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// if (['A', 'AREA'].includes(this.tagName)) {
// event.preventDefault();
// event.preventDefault()
// }
// if (isDisabled(this)) {
// return;
// return
// }
// Tab.getOrCreateInstance(this).show();
// });
// Tab.getOrCreateInstance(this).show()
// })
/**
* Initialize on focus
*/
// EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
// for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
// Tab.getOrCreateInstance(element);
// Tab.getOrCreateInstance(element)
// }
// });
// })
/**
* jQuery
*/
// defineJQueryPlugin(Tab);
// defineJQueryPlugin(Tab)
export default Tab;

View File

@ -214,12 +214,12 @@ class Toast extends BaseComponent {
* Data API implementation
*/
// enableDismissTrigger(Toast);
// enableDismissTrigger(Toast)
/**
* jQuery
*/
// defineJQueryPlugin(Toast);
// defineJQueryPlugin(Toast)
export default Toast;

View File

@ -655,6 +655,6 @@ class Tooltip extends BaseComponent {
* jQuery
*/
// defineJQueryPlugin(Tooltip);
// defineJQueryPlugin(Tooltip)
export default Tooltip;

View File

@ -17,7 +17,10 @@ export const DefaultAllowlist = {
br: [],
col: [],
code: [],
dd: [],
div: [],
dl: [],
dt: [],
em: [],
hr: [],
h1: [],

View File

@ -14,7 +14,7 @@ import { executeAfterTransition, getElement } from './util/index.js';
* Constants
*/
const VERSION = '5.3.2';
const VERSION = '5.3.3';
/**
* Class definition

View File

@ -26,10 +26,15 @@ const getSelector = (element) => {
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
}
selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
}
return selector;
return selector
? selector
.split(',')
.map((sel) => parseSelector(sel))
.join(',')
: null;
};
const SelectorEngine = {

View File

@ -17,7 +17,10 @@ export const DefaultAllowlist = {
br: [],
col: [],
code: [],
dd: [],
div: [],
dl: [],
dt: [],
em: [],
hr: [],
h1: [],

View File

@ -16,7 +16,6 @@ const EVENT_KEY = `.${DATA_KEY}`;
const Default = {
offset: [0, 2],
flip: true,
boundary: 'clippingParents',
reference: 'toggle',
display: 'dynamic',
@ -26,7 +25,6 @@ const Default = {
const DefaultType = {
offset: '(array|string|function)',
flip: 'boolean',
boundary: '(string|element)',
reference: '(string|element|object)',
display: 'string',
@ -121,7 +119,6 @@ class Dropdown extends BSDropdown {
{
name: 'preventOverflow',
options: {
altBoundary: this._config.flip,
boundary: this._config.boundary,
},
},

View File

@ -169,9 +169,10 @@ class Input extends BaseComponent {
}
_toggleDefaultDatePlaceholder(input = this.input) {
const isTypeDate = input.getAttribute('type') === 'date';
const type = input.getAttribute('type');
const typesWithPlaceholder = ['date', 'time', 'datetime-local', 'month', 'week'];
if (!isTypeDate) {
if (!typesWithPlaceholder.includes(type)) {
return;
}
@ -245,6 +246,11 @@ class Input extends BaseComponent {
_activate(event) {
onDOMContentLoaded(() => {
this._getElements(event);
if (!this._element) {
return;
}
const input = event ? event.target : this.input;
if (input.value !== '') {
@ -255,9 +261,19 @@ class Input extends BaseComponent {
}
_getElements(event) {
let initialized;
if (event) {
this._element = event.target.parentNode;
this._label = SelectorEngine.findOne('label', this._element);
initialized = Manipulator.getDataAttribute(
this._element,
`${this.constructor.NAME}-initialized`
);
}
if (!initialized) {
return;
}
if (event && this._label) {

View File

@ -1,23 +1,9 @@
/* eslint-disable */
import * as CSS from '../lib/css';
import * as DOM from '../lib/dom';
import cls, { addScrollingClass, removeScrollingClass } from '../lib/class-names';
import updateGeometry from '../update-geometry';
import { toInt } from '../lib/util';
export default function (i) {
bindMouseScrollHandler(i, [
'containerWidth',
'contentWidth',
'pageX',
'railXWidth',
'scrollbarX',
'scrollbarXWidth',
'scrollLeft',
'x',
'scrollbarXRail',
]);
let activeSlider = null; // Variable to track the currently active slider
export default function setupScrollHandlers(i) {
bindMouseScrollHandler(i, [
'containerHeight',
'contentHeight',
@ -29,70 +15,96 @@ export default function (i) {
'y',
'scrollbarYRail',
]);
bindMouseScrollHandler(i, [
'containerWidth',
'contentWidth',
'pageX',
'railXWidth',
'scrollbarX',
'scrollbarXWidth',
'scrollLeft',
'x',
'scrollbarXRail',
]);
}
function bindMouseScrollHandler(
i,
[
containerHeight,
contentHeight,
pageY,
railYHeight,
scrollbarY,
scrollbarYHeight,
scrollTop,
y,
scrollbarYRail,
containerDimension,
contentDimension,
pageAxis,
railDimension,
scrollbarAxis,
scrollbarDimension,
scrollAxis,
axis,
scrollbarRail,
]
) {
const element = i.element;
let startingScrollTop = null;
let startingMousePageY = null;
let startingScrollPosition = null;
let startingMousePagePosition = null;
let scrollBy = null;
function mouseMoveHandler(e) {
function moveHandler(e) {
if (e.touches && e.touches[0]) {
e[pageY] = e.touches[0].pageY;
e[pageAxis] = e.touches[0][`page${axis.toUpperCase()}`];
}
element[scrollTop] = startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);
addScrollingClass(i, y);
updateGeometry(i);
e.stopPropagation();
e.preventDefault();
}
// Only move if the active slider is the one we started with
if (activeSlider === scrollbarAxis) {
element[scrollAxis] =
startingScrollPosition + scrollBy * (e[pageAxis] - startingMousePagePosition);
addScrollingClass(i, axis);
updateGeometry(i);
function mouseUpHandler() {
removeScrollingClass(i, y);
i[scrollbarYRail].classList.remove(cls.state.clicking);
i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
}
function bindMoves(e, touchMode) {
startingScrollTop = element[scrollTop];
if (touchMode && e.touches) {
e[pageY] = e.touches[0].pageY;
}
startingMousePageY = e[pageY];
scrollBy = (i[contentHeight] - i[containerHeight]) / (i[railYHeight] - i[scrollbarYHeight]);
if (!touchMode) {
i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);
e.stopPropagation();
e.preventDefault();
} else {
i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);
}
i[scrollbarYRail].classList.add(cls.state.clicking);
e.stopPropagation();
}
i.event.bind(i[scrollbarY], 'mousedown', (e) => {
bindMoves(e);
});
i.event.bind(i[scrollbarY], 'touchstart', (e) => {
bindMoves(e, true);
});
function endHandler() {
removeScrollingClass(i, axis);
i[scrollbarRail].classList.remove(cls.state.clicking);
document.removeEventListener('mousemove', moveHandler);
document.removeEventListener('mouseup', endHandler);
document.removeEventListener('touchmove', moveHandler);
document.removeEventListener('touchend', endHandler);
activeSlider = null; // Reset active slider when interaction ends
}
function bindMoves(e) {
if (activeSlider === null) {
// Only bind if no slider is currently active
activeSlider = scrollbarAxis; // Set current slider as active
startingScrollPosition = element[scrollAxis];
if (e.touches) {
e[pageAxis] = e.touches[0][`page${axis.toUpperCase()}`];
}
startingMousePagePosition = e[pageAxis];
scrollBy =
(i[contentDimension] - i[containerDimension]) / (i[railDimension] - i[scrollbarDimension]);
if (!e.touches) {
document.addEventListener('mousemove', moveHandler);
document.addEventListener('mouseup', endHandler);
} else {
document.addEventListener('touchmove', moveHandler, { passive: false });
document.addEventListener('touchend', endHandler);
}
i[scrollbarRail].classList.add(cls.state.clicking);
}
e.stopPropagation();
if (e.cancelable) {
e.preventDefault();
}
}
i[scrollbarAxis].addEventListener('mousedown', bindMoves);
i[scrollbarAxis].addEventListener('touchstart', bindMoves);
}

View File

@ -1,4 +1,3 @@
/* eslint-disable */
import updateGeometry from '../update-geometry';
import cls from '../lib/class-names';
import * as CSS from '../lib/css';
@ -11,6 +10,13 @@ export default function (i) {
const element = i.element;
const state = {
startOffset: {},
startTime: 0,
speed: {},
easingLoop: null,
};
function shouldPrevent(deltaX, deltaY) {
const scrollTop = Math.floor(element.scrollTop);
const scrollLeft = element.scrollLeft;
@ -18,18 +24,13 @@ export default function (i) {
const magnitudeY = Math.abs(deltaY);
if (magnitudeY > magnitudeX) {
// user is perhaps trying to swipe up/down the page
if (
(deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||
(deltaY > 0 && scrollTop === 0)
) {
// set prevent for mobile Chrome refresh
return window.scrollY === 0 && deltaY > 0 && env.isChrome;
}
} else if (magnitudeX > magnitudeY) {
// user is perhaps trying to swipe left/right across the page
if (
(deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||
(deltaX > 0 && scrollLeft === 0)
@ -48,21 +49,18 @@ export default function (i) {
updateGeometry(i);
}
let startOffset = {};
let startTime = 0;
let speed = {};
let easingLoop = null;
function getTouch(e) {
if (e.targetTouches) {
return e.targetTouches[0];
} else {
// Maybe IE pointer
return e;
}
// Maybe IE pointer
return e;
}
function shouldHandle(e) {
if (e.target === i.scrollbarX || e.target === i.scrollbarY) {
return false;
}
if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {
return false;
}
@ -82,13 +80,13 @@ export default function (i) {
const touch = getTouch(e);
startOffset.pageX = touch.pageX;
startOffset.pageY = touch.pageY;
state.startOffset.pageX = touch.pageX;
state.startOffset.pageY = touch.pageY;
startTime = new Date().getTime();
state.startTime = new Date().getTime();
if (easingLoop !== null) {
clearInterval(easingLoop);
if (state.easingLoop !== null) {
clearInterval(state.easingLoop);
}
}
@ -143,53 +141,57 @@ export default function (i) {
const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };
const differenceX = currentOffset.pageX - startOffset.pageX;
const differenceY = currentOffset.pageY - startOffset.pageY;
const differenceX = currentOffset.pageX - state.startOffset.pageX;
const differenceY = currentOffset.pageY - state.startOffset.pageY;
if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {
return;
}
applyTouchMove(differenceX, differenceY);
startOffset = currentOffset;
state.startOffset = currentOffset;
const currentTime = new Date().getTime();
const timeGap = currentTime - startTime;
const timeGap = currentTime - state.startTime;
if (timeGap > 0) {
speed.x = differenceX / timeGap;
speed.y = differenceY / timeGap;
startTime = currentTime;
state.speed.x = differenceX / timeGap;
state.speed.y = differenceY / timeGap;
state.startTime = currentTime;
}
if (shouldPrevent(differenceX, differenceY)) {
e.preventDefault();
// Prevent the default behavior if the event is cancelable
if (e.cancelable) {
e.preventDefault();
}
}
}
}
function touchEnd() {
if (i.settings.swipeEasing) {
clearInterval(easingLoop);
easingLoop = setInterval(function () {
clearInterval(state.easingLoop);
state.easingLoop = setInterval(() => {
if (i.isInitialized) {
clearInterval(easingLoop);
clearInterval(state.easingLoop);
return;
}
if (!speed.x && !speed.y) {
clearInterval(easingLoop);
if (!state.speed.x && !state.speed.y) {
clearInterval(state.easingLoop);
return;
}
if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
clearInterval(easingLoop);
if (Math.abs(state.speed.x) < 0.01 && Math.abs(state.speed.y) < 0.01) {
clearInterval(state.easingLoop);
return;
}
applyTouchMove(speed.x * 30, speed.y * 30);
applyTouchMove(state.speed.x * 30, state.speed.y * 30);
speed.x *= 0.8;
speed.y *= 0.8;
state.speed.x *= 0.8;
state.speed.y *= 0.8;
}, 10);
}
}

View File

@ -20,7 +20,6 @@
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
--#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
@ -75,7 +74,6 @@
&:focus {
z-index: 3;
border-color: var(--#{$prefix}accordion-btn-focus-border-color);
outline: 0;
box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
}
@ -93,7 +91,7 @@
&:first-of-type {
@include border-top-radius(var(--#{$prefix}accordion-border-radius));
.accordion-button {
> .accordion-header .accordion-button {
@include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));
}
}
@ -106,13 +104,13 @@
&:last-of-type {
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
.accordion-button {
> .accordion-header .accordion-button {
&.collapsed {
@include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));
}
}
.accordion-collapse {
> .accordion-collapse {
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
}
}
@ -127,11 +125,7 @@
// Remove borders and border-radius to keep accordion items edge-to-edge.
.accordion-flush {
.accordion-collapse {
border-width: 0;
}
.accordion-item {
> .accordion-item {
border-right: 0;
border-left: 0;
@include border-radius(0);
@ -143,12 +137,18 @@
border-bottom: 0;
}
.accordion-button {
// stylelint-disable selector-max-class
> .accordion-header .accordion-button {
&,
&.collapsed {
@include border-radius(0);
}
}
// stylelint-enable selector-max-class
> .accordion-collapse {
@include border-radius(0);
}
}
}

View File

@ -100,6 +100,15 @@
}
}
.btn-check:checked:focus-visible + & {
// Avoid using mixin so we can pass custom focus shadow properly
@if $enable-shadows {
box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);
} @else {
box-shadow: var(--#{$prefix}btn-focus-box-shadow);
}
}
&:disabled,
&.disabled,
fieldset:disabled & {

View File

@ -138,19 +138,13 @@
background-size: 100% 100%;
}
/* rtl:options: {
"autoRename": true,
"stringMap":[ {
"name" : "prev-next",
"search" : "prev",
"replace" : "next"
} ]
} */
.carousel-control-prev-icon {
background-image: escape-svg($carousel-control-prev-icon-bg);
background-image: escape-svg($carousel-control-prev-icon-bg) #{'/*rtl:' +
escape-svg($carousel-control-next-icon-bg) + '*/'};
}
.carousel-control-next-icon {
background-image: escape-svg($carousel-control-next-icon-bg);
background-image: escape-svg($carousel-control-next-icon-bg) #{'/*rtl:' +
escape-svg($carousel-control-prev-icon-bg) + '*/'};
}
// Optional indicator pips/controls

View File

@ -129,7 +129,6 @@
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
padding: var(--#{$prefix}modal-header-padding);
border-bottom: var(--#{$prefix}modal-header-border-width) solid
var(--#{$prefix}modal-header-border-color);

View File

@ -131,15 +131,14 @@
.offcanvas-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
.btn-close {
padding: calc(var(--#{$prefix}offcanvas-padding-y) * 0.5)
calc(var(--#{$prefix}offcanvas-padding-x) * 0.5);
margin-top: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y));
margin-right: calc(-0.5 * var(--#{$prefix}offcanvas-padding-x));
margin-bottom: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y));
margin: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y))
calc(-0.5 * var(--#{$prefix}offcanvas-padding-x))
calc(-0.5 * var(--#{$prefix}offcanvas-padding-y)) auto;
}
}

View File

@ -78,7 +78,7 @@
}
}
/* rtl:begin:ignore */
/*!rtl:begin:ignore*/
.bs-popover-end {
> .popover-arrow {
left: calc(
@ -105,7 +105,7 @@
}
}
/* rtl:end:ignore */
/*!rtl:end:ignore*/
.bs-popover-bottom {
> .popover-arrow {
@ -145,7 +145,7 @@
}
}
/* rtl:begin:ignore */
/*!rtl:begin:ignore*/
.bs-popover-start {
> .popover-arrow {
right: calc(
@ -172,7 +172,7 @@
}
}
/* rtl:end:ignore */
/*!rtl:end:ignore*/
.bs-popover-auto {
&[data-popper-placement^='top'] {

View File

@ -84,7 +84,7 @@
//
// When borders are added on all sides of the cells, the corners can render odd when
// these borders do not have the same color or if they are semi-transparent.
// Therefor we add top and border bottoms to the `tr`s and left and right borders
// Therefore we add top and border bottoms to the `tr`s and left and right borders
// to the `td`s or `th`s
.table-bordered {

View File

@ -58,7 +58,7 @@
}
}
/* rtl:begin:ignore */
/*!rtl:begin:ignore*/
.bs-tooltip-end .tooltip-arrow {
left: calc(
-1 * var(--#{$prefix}tooltip-arrow-height)
@ -74,7 +74,7 @@
}
}
/* rtl:end:ignore */
/*!rtl:end:ignore*/
.bs-tooltip-bottom .tooltip-arrow {
top: calc(
@ -89,7 +89,7 @@
}
}
/* rtl:begin:ignore */
/*!rtl:begin:ignore*/
.bs-tooltip-start .tooltip-arrow {
right: calc(
-1 * var(--#{$prefix}tooltip-arrow-height)
@ -105,7 +105,7 @@
}
}
/* rtl:end:ignore */
/*!rtl:end:ignore*/
.bs-tooltip-auto {
&[data-popper-placement^='top'] {

View File

@ -1400,7 +1400,9 @@ $accordion-transition: $btn-transition, border-radius 0.15s ease !default;
$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;
$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;
$accordion-button-focus-border-color: $input-focus-border-color !default;
// fusv-disable
$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3
// fusv-enable
$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
$accordion-icon-width: 1.25rem !default;
@ -1409,8 +1411,8 @@ $accordion-icon-active-color: $primary-text-emphasis !default;
$accordion-icon-transition: transform 0.2s ease-in-out !default;
$accordion-icon-transform: rotate(-180deg) !default;
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
// scss-docs-end accordion-variables
// Tooltips
@ -1755,3 +1757,5 @@ $kbd-bg: var(--#{$prefix}body-color) !default;
$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6
$pre-color: null !default;
@import 'variables-dark'; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3

View File

@ -134,7 +134,7 @@
margin-left: $form-switch-padding-start * -1;
background-image: var(--#{$prefix}form-switch-bg);
background-position: left center;
@include border-radius($form-switch-border-radius);
@include border-radius($form-switch-border-radius, 0);
@include transition($form-switch-transition);
&:focus {

View File

@ -1,7 +1,7 @@
@mixin bsBanner($file) {
/*!
* Bootstrap #{$file} v5.3.2 (https://getbootstrap.com/)
* Copyright 2011-2023 The Bootstrap Authors
* Bootstrap #{$file} v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
}

View File

@ -70,7 +70,12 @@
&:focus {
border-color: $border-color;
box-shadow: $focus-box-shadow;
@if $enable-shadows {
@include box-shadow($input-box-shadow, $focus-box-shadow);
} @else {
// Avoid using mixin so we can pass custom focus shadow properly
box-shadow: $focus-box-shadow;
}
}
}
}
@ -101,7 +106,12 @@
&:focus {
border-color: $border-color;
box-shadow: $focus-box-shadow;
@if $enable-shadows {
@include box-shadow($form-select-box-shadow, $focus-box-shadow);
} @else {
// Avoid using mixin so we can pass custom focus shadow properly
box-shadow: $focus-box-shadow;
}
}
}
}

View File

@ -156,7 +156,7 @@
}
}
// Start with `1` because `0` is and invalid value.
// Start with `1` because `0` is an invalid value.
// Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.
@for $i from 1 through ($columns - 1) {
.g-start#{$infix}-#{$i} {

View File

@ -65,7 +65,7 @@
@if $value != null {
@if $is-rtl == false {
/* rtl:begin:remove */
/*!rtl:begin:remove*/
}
@if $is-css-var {
@ -105,7 +105,7 @@
}
@if $is-rtl == false {
/* rtl:end:remove */
/*!rtl:end:remove*/
}
}
}

View File

@ -20,7 +20,6 @@
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
--#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};
--#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};
--#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
@ -75,7 +74,6 @@
&:focus {
z-index: 3;
border-color: var(--#{$prefix}accordion-btn-focus-border-color);
outline: 0;
box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
}
@ -93,7 +91,7 @@
&:first-of-type {
@include border-top-radius(var(--#{$prefix}accordion-border-radius));
.accordion-button {
> .accordion-header .accordion-button {
@include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));
}
}
@ -106,13 +104,13 @@
&:last-of-type {
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
.accordion-button {
> .accordion-header .accordion-button {
&.collapsed {
@include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));
}
}
.accordion-collapse {
> .accordion-collapse {
@include border-bottom-radius(var(--#{$prefix}accordion-border-radius));
}
}
@ -127,11 +125,7 @@
// Remove borders and border-radius to keep accordion items edge-to-edge.
.accordion-flush {
.accordion-collapse {
border-width: 0;
}
.accordion-item {
> .accordion-item {
border-right: 0;
border-left: 0;
@include border-radius(0);
@ -143,12 +137,18 @@
border-bottom: 0;
}
.accordion-button {
// stylelint-disable selector-max-class
> .accordion-header .accordion-button {
&,
&.collapsed {
@include border-radius(0);
}
}
// stylelint-enable selector-max-class
> .accordion-collapse {
@include border-radius(0);
}
}
}

View File

@ -100,6 +100,15 @@
}
}
.btn-check:checked:focus-visible + & {
// Avoid using mixin so we can pass custom focus shadow properly
@if $enable-shadows {
box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);
} @else {
box-shadow: var(--#{$prefix}btn-focus-box-shadow);
}
}
&:disabled,
&.disabled,
fieldset:disabled & {

View File

@ -138,19 +138,13 @@
background-size: 100% 100%;
}
/* rtl:options: {
"autoRename": true,
"stringMap":[ {
"name" : "prev-next",
"search" : "prev",
"replace" : "next"
} ]
} */
.carousel-control-prev-icon {
background-image: escape-svg($carousel-control-prev-icon-bg);
background-image: escape-svg($carousel-control-prev-icon-bg) #{'/*rtl:' +
escape-svg($carousel-control-next-icon-bg) + '*/'};
}
.carousel-control-next-icon {
background-image: escape-svg($carousel-control-next-icon-bg);
background-image: escape-svg($carousel-control-next-icon-bg) #{'/*rtl:' +
escape-svg($carousel-control-prev-icon-bg) + '*/'};
}
// Optional indicator pips/controls

View File

@ -129,7 +129,6 @@
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends
padding: var(--#{$prefix}modal-header-padding);
border-bottom: var(--#{$prefix}modal-header-border-width) solid
var(--#{$prefix}modal-header-border-color);

View File

@ -131,15 +131,14 @@
.offcanvas-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);
.btn-close {
padding: calc(var(--#{$prefix}offcanvas-padding-y) * 0.5)
calc(var(--#{$prefix}offcanvas-padding-x) * 0.5);
margin-top: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y));
margin-right: calc(-0.5 * var(--#{$prefix}offcanvas-padding-x));
margin-bottom: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y));
margin: calc(-0.5 * var(--#{$prefix}offcanvas-padding-y))
calc(-0.5 * var(--#{$prefix}offcanvas-padding-x))
calc(-0.5 * var(--#{$prefix}offcanvas-padding-y)) auto;
}
}

View File

@ -84,7 +84,7 @@
//
// When borders are added on all sides of the cells, the corners can render odd when
// these borders do not have the same color or if they are semi-transparent.
// Therefor we add top and border bottoms to the `tr`s and left and right borders
// Therefore we add top and border bottoms to the `tr`s and left and right borders
// to the `td`s or `th`s
.table-bordered {

View File

@ -1400,7 +1400,9 @@ $accordion-transition: $btn-transition, border-radius 0.15s ease !default;
$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;
$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default;
$accordion-button-focus-border-color: $input-focus-border-color !default;
// fusv-disable
$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3
// fusv-enable
$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
$accordion-icon-width: 1.25rem !default;
@ -1409,8 +1411,8 @@ $accordion-icon-active-color: $primary-text-emphasis !default;
$accordion-icon-transition: transform 0.2s ease-in-out !default;
$accordion-icon-transform: rotate(-180deg) !default;
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
$accordion-button-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
$accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='#{$accordion-icon-active-color}' stroke-linecap='round' stroke-linejoin='round'><path d='M2 5L8 11L14 5'/></svg>") !default;
// scss-docs-end accordion-variables
// Tooltips
@ -1755,3 +1757,5 @@ $kbd-bg: var(--#{$prefix}body-color) !default;
$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6
$pre-color: null !default;
@import 'variables-dark'; // TODO: can be removed safely in v6, only here to avoid breaking changes in v5.3

View File

@ -134,7 +134,7 @@
margin-left: $form-switch-padding-start * -1;
background-image: var(--#{$prefix}form-switch-bg);
background-position: left center;
@include border-radius($form-switch-border-radius);
@include border-radius($form-switch-border-radius, 0);
@include transition($form-switch-transition);
&:focus {

Some files were not shown because too many files have changed in this diff Show More