2
0
mirror of https://github.com/tenrok/bootstrap.git synced 2026-06-20 20:00:36 +03:00

Release v5.3.0-alpha1 (#37661)

* Bump version to 5.3.0-alpha1

* Dist

* Add docs versions updates

* Update note in homepage hero

Co-authored-by: Mark Otto <markdotto@gmail.com>
This commit is contained in:
XhmikosR
2022-12-24 18:37:22 +02:00
committed by GitHub
parent 41f62c5a11
commit cf9454caa0
427 changed files with 7348 additions and 6700 deletions
+7 -7
View File
@@ -1,6 +1,6 @@
<p align="center"> <p align="center">
<a href="https://getbootstrap.com/"> <a href="https://getbootstrap.com/">
<img src="https://getbootstrap.com/docs/5.2/assets/brand/bootstrap-logo-shadow.png" alt="Bootstrap logo" width="200" height="165"> <img src="https://getbootstrap.com/docs/5.3/assets/brand/bootstrap-logo-shadow.png" alt="Bootstrap logo" width="200" height="165">
</a> </a>
</p> </p>
@@ -9,7 +9,7 @@
<p align="center"> <p align="center">
Sleek, intuitive, and powerful front-end framework for faster and easier web development. Sleek, intuitive, and powerful front-end framework for faster and easier web development.
<br> <br>
<a href="https://getbootstrap.com/docs/5.2/"><strong>Explore Bootstrap docs »</strong></a> <a href="https://getbootstrap.com/docs/5.3/"><strong>Explore Bootstrap docs »</strong></a>
<br> <br>
<br> <br>
<a href="https://github.com/twbs/bootstrap/issues/new?assignees=-&labels=bug&template=bug_report.yml">Report bug</a> <a href="https://github.com/twbs/bootstrap/issues/new?assignees=-&labels=bug&template=bug_report.yml">Report bug</a>
@@ -46,14 +46,14 @@ Our default branch is for development of our Bootstrap 5 release. Head to the [`
Several quick start options are available: Several quick start options are available:
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.2.3.zip) - [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.3.0-alpha1.zip)
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git` - Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@v5.2.3` - Install with [npm](https://www.npmjs.com/): `npm install bootstrap@v5.3.0-alpha1`
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@v5.2.3` - Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@v5.3.0-alpha1`
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.2.3` - Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.3.0-alpha1`
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass` - Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
Read the [Getting started page](https://getbootstrap.com/docs/5.2/getting-started/introduction/) for information on the framework contents, templates, examples, and more. Read the [Getting started page](https://getbootstrap.com/docs/5.3/getting-started/introduction/) for information on the framework contents, templates, examples, and more.
## Status ## Status
+17 -17
View File
@@ -31,7 +31,7 @@ publishDir: "_site"
module: module:
mounts: mounts:
- source: dist - source: dist
target: static/docs/5.2/dist target: static/docs/5.3/dist
- source: site/assets - source: site/assets
target: assets target: assets
- source: site/content - source: site/content
@@ -42,9 +42,9 @@ module:
target: layouts target: layouts
- source: site/static - source: site/static
target: static target: static
- source: site/static/docs/5.2/assets/img/favicons/apple-touch-icon.png - source: site/static/docs/5.3/assets/img/favicons/apple-touch-icon.png
target: static/apple-touch-icon.png target: static/apple-touch-icon.png
- source: site/static/docs/5.2/assets/img/favicons/favicon.ico - source: site/static/docs/5.3/assets/img/favicons/favicon.ico
target: static/favicon.ico target: static/favicon.ico
params: params:
@@ -52,9 +52,9 @@ params:
description: "Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins." description: "Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins."
authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors" authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors"
current_version: "5.2.3" current_version: "5.3.0-alpha1"
current_ruby_version: "5.2.3" current_ruby_version: "5.3.0-alpha1"
docs_version: "5.2" docs_version: "5.3"
rfs_version: "v9.0.6" rfs_version: "v9.0.6"
github_org: "https://github.com/twbs" github_org: "https://github.com/twbs"
repo: "https://github.com/twbs/bootstrap" repo: "https://github.com/twbs/bootstrap"
@@ -66,20 +66,20 @@ params:
swag: "https://cottonbureau.com/people/bootstrap" swag: "https://cottonbureau.com/people/bootstrap"
download: download:
source: "https://github.com/twbs/bootstrap/archive/v5.2.3.zip" source: "https://github.com/twbs/bootstrap/archive/v5.3.0-alpha1.zip"
dist: "https://github.com/twbs/bootstrap/releases/download/v5.2.3/bootstrap-5.2.3-dist.zip" dist: "https://github.com/twbs/bootstrap/releases/download/v5.3.0-alpha1/bootstrap-5.3.0-alpha1-dist.zip"
dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.2.3/bootstrap-5.2.3-examples.zip" dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.3.0-alpha1/bootstrap-5.3.0-alpha1-examples.zip"
cdn: cdn:
# See https://www.srihash.org for info on how to generate the hashes # See https://www.srihash.org for info on how to generate the hashes
css: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" css: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"
css_hash: "sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" css_hash: "sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD"
css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.rtl.min.css" css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.rtl.min.css"
css_rtl_hash: "sha384-DOXMLfHhQkvFFp+rWTZwVlPVqdIhpDVYT9csOnHSgWQWPX0v5MCGtjCJbY6ERspU" css_rtl_hash: "sha384-WJUUqfoMmnfkBLne5uxXj+na/c7sesSJ32gI7GfCk4zO4GthUKhSEGyvQ839BC51"
js: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.min.js" js: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.min.js"
js_hash: "sha384-cuYeSxntonz0PPNlHhBs68uyIAVpIIOZZ5JqeqvYYIcEL727kskC66kF92t6Xl2V" js_hash: "sha384-mQ93GR66B00ZXjt0YO5KlohRA5SY2XofN4zfuZxLkoj1gXtW8ANNCe9d5Y3eG5eD"
js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js" js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
js_bundle_hash: "sha384-kenU1KFdBIe4zVF0s0G1M5b4hcpxyD9F7jL+jjXkk+Q2h455rYXK/7HAuoJl+0I4" js_bundle_hash: "sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
popper: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" popper: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"
popper_hash: "sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" popper_hash: "sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3"
+168 -65
View File
@@ -1,9 +1,10 @@
/*! /*!
* Bootstrap Grid v5.2.3 (https://getbootstrap.com/) * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root { :root,
[data-bs-theme=light] {
--bs-blue: #0d6efd; --bs-blue: #0d6efd;
--bs-indigo: #6610f2; --bs-indigo: #6610f2;
--bs-purple: #6f42c1; --bs-purple: #6f42c1;
@@ -43,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69; --bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250; --bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41; --bs-dark-rgb: 33, 37, 41;
--bs-primary-text: #0a58ca;
--bs-secondary-text: #6c757d;
--bs-success-text: #146c43;
--bs-info-text: #087990;
--bs-warning-text: #997404;
--bs-danger-text: #b02a37;
--bs-light-text: #6c757d;
--bs-dark-text: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #f8f9fa;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #e9ecef;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255; --bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0; --bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41; --bs-body-color-rgb: 33, 37, 41;
@@ -55,7 +80,25 @@
--bs-body-font-weight: 400; --bs-body-font-weight: 400;
--bs-body-line-height: 1.5; --bs-body-line-height: 1.5;
--bs-body-color: #212529; --bs-body-color: #212529;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff; --bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px; --bs-border-width: 1px;
--bs-border-style: solid; --bs-border-style: solid;
--bs-border-color: #dee2e6; --bs-border-color: #dee2e6;
@@ -66,10 +109,70 @@
--bs-border-radius-xl: 1rem; --bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem; --bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem; --bs-border-radius-pill: 50rem;
--bs-link-color: #0d6efd; --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
--bs-link-hover-color: #0a58ca; --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
--bs-code-color: #d63384; --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
--bs-emphasis-color: #000;
--bs-form-control-bg: var(--bs-body-bg);
--bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd; --bs-highlight-bg: #fff3cd;
--bs-breakpoint-xs: 0;
--bs-breakpoint-sm: 576px;
--bs-breakpoint-md: 768px;
--bs-breakpoint-lg: 992px;
--bs-breakpoint-xl: 1200px;
--bs-breakpoint-xxl: 1400px;
}
[data-bs-theme=dark] {
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #f8f9fa;
--bs-emphasis-color-rgb: 248, 249, 250;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-emphasis-color: #fff;
--bs-primary-text: #6ea8fe;
--bs-secondary-text: #dee2e6;
--bs-success-text: #75b798;
--bs-info-text: #6edff6;
--bs-warning-text: #ffda6a;
--bs-danger-text: #ea868f;
--bs-light-text: #f8f9fa;
--bs-dark-text: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #212529;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #495057;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #055160;
--bs-warning-border-subtle: #664d03;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: #fff;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #9ec5fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 158, 197, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
} }
.container, .container,
@@ -461,51 +564,51 @@
margin-left: 91.66666667%; margin-left: 91.66666667%;
} }
.g-sm-0, .g-sm-0,
.gx-sm-0 { .gx-sm-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-sm-0, .g-sm-0,
.gy-sm-0 { .gy-sm-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-sm-1, .g-sm-1,
.gx-sm-1 { .gx-sm-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-sm-1, .g-sm-1,
.gy-sm-1 { .gy-sm-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-sm-2, .g-sm-2,
.gx-sm-2 { .gx-sm-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-sm-2, .g-sm-2,
.gy-sm-2 { .gy-sm-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-sm-3, .g-sm-3,
.gx-sm-3 { .gx-sm-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-sm-3, .g-sm-3,
.gy-sm-3 { .gy-sm-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-sm-4, .g-sm-4,
.gx-sm-4 { .gx-sm-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-sm-4, .g-sm-4,
.gy-sm-4 { .gy-sm-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-sm-5, .g-sm-5,
.gx-sm-5 { .gx-sm-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-sm-5, .g-sm-5,
.gy-sm-5 { .gy-sm-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -630,51 +733,51 @@
margin-left: 91.66666667%; margin-left: 91.66666667%;
} }
.g-md-0, .g-md-0,
.gx-md-0 { .gx-md-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-md-0, .g-md-0,
.gy-md-0 { .gy-md-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-md-1, .g-md-1,
.gx-md-1 { .gx-md-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-md-1, .g-md-1,
.gy-md-1 { .gy-md-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-md-2, .g-md-2,
.gx-md-2 { .gx-md-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-md-2, .g-md-2,
.gy-md-2 { .gy-md-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-md-3, .g-md-3,
.gx-md-3 { .gx-md-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-md-3, .g-md-3,
.gy-md-3 { .gy-md-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-md-4, .g-md-4,
.gx-md-4 { .gx-md-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-md-4, .g-md-4,
.gy-md-4 { .gy-md-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-md-5, .g-md-5,
.gx-md-5 { .gx-md-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-md-5, .g-md-5,
.gy-md-5 { .gy-md-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -799,51 +902,51 @@
margin-left: 91.66666667%; margin-left: 91.66666667%;
} }
.g-lg-0, .g-lg-0,
.gx-lg-0 { .gx-lg-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-lg-0, .g-lg-0,
.gy-lg-0 { .gy-lg-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-lg-1, .g-lg-1,
.gx-lg-1 { .gx-lg-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-lg-1, .g-lg-1,
.gy-lg-1 { .gy-lg-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-lg-2, .g-lg-2,
.gx-lg-2 { .gx-lg-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-lg-2, .g-lg-2,
.gy-lg-2 { .gy-lg-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-lg-3, .g-lg-3,
.gx-lg-3 { .gx-lg-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-lg-3, .g-lg-3,
.gy-lg-3 { .gy-lg-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-lg-4, .g-lg-4,
.gx-lg-4 { .gx-lg-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-lg-4, .g-lg-4,
.gy-lg-4 { .gy-lg-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-lg-5, .g-lg-5,
.gx-lg-5 { .gx-lg-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-lg-5, .g-lg-5,
.gy-lg-5 { .gy-lg-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -968,51 +1071,51 @@
margin-left: 91.66666667%; margin-left: 91.66666667%;
} }
.g-xl-0, .g-xl-0,
.gx-xl-0 { .gx-xl-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-xl-0, .g-xl-0,
.gy-xl-0 { .gy-xl-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-xl-1, .g-xl-1,
.gx-xl-1 { .gx-xl-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-xl-1, .g-xl-1,
.gy-xl-1 { .gy-xl-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-xl-2, .g-xl-2,
.gx-xl-2 { .gx-xl-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-xl-2, .g-xl-2,
.gy-xl-2 { .gy-xl-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-xl-3, .g-xl-3,
.gx-xl-3 { .gx-xl-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-xl-3, .g-xl-3,
.gy-xl-3 { .gy-xl-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-xl-4, .g-xl-4,
.gx-xl-4 { .gx-xl-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-xl-4, .g-xl-4,
.gy-xl-4 { .gy-xl-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-xl-5, .g-xl-5,
.gx-xl-5 { .gx-xl-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-xl-5, .g-xl-5,
.gy-xl-5 { .gy-xl-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -1137,51 +1240,51 @@
margin-left: 91.66666667%; margin-left: 91.66666667%;
} }
.g-xxl-0, .g-xxl-0,
.gx-xxl-0 { .gx-xxl-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-xxl-0, .g-xxl-0,
.gy-xxl-0 { .gy-xxl-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-xxl-1, .g-xxl-1,
.gx-xxl-1 { .gx-xxl-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-xxl-1, .g-xxl-1,
.gy-xxl-1 { .gy-xxl-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-xxl-2, .g-xxl-2,
.gx-xxl-2 { .gx-xxl-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-xxl-2, .g-xxl-2,
.gy-xxl-2 { .gy-xxl-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-xxl-3, .g-xxl-3,
.gx-xxl-3 { .gx-xxl-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-xxl-3, .g-xxl-3,
.gy-xxl-3 { .gy-xxl-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-xxl-4, .g-xxl-4,
.gx-xxl-4 { .gx-xxl-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-xxl-4, .g-xxl-4,
.gy-xxl-4 { .gy-xxl-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-xxl-5, .g-xxl-5,
.gx-xxl-5 { .gx-xxl-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-xxl-5, .g-xxl-5,
.gy-xxl-5 { .gy-xxl-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -3
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+168 -66
View File
@@ -1,10 +1,10 @@
/*! /*!
* Bootstrap Grid v5.2.3 (https://getbootstrap.com/) * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root { :root,
[data-bs-theme=light] {
--bs-blue: #0d6efd; --bs-blue: #0d6efd;
--bs-indigo: #6610f2; --bs-indigo: #6610f2;
--bs-purple: #6f42c1; --bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69; --bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250; --bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41; --bs-dark-rgb: 33, 37, 41;
--bs-primary-text: #0a58ca;
--bs-secondary-text: #6c757d;
--bs-success-text: #146c43;
--bs-info-text: #087990;
--bs-warning-text: #997404;
--bs-danger-text: #b02a37;
--bs-light-text: #6c757d;
--bs-dark-text: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #f8f9fa;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #e9ecef;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255; --bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0; --bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41; --bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400; --bs-body-font-weight: 400;
--bs-body-line-height: 1.5; --bs-body-line-height: 1.5;
--bs-body-color: #212529; --bs-body-color: #212529;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff; --bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px; --bs-border-width: 1px;
--bs-border-style: solid; --bs-border-style: solid;
--bs-border-color: #dee2e6; --bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem; --bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem; --bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem; --bs-border-radius-pill: 50rem;
--bs-link-color: #0d6efd; --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
--bs-link-hover-color: #0a58ca; --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
--bs-code-color: #d63384; --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
--bs-emphasis-color: #000;
--bs-form-control-bg: var(--bs-body-bg);
--bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd; --bs-highlight-bg: #fff3cd;
--bs-breakpoint-xs: 0;
--bs-breakpoint-sm: 576px;
--bs-breakpoint-md: 768px;
--bs-breakpoint-lg: 992px;
--bs-breakpoint-xl: 1200px;
--bs-breakpoint-xxl: 1400px;
}
[data-bs-theme=dark] {
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #f8f9fa;
--bs-emphasis-color-rgb: 248, 249, 250;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-emphasis-color: #fff;
--bs-primary-text: #6ea8fe;
--bs-secondary-text: #dee2e6;
--bs-success-text: #75b798;
--bs-info-text: #6edff6;
--bs-warning-text: #ffda6a;
--bs-danger-text: #ea868f;
--bs-light-text: #f8f9fa;
--bs-dark-text: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #212529;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #495057;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #055160;
--bs-warning-border-subtle: #664d03;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: #fff;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #9ec5fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 158, 197, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
} }
.container, .container,
@@ -462,51 +564,51 @@
margin-right: 91.66666667%; margin-right: 91.66666667%;
} }
.g-sm-0, .g-sm-0,
.gx-sm-0 { .gx-sm-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-sm-0, .g-sm-0,
.gy-sm-0 { .gy-sm-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-sm-1, .g-sm-1,
.gx-sm-1 { .gx-sm-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-sm-1, .g-sm-1,
.gy-sm-1 { .gy-sm-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-sm-2, .g-sm-2,
.gx-sm-2 { .gx-sm-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-sm-2, .g-sm-2,
.gy-sm-2 { .gy-sm-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-sm-3, .g-sm-3,
.gx-sm-3 { .gx-sm-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-sm-3, .g-sm-3,
.gy-sm-3 { .gy-sm-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-sm-4, .g-sm-4,
.gx-sm-4 { .gx-sm-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-sm-4, .g-sm-4,
.gy-sm-4 { .gy-sm-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-sm-5, .g-sm-5,
.gx-sm-5 { .gx-sm-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-sm-5, .g-sm-5,
.gy-sm-5 { .gy-sm-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -631,51 +733,51 @@
margin-right: 91.66666667%; margin-right: 91.66666667%;
} }
.g-md-0, .g-md-0,
.gx-md-0 { .gx-md-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-md-0, .g-md-0,
.gy-md-0 { .gy-md-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-md-1, .g-md-1,
.gx-md-1 { .gx-md-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-md-1, .g-md-1,
.gy-md-1 { .gy-md-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-md-2, .g-md-2,
.gx-md-2 { .gx-md-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-md-2, .g-md-2,
.gy-md-2 { .gy-md-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-md-3, .g-md-3,
.gx-md-3 { .gx-md-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-md-3, .g-md-3,
.gy-md-3 { .gy-md-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-md-4, .g-md-4,
.gx-md-4 { .gx-md-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-md-4, .g-md-4,
.gy-md-4 { .gy-md-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-md-5, .g-md-5,
.gx-md-5 { .gx-md-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-md-5, .g-md-5,
.gy-md-5 { .gy-md-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -800,51 +902,51 @@
margin-right: 91.66666667%; margin-right: 91.66666667%;
} }
.g-lg-0, .g-lg-0,
.gx-lg-0 { .gx-lg-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-lg-0, .g-lg-0,
.gy-lg-0 { .gy-lg-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-lg-1, .g-lg-1,
.gx-lg-1 { .gx-lg-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-lg-1, .g-lg-1,
.gy-lg-1 { .gy-lg-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-lg-2, .g-lg-2,
.gx-lg-2 { .gx-lg-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-lg-2, .g-lg-2,
.gy-lg-2 { .gy-lg-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-lg-3, .g-lg-3,
.gx-lg-3 { .gx-lg-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-lg-3, .g-lg-3,
.gy-lg-3 { .gy-lg-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-lg-4, .g-lg-4,
.gx-lg-4 { .gx-lg-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-lg-4, .g-lg-4,
.gy-lg-4 { .gy-lg-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-lg-5, .g-lg-5,
.gx-lg-5 { .gx-lg-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-lg-5, .g-lg-5,
.gy-lg-5 { .gy-lg-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -969,51 +1071,51 @@
margin-right: 91.66666667%; margin-right: 91.66666667%;
} }
.g-xl-0, .g-xl-0,
.gx-xl-0 { .gx-xl-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-xl-0, .g-xl-0,
.gy-xl-0 { .gy-xl-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-xl-1, .g-xl-1,
.gx-xl-1 { .gx-xl-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-xl-1, .g-xl-1,
.gy-xl-1 { .gy-xl-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-xl-2, .g-xl-2,
.gx-xl-2 { .gx-xl-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-xl-2, .g-xl-2,
.gy-xl-2 { .gy-xl-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-xl-3, .g-xl-3,
.gx-xl-3 { .gx-xl-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-xl-3, .g-xl-3,
.gy-xl-3 { .gy-xl-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-xl-4, .g-xl-4,
.gx-xl-4 { .gx-xl-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-xl-4, .g-xl-4,
.gy-xl-4 { .gy-xl-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-xl-5, .g-xl-5,
.gx-xl-5 { .gx-xl-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-xl-5, .g-xl-5,
.gy-xl-5 { .gy-xl-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
@@ -1138,51 +1240,51 @@
margin-right: 91.66666667%; margin-right: 91.66666667%;
} }
.g-xxl-0, .g-xxl-0,
.gx-xxl-0 { .gx-xxl-0 {
--bs-gutter-x: 0; --bs-gutter-x: 0;
} }
.g-xxl-0, .g-xxl-0,
.gy-xxl-0 { .gy-xxl-0 {
--bs-gutter-y: 0; --bs-gutter-y: 0;
} }
.g-xxl-1, .g-xxl-1,
.gx-xxl-1 { .gx-xxl-1 {
--bs-gutter-x: 0.25rem; --bs-gutter-x: 0.25rem;
} }
.g-xxl-1, .g-xxl-1,
.gy-xxl-1 { .gy-xxl-1 {
--bs-gutter-y: 0.25rem; --bs-gutter-y: 0.25rem;
} }
.g-xxl-2, .g-xxl-2,
.gx-xxl-2 { .gx-xxl-2 {
--bs-gutter-x: 0.5rem; --bs-gutter-x: 0.5rem;
} }
.g-xxl-2, .g-xxl-2,
.gy-xxl-2 { .gy-xxl-2 {
--bs-gutter-y: 0.5rem; --bs-gutter-y: 0.5rem;
} }
.g-xxl-3, .g-xxl-3,
.gx-xxl-3 { .gx-xxl-3 {
--bs-gutter-x: 1rem; --bs-gutter-x: 1rem;
} }
.g-xxl-3, .g-xxl-3,
.gy-xxl-3 { .gy-xxl-3 {
--bs-gutter-y: 1rem; --bs-gutter-y: 1rem;
} }
.g-xxl-4, .g-xxl-4,
.gx-xxl-4 { .gx-xxl-4 {
--bs-gutter-x: 1.5rem; --bs-gutter-x: 1.5rem;
} }
.g-xxl-4, .g-xxl-4,
.gy-xxl-4 { .gy-xxl-4 {
--bs-gutter-y: 1.5rem; --bs-gutter-y: 1.5rem;
} }
.g-xxl-5, .g-xxl-5,
.gx-xxl-5 { .gx-xxl-5 {
--bs-gutter-x: 3rem; --bs-gutter-x: 3rem;
} }
.g-xxl-5, .g-xxl-5,
.gy-xxl-5 { .gy-xxl-5 {
--bs-gutter-y: 3rem; --bs-gutter-y: 3rem;
} }
} }
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
+113 -10
View File
@@ -1,10 +1,10 @@
/*! /*!
* Bootstrap Reboot v5.2.3 (https://getbootstrap.com/) * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root { :root,
[data-bs-theme=light] {
--bs-blue: #0d6efd; --bs-blue: #0d6efd;
--bs-indigo: #6610f2; --bs-indigo: #6610f2;
--bs-purple: #6f42c1; --bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69; --bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250; --bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41; --bs-dark-rgb: 33, 37, 41;
--bs-primary-text: #0a58ca;
--bs-secondary-text: #6c757d;
--bs-success-text: #146c43;
--bs-info-text: #087990;
--bs-warning-text: #997404;
--bs-danger-text: #b02a37;
--bs-light-text: #6c757d;
--bs-dark-text: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #f8f9fa;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #e9ecef;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255; --bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0; --bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41; --bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400; --bs-body-font-weight: 400;
--bs-body-line-height: 1.5; --bs-body-line-height: 1.5;
--bs-body-color: #212529; --bs-body-color: #212529;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff; --bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px; --bs-border-width: 1px;
--bs-border-style: solid; --bs-border-style: solid;
--bs-border-color: #dee2e6; --bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem; --bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem; --bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem; --bs-border-radius-pill: 50rem;
--bs-link-color: #0d6efd; --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
--bs-link-hover-color: #0a58ca; --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
--bs-code-color: #d63384; --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
--bs-emphasis-color: #000;
--bs-form-control-bg: var(--bs-body-bg);
--bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd; --bs-highlight-bg: #fff3cd;
--bs-breakpoint-xs: 0;
--bs-breakpoint-sm: 576px;
--bs-breakpoint-md: 768px;
--bs-breakpoint-lg: 992px;
--bs-breakpoint-xl: 1200px;
--bs-breakpoint-xxl: 1400px;
}
[data-bs-theme=dark] {
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #f8f9fa;
--bs-emphasis-color-rgb: 248, 249, 250;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-emphasis-color: #fff;
--bs-primary-text: #6ea8fe;
--bs-secondary-text: #dee2e6;
--bs-success-text: #75b798;
--bs-info-text: #6edff6;
--bs-warning-text: #ffda6a;
--bs-danger-text: #ea868f;
--bs-light-text: #f8f9fa;
--bs-dark-text: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #212529;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #495057;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #055160;
--bs-warning-border-subtle: #664d03;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: #fff;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #9ec5fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 158, 197, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
} }
*, *,
@@ -102,7 +204,7 @@ hr {
margin: 1rem 0; margin: 1rem 0;
color: inherit; color: inherit;
border: 0; border: 0;
border-top: 1px solid; border-top: var(--bs-border-width) solid;
opacity: 0.25; opacity: 0.25;
} }
@@ -111,6 +213,7 @@ h6, h5, h4, h3, h2, h1 {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
font-weight: 500; font-weight: 500;
line-height: 1.2; line-height: 1.2;
color: var(--bs-heading-color, inherit);
} }
h1 { h1 {
@@ -239,11 +342,11 @@ sup {
} }
a { a {
color: var(--bs-link-color); color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline; text-decoration: underline;
} }
a:hover { a:hover {
color: var(--bs-link-hover-color); --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
} }
a:not([href]):not([class]), a:not([href]):not([class]):hover { a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -310,7 +413,7 @@ table {
caption { caption {
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
color: #6c757d; color: var(--bs-secondary-color);
text-align: left; text-align: left;
} }
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -3
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+113 -10
View File
@@ -1,10 +1,10 @@
/*! /*!
* Bootstrap Reboot v5.2.3 (https://getbootstrap.com/) * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 The Bootstrap Authors
* Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
:root { :root,
[data-bs-theme=light] {
--bs-blue: #0d6efd; --bs-blue: #0d6efd;
--bs-indigo: #6610f2; --bs-indigo: #6610f2;
--bs-purple: #6f42c1; --bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69; --bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250; --bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41; --bs-dark-rgb: 33, 37, 41;
--bs-primary-text: #0a58ca;
--bs-secondary-text: #6c757d;
--bs-success-text: #146c43;
--bs-info-text: #087990;
--bs-warning-text: #997404;
--bs-danger-text: #b02a37;
--bs-light-text: #6c757d;
--bs-dark-text: #495057;
--bs-primary-bg-subtle: #cfe2ff;
--bs-secondary-bg-subtle: #f8f9fa;
--bs-success-bg-subtle: #d1e7dd;
--bs-info-bg-subtle: #cff4fc;
--bs-warning-bg-subtle: #fff3cd;
--bs-danger-bg-subtle: #f8d7da;
--bs-light-bg-subtle: #fcfcfd;
--bs-dark-bg-subtle: #ced4da;
--bs-primary-border-subtle: #9ec5fe;
--bs-secondary-border-subtle: #e9ecef;
--bs-success-border-subtle: #a3cfbb;
--bs-info-border-subtle: #9eeaf9;
--bs-warning-border-subtle: #ffe69c;
--bs-danger-border-subtle: #f1aeb5;
--bs-light-border-subtle: #e9ecef;
--bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255; --bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0; --bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41; --bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400; --bs-body-font-weight: 400;
--bs-body-line-height: 1.5; --bs-body-line-height: 1.5;
--bs-body-color: #212529; --bs-body-color: #212529;
--bs-emphasis-color: #000;
--bs-emphasis-color-rgb: 0, 0, 0;
--bs-secondary-color: rgba(33, 37, 41, 0.75);
--bs-secondary-color-rgb: 33, 37, 41;
--bs-secondary-bg: #e9ecef;
--bs-secondary-bg-rgb: 233, 236, 239;
--bs-tertiary-color: rgba(33, 37, 41, 0.5);
--bs-tertiary-color-rgb: 33, 37, 41;
--bs-tertiary-bg: #f8f9fa;
--bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff; --bs-body-bg: #fff;
--bs-body-bg-rgb: 255, 255, 255;
--bs-link-color: #0d6efd;
--bs-link-color-rgb: 13, 110, 253;
--bs-link-decoration: underline;
--bs-link-hover-color: #0a58ca;
--bs-link-hover-color-rgb: 10, 88, 202;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
--bs-border-width: 1px; --bs-border-width: 1px;
--bs-border-style: solid; --bs-border-style: solid;
--bs-border-color: #dee2e6; --bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem; --bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem; --bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem; --bs-border-radius-pill: 50rem;
--bs-link-color: #0d6efd; --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
--bs-link-hover-color: #0a58ca; --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
--bs-code-color: #d63384; --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
--bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
--bs-emphasis-color: #000;
--bs-form-control-bg: var(--bs-body-bg);
--bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd; --bs-highlight-bg: #fff3cd;
--bs-breakpoint-xs: 0;
--bs-breakpoint-sm: 576px;
--bs-breakpoint-md: 768px;
--bs-breakpoint-lg: 992px;
--bs-breakpoint-xl: 1200px;
--bs-breakpoint-xxl: 1400px;
}
[data-bs-theme=dark] {
--bs-body-color: #adb5bd;
--bs-body-color-rgb: 173, 181, 189;
--bs-body-bg: #212529;
--bs-body-bg-rgb: 33, 37, 41;
--bs-emphasis-color: #f8f9fa;
--bs-emphasis-color-rgb: 248, 249, 250;
--bs-secondary-color: rgba(173, 181, 189, 0.75);
--bs-secondary-color-rgb: 173, 181, 189;
--bs-secondary-bg: #343a40;
--bs-secondary-bg-rgb: 52, 58, 64;
--bs-tertiary-color: rgba(173, 181, 189, 0.5);
--bs-tertiary-color-rgb: 173, 181, 189;
--bs-tertiary-bg: #2b3035;
--bs-tertiary-bg-rgb: 43, 48, 53;
--bs-emphasis-color: #fff;
--bs-primary-text: #6ea8fe;
--bs-secondary-text: #dee2e6;
--bs-success-text: #75b798;
--bs-info-text: #6edff6;
--bs-warning-text: #ffda6a;
--bs-danger-text: #ea868f;
--bs-light-text: #f8f9fa;
--bs-dark-text: #dee2e6;
--bs-primary-bg-subtle: #031633;
--bs-secondary-bg-subtle: #212529;
--bs-success-bg-subtle: #051b11;
--bs-info-bg-subtle: #032830;
--bs-warning-bg-subtle: #332701;
--bs-danger-bg-subtle: #2c0b0e;
--bs-light-bg-subtle: #343a40;
--bs-dark-bg-subtle: #1a1d20;
--bs-primary-border-subtle: #084298;
--bs-secondary-border-subtle: #495057;
--bs-success-border-subtle: #0f5132;
--bs-info-border-subtle: #055160;
--bs-warning-border-subtle: #664d03;
--bs-danger-border-subtle: #842029;
--bs-light-border-subtle: #495057;
--bs-dark-border-subtle: #343a40;
--bs-heading-color: #fff;
--bs-link-color: #6ea8fe;
--bs-link-hover-color: #9ec5fe;
--bs-link-color-rgb: 110, 168, 254;
--bs-link-hover-color-rgb: 158, 197, 254;
--bs-code-color: #e685b5;
--bs-border-color: #495057;
--bs-border-color-translucent: rgba(255, 255, 255, 0.15);
} }
*, *,
@@ -102,7 +204,7 @@ hr {
margin: 1rem 0; margin: 1rem 0;
color: inherit; color: inherit;
border: 0; border: 0;
border-top: 1px solid; border-top: var(--bs-border-width) solid;
opacity: 0.25; opacity: 0.25;
} }
@@ -111,6 +213,7 @@ h6, h5, h4, h3, h2, h1 {
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
font-weight: 500; font-weight: 500;
line-height: 1.2; line-height: 1.2;
color: var(--bs-heading-color, inherit);
} }
h1 { h1 {
@@ -239,11 +342,11 @@ sup {
} }
a { a {
color: var(--bs-link-color); color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline; text-decoration: underline;
} }
a:hover { a:hover {
color: var(--bs-link-hover-color); --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
} }
a:not([href]):not([class]), a:not([href]):not([class]):hover { a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -310,7 +413,7 @@ table {
caption { caption {
padding-top: 0.5rem; padding-top: 0.5rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
color: #6c757d; color: var(--bs-secondary-color);
text-align: right; text-align: right;
} }
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
+849 -16
View File
File diff suppressed because it is too large Load Diff
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
+849 -16
View File
File diff suppressed because it is too large Load Diff
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
+1320 -415
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -3
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1320 -415
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -3
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+500 -1280
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+499 -1279
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+502 -1283
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+18 -29
View File
@@ -1,25 +1,21 @@
/*! /*!
* Bootstrap alert.js v5.2.3 (https://getbootstrap.com/) * Bootstrap alert.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component'), require('./util/component-functions')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./base-component.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions));
})(this, (function (index, EventHandler, BaseComponent, componentFunctions) { 'use strict'; })(this, (function (index_js, EventHandler, BaseComponent, componentFunctions_js) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): alert.js * Bootstrap (v5.3.0-alpha1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -31,68 +27,61 @@
const EVENT_CLOSED = `closed${EVENT_KEY}`; const EVENT_CLOSED = `closed${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade'; const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_SHOW = 'show'; const CLASS_NAME_SHOW = 'show';
/** /**
* Class definition * Class definition
*/ */
class Alert extends BaseComponent__default.default { class Alert extends BaseComponent {
// Getters // Getters
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
close() { close() {
const closeEvent = EventHandler__default.default.trigger(this._element, EVENT_CLOSE); const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
if (closeEvent.defaultPrevented) { if (closeEvent.defaultPrevented) {
return; return;
} }
this._element.classList.remove(CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_SHOW);
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE); const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);
this._queueCallback(() => this._destroyElement(), this._element, isAnimated); this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
} // Private }
// Private
_destroyElement() { _destroyElement() {
this._element.remove(); this._element.remove();
EventHandler.trigger(this._element, EVENT_CLOSED);
EventHandler__default.default.trigger(this._element, EVENT_CLOSED);
this.dispose(); this.dispose();
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Alert.getOrCreateInstance(this); const data = Alert.getOrCreateInstance(this);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](this); data[config](this);
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
componentFunctions_js.enableDismissTrigger(Alert, 'close');
componentFunctions.enableDismissTrigger(Alert, 'close');
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Alert); index_js.defineJQueryPlugin(Alert);
return Alert; return Alert;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","BaseComponent","close","closeEvent","EventHandler","trigger","_element","defaultPrevented","classList","remove","isAnimated","contains","_queueCallback","_destroyElement","dispose","jQueryInterface","config","each","data","getOrCreateInstance","undefined","startsWith","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAOA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAb,CAAA;EACA,MAAMC,QAAQ,GAAG,UAAjB,CAAA;EACA,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAA/B,CAAA,CAAA;EAEA,MAAME,WAAW,GAAI,CAAOD,KAAAA,EAAAA,SAAU,CAAtC,CAAA,CAAA;EACA,MAAME,YAAY,GAAI,CAAQF,MAAAA,EAAAA,SAAU,CAAxC,CAAA,CAAA;EACA,MAAMG,eAAe,GAAG,MAAxB,CAAA;EACA,MAAMC,eAAe,GAAG,MAAxB,CAAA;EAEA;EACA;EACA;;EAEA,MAAMC,KAAN,SAAoBC,8BAApB,CAAkC;EAChC;EACe,EAAA,WAAJR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAJ+B;;;EAOhCS,EAAAA,KAAK,GAAG;MACN,MAAMC,UAAU,GAAGC,6BAAY,CAACC,OAAb,CAAqB,IAAKC,CAAAA,QAA1B,EAAoCV,WAApC,CAAnB,CAAA;;MAEA,IAAIO,UAAU,CAACI,gBAAf,EAAiC;EAC/B,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,IAAA,CAAKD,QAAL,CAAcE,SAAd,CAAwBC,MAAxB,CAA+BV,eAA/B,CAAA,CAAA;;MAEA,MAAMW,UAAU,GAAG,IAAA,CAAKJ,QAAL,CAAcE,SAAd,CAAwBG,QAAxB,CAAiCb,eAAjC,CAAnB,CAAA;;MACA,IAAKc,CAAAA,cAAL,CAAoB,MAAM,IAAKC,CAAAA,eAAL,EAA1B,EAAkD,IAAA,CAAKP,QAAvD,EAAiEI,UAAjE,CAAA,CAAA;EACD,GAlB+B;;;EAqBhCG,EAAAA,eAAe,GAAG;MAChB,IAAKP,CAAAA,QAAL,CAAcG,MAAd,EAAA,CAAA;;EACAL,IAAAA,6BAAY,CAACC,OAAb,CAAqB,IAAKC,CAAAA,QAA1B,EAAoCT,YAApC,CAAA,CAAA;EACA,IAAA,IAAA,CAAKiB,OAAL,EAAA,CAAA;EACD,GAzB+B;;;IA4BV,OAAfC,eAAe,CAACC,MAAD,EAAS;MAC7B,OAAO,IAAA,CAAKC,IAAL,CAAU,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGlB,KAAK,CAACmB,mBAAN,CAA0B,IAA1B,CAAb,CAAA;;EAEA,MAAA,IAAI,OAAOH,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,QAAA,OAAA;EACD,OAAA;;EAED,MAAA,IAAIE,IAAI,CAACF,MAAD,CAAJ,KAAiBI,SAAjB,IAA8BJ,MAAM,CAACK,UAAP,CAAkB,GAAlB,CAA9B,IAAwDL,MAAM,KAAK,aAAvE,EAAsF;EACpF,QAAA,MAAM,IAAIM,SAAJ,CAAe,CAAmBN,iBAAAA,EAAAA,MAAO,GAAzC,CAAN,CAAA;EACD,OAAA;;EAEDE,MAAAA,IAAI,CAACF,MAAD,CAAJ,CAAa,IAAb,CAAA,CAAA;EACD,KAZM,CAAP,CAAA;EAaD,GAAA;;EA1C+B,CAAA;EA6ClC;EACA;EACA;;;AAEAO,yCAAoB,CAACvB,KAAD,EAAQ,OAAR,CAApB,CAAA;EAEA;EACA;EACA;;AAEAwB,0BAAkB,CAACxB,KAAD,CAAlB;;;;;;;;"} {"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","BaseComponent","close","closeEvent","EventHandler","trigger","_element","defaultPrevented","classList","remove","isAnimated","contains","_queueCallback","_destroyElement","dispose","jQueryInterface","config","each","data","getOrCreateInstance","undefined","startsWith","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAOA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAO,CAAA;EACpB,MAAMC,QAAQ,GAAG,UAAU,CAAA;EAC3B,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAAC,CAAA,CAAA;EAEhC,MAAME,WAAW,GAAI,CAAOD,KAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACvC,MAAME,YAAY,GAAI,CAAQF,MAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACzC,MAAMG,eAAe,GAAG,MAAM,CAAA;EAC9B,MAAMC,eAAe,GAAG,MAAM,CAAA;;EAE9B;EACA;EACA;;EAEA,MAAMC,KAAK,SAASC,aAAa,CAAC;EAChC;EACA,EAAA,WAAWR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACAS,EAAAA,KAAK,GAAG;MACN,MAAMC,UAAU,GAAGC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEV,WAAW,CAAC,CAAA;MAEnE,IAAIO,UAAU,CAACI,gBAAgB,EAAE;EAC/B,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACC,MAAM,CAACV,eAAe,CAAC,CAAA;MAE/C,MAAMW,UAAU,GAAG,IAAI,CAACJ,QAAQ,CAACE,SAAS,CAACG,QAAQ,CAACb,eAAe,CAAC,CAAA;EACpE,IAAA,IAAI,CAACc,cAAc,CAAC,MAAM,IAAI,CAACC,eAAe,EAAE,EAAE,IAAI,CAACP,QAAQ,EAAEI,UAAU,CAAC,CAAA;EAC9E,GAAA;;EAEA;EACAG,EAAAA,eAAe,GAAG;EAChB,IAAA,IAAI,CAACP,QAAQ,CAACG,MAAM,EAAE,CAAA;MACtBL,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAET,YAAY,CAAC,CAAA;MACjD,IAAI,CAACiB,OAAO,EAAE,CAAA;EAChB,GAAA;;EAEA;IACA,OAAOC,eAAe,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGlB,KAAK,CAACmB,mBAAmB,CAAC,IAAI,CAAC,CAAA;EAE5C,MAAA,IAAI,OAAOH,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAIE,IAAI,CAACF,MAAM,CAAC,KAAKI,SAAS,IAAIJ,MAAM,CAACK,UAAU,CAAC,GAAG,CAAC,IAAIL,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIM,SAAS,CAAE,CAAmBN,iBAAAA,EAAAA,MAAO,GAAE,CAAC,CAAA;EACpD,OAAA;EAEAE,MAAAA,IAAI,CAACF,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;EACpB,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;AAEAO,4CAAoB,CAACvB,KAAK,EAAE,OAAO,CAAC,CAAA;;EAEpC;EACA;EACA;;AAEAwB,6BAAkB,CAACxB,KAAK,CAAC;;;;;;;;"}
+19 -36
View File
@@ -1,97 +1,80 @@
/*! /*!
* Bootstrap base-component.js v5.2.3 (https://getbootstrap.com/) * Bootstrap base-component.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data'), require('./util/index'), require('./dom/event-handler'), require('./util/config')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./util/index.js'), require('./dom/event-handler.js'), require('./util/config.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './util/index', './dom/event-handler', './util/config'], factory) : typeof define === 'function' && define.amd ? define(['./dom/data', './util/index', './dom/event-handler', './util/config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.BaseComponent = factory(global.Data, global.Index, global.EventHandler, global.Config)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.BaseComponent = factory(global.Data, global.Index, global.EventHandler, global.Config));
})(this, (function (Data, index, EventHandler, Config) { 'use strict'; })(this, (function (Data, index_js, EventHandler, Config) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): base-component.js * Bootstrap (v5.3.0-alpha1): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
const VERSION = '5.2.3'; const VERSION = '5.3.0-alpha1';
/** /**
* Class definition * Class definition
*/ */
class BaseComponent extends Config__default.default { class BaseComponent extends Config {
constructor(element, config) { constructor(element, config) {
super(); super();
element = index.getElement(element); element = index_js.getElement(element);
if (!element) { if (!element) {
return; return;
} }
this._element = element; this._element = element;
this._config = this._getConfig(config); this._config = this._getConfig(config);
Data__default.default.set(this._element, this.constructor.DATA_KEY, this); Data.set(this._element, this.constructor.DATA_KEY, this);
} // Public }
// Public
dispose() { dispose() {
Data__default.default.remove(this._element, this.constructor.DATA_KEY); Data.remove(this._element, this.constructor.DATA_KEY);
EventHandler__default.default.off(this._element, this.constructor.EVENT_KEY); EventHandler.off(this._element, this.constructor.EVENT_KEY);
for (const propertyName of Object.getOwnPropertyNames(this)) { for (const propertyName of Object.getOwnPropertyNames(this)) {
this[propertyName] = null; this[propertyName] = null;
} }
} }
_queueCallback(callback, element, isAnimated = true) { _queueCallback(callback, element, isAnimated = true) {
index.executeAfterTransition(callback, element, isAnimated); index_js.executeAfterTransition(callback, element, isAnimated);
} }
_getConfig(config) { _getConfig(config) {
config = this._mergeConfigObj(config, this._element); config = this._mergeConfigObj(config, this._element);
config = this._configAfterMerge(config); config = this._configAfterMerge(config);
this._typeCheckConfig(config); this._typeCheckConfig(config);
return config; return config;
} // Static
static getInstance(element) {
return Data__default.default.get(index.getElement(element), this.DATA_KEY);
} }
// Static
static getInstance(element) {
return Data.get(index_js.getElement(element), this.DATA_KEY);
}
static getOrCreateInstance(element, config = {}) { static getOrCreateInstance(element, config = {}) {
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
} }
static get VERSION() { static get VERSION() {
return VERSION; return VERSION;
} }
static get DATA_KEY() { static get DATA_KEY() {
return `bs.${this.NAME}`; return `bs.${this.NAME}`;
} }
static get EVENT_KEY() { static get EVENT_KEY() {
return `.${this.DATA_KEY}`; return `.${this.DATA_KEY}`;
} }
static eventName(name) { static eventName(name) {
return `${name}${this.EVENT_KEY}`; return `${name}${this.EVENT_KEY}`;
} }
} }
return BaseComponent; return BaseComponent;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.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,OAAhB,CAAA;EAEA;EACA;EACA;;EAEA,MAAMC,aAAN,SAA4BC,uBAA5B,CAAmC;EACjCC,EAAAA,WAAW,CAACC,OAAD,EAAUC,MAAV,EAAkB;EAC3B,IAAA,KAAA,EAAA,CAAA;EAEAD,IAAAA,OAAO,GAAGE,gBAAU,CAACF,OAAD,CAApB,CAAA;;MACA,IAAI,CAACA,OAAL,EAAc;EACZ,MAAA,OAAA;EACD,KAAA;;MAED,IAAKG,CAAAA,QAAL,GAAgBH,OAAhB,CAAA;EACA,IAAA,IAAA,CAAKI,OAAL,GAAe,IAAA,CAAKC,UAAL,CAAgBJ,MAAhB,CAAf,CAAA;MAEAK,qBAAI,CAACC,GAAL,CAAS,IAAKJ,CAAAA,QAAd,EAAwB,IAAA,CAAKJ,WAAL,CAAiBS,QAAzC,EAAmD,IAAnD,CAAA,CAAA;EACD,GAbgC;;;EAgBjCC,EAAAA,OAAO,GAAG;MACRH,qBAAI,CAACI,MAAL,CAAY,IAAA,CAAKP,QAAjB,EAA2B,IAAA,CAAKJ,WAAL,CAAiBS,QAA5C,CAAA,CAAA;MACAG,6BAAY,CAACC,GAAb,CAAiB,IAAA,CAAKT,QAAtB,EAAgC,IAAA,CAAKJ,WAAL,CAAiBc,SAAjD,CAAA,CAAA;;MAEA,KAAK,MAAMC,YAAX,IAA2BC,MAAM,CAACC,mBAAP,CAA2B,IAA3B,CAA3B,EAA6D;QAC3D,IAAKF,CAAAA,YAAL,IAAqB,IAArB,CAAA;EACD,KAAA;EACF,GAAA;;IAEDG,cAAc,CAACC,QAAD,EAAWlB,OAAX,EAAoBmB,UAAU,GAAG,IAAjC,EAAuC;EACnDC,IAAAA,4BAAsB,CAACF,QAAD,EAAWlB,OAAX,EAAoBmB,UAApB,CAAtB,CAAA;EACD,GAAA;;IAEDd,UAAU,CAACJ,MAAD,EAAS;MACjBA,MAAM,GAAG,KAAKoB,eAAL,CAAqBpB,MAArB,EAA6B,IAAA,CAAKE,QAAlC,CAAT,CAAA;EACAF,IAAAA,MAAM,GAAG,IAAA,CAAKqB,iBAAL,CAAuBrB,MAAvB,CAAT,CAAA;;MACA,IAAKsB,CAAAA,gBAAL,CAAsBtB,MAAtB,CAAA,CAAA;;EACA,IAAA,OAAOA,MAAP,CAAA;EACD,GAlCgC;;;IAqCf,OAAXuB,WAAW,CAACxB,OAAD,EAAU;MAC1B,OAAOM,qBAAI,CAACmB,GAAL,CAASvB,gBAAU,CAACF,OAAD,CAAnB,EAA8B,IAAKQ,CAAAA,QAAnC,CAAP,CAAA;EACD,GAAA;;EAEyB,EAAA,OAAnBkB,mBAAmB,CAAC1B,OAAD,EAAUC,MAAM,GAAG,EAAnB,EAAuB;EAC/C,IAAA,OAAO,KAAKuB,WAAL,CAAiBxB,OAAjB,CAA6B,IAAA,IAAI,IAAJ,CAASA,OAAT,EAAkB,OAAOC,MAAP,KAAkB,QAAlB,GAA6BA,MAA7B,GAAsC,IAAxD,CAApC,CAAA;EACD,GAAA;;EAEiB,EAAA,WAAPL,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAP,CAAA;EACD,GAAA;;EAEkB,EAAA,WAARY,QAAQ,GAAG;MACpB,OAAQ,CAAA,GAAA,EAAK,IAAKmB,CAAAA,IAAK,CAAvB,CAAA,CAAA;EACD,GAAA;;EAEmB,EAAA,WAATd,SAAS,GAAG;MACrB,OAAQ,CAAA,CAAA,EAAG,IAAKL,CAAAA,QAAS,CAAzB,CAAA,CAAA;EACD,GAAA;;IAEe,OAAToB,SAAS,CAACC,IAAD,EAAO;EACrB,IAAA,OAAQ,CAAEA,EAAAA,IAAK,CAAE,EAAA,IAAA,CAAKhB,SAAU,CAAhC,CAAA,CAAA;EACD,GAAA;;EA3DgC;;;;;;;;"} {"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): 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 { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\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,cAAc,CAAA;;EAE9B;EACA;EACA;;EAEA,MAAMC,aAAa,SAASC,MAAM,CAAC;EACjCC,EAAAA,WAAW,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,OAAO,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,cAAc,CAACC,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,GAAG,IAAI,EAAE;EACnDC,IAAAA,+BAAsB,CAACF,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,CAAC,CAAA;EACvD,GAAA;IAEAd,UAAU,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,WAAW,CAACxB,OAAO,EAAE;EAC1B,IAAA,OAAOM,IAAI,CAACmB,GAAG,CAACvB,mBAAU,CAACF,OAAO,CAAC,EAAE,IAAI,CAACQ,QAAQ,CAAC,CAAA;EACrD,GAAA;IAEA,OAAOkB,mBAAmB,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;EAEA,EAAA,WAAWL,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;EAEA,EAAA,WAAWY,QAAQ,GAAG;EACpB,IAAA,OAAQ,CAAK,GAAA,EAAA,IAAI,CAACmB,IAAK,CAAC,CAAA,CAAA;EAC1B,GAAA;EAEA,EAAA,WAAWd,SAAS,GAAG;EACrB,IAAA,OAAQ,CAAG,CAAA,EAAA,IAAI,CAACL,QAAS,CAAC,CAAA,CAAA;EAC5B,GAAA;IAEA,OAAOoB,SAAS,CAACC,IAAI,EAAE;EACrB,IAAA,OAAQ,GAAEA,IAAK,CAAA,EAAE,IAAI,CAAChB,SAAU,CAAC,CAAA,CAAA;EACnC,GAAA;EACF;;;;;;;;"}
+15 -19
View File
@@ -1,25 +1,21 @@
/*! /*!
* Bootstrap button.js v5.2.3 (https://getbootstrap.com/) * Bootstrap button.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.Index, global.EventHandler, global.BaseComponent)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.Index, global.EventHandler, global.BaseComponent));
})(this, (function (index, EventHandler, BaseComponent) { 'use strict'; })(this, (function (index_js, EventHandler, BaseComponent) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): button.js * Bootstrap (v5.3.0-alpha1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -31,50 +27,50 @@
const CLASS_NAME_ACTIVE = 'active'; const CLASS_NAME_ACTIVE = 'active';
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]'; const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
/** /**
* Class definition * Class definition
*/ */
class Button extends BaseComponent__default.default { class Button extends BaseComponent {
// Getters // Getters
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
toggle() { toggle() {
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE)); this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Button.getOrCreateInstance(this); const data = Button.getOrCreateInstance(this);
if (config === 'toggle') { if (config === 'toggle') {
data[config](); data[config]();
} }
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
event.preventDefault(); event.preventDefault();
const button = event.target.closest(SELECTOR_DATA_TOGGLE); const button = event.target.closest(SELECTOR_DATA_TOGGLE);
const data = Button.getOrCreateInstance(button); const data = Button.getOrCreateInstance(button);
data.toggle(); data.toggle();
}); });
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Button); index_js.defineJQueryPlugin(Button);
return Button; return Button;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","jQueryInterface","config","each","data","getOrCreateInstance","EventHandler","on","document","event","preventDefault","button","target","closest","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,QAAb,CAAA;EACA,MAAMC,QAAQ,GAAG,WAAjB,CAAA;EACA,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAA/B,CAAA,CAAA;EACA,MAAME,YAAY,GAAG,WAArB,CAAA;EAEA,MAAMC,iBAAiB,GAAG,QAA1B,CAAA;EACA,MAAMC,oBAAoB,GAAG,2BAA7B,CAAA;EACA,MAAMC,oBAAoB,GAAI,CAAA,KAAA,EAAOJ,SAAU,CAAA,EAAEC,YAAa,CAA9D,CAAA,CAAA;EAEA;EACA;EACA;;EAEA,MAAMI,MAAN,SAAqBC,8BAArB,CAAmC;EACjC;EACe,EAAA,WAAJR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAJgC;;;EAOjCS,EAAAA,MAAM,GAAG;EACP;EACA,IAAA,IAAA,CAAKC,QAAL,CAAcC,YAAd,CAA2B,cAA3B,EAA2C,IAAA,CAAKD,QAAL,CAAcE,SAAd,CAAwBH,MAAxB,CAA+BL,iBAA/B,CAA3C,CAAA,CAAA;EACD,GAVgC;;;IAaX,OAAfS,eAAe,CAACC,MAAD,EAAS;MAC7B,OAAO,IAAA,CAAKC,IAAL,CAAU,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGT,MAAM,CAACU,mBAAP,CAA2B,IAA3B,CAAb,CAAA;;QAEA,IAAIH,MAAM,KAAK,QAAf,EAAyB;UACvBE,IAAI,CAACF,MAAD,CAAJ,EAAA,CAAA;EACD,OAAA;EACF,KANM,CAAP,CAAA;EAOD,GAAA;;EArBgC,CAAA;EAwBnC;EACA;EACA;;;AAEAI,+BAAY,CAACC,EAAb,CAAgBC,QAAhB,EAA0Bd,oBAA1B,EAAgDD,oBAAhD,EAAsEgB,KAAK,IAAI;EAC7EA,EAAAA,KAAK,CAACC,cAAN,EAAA,CAAA;IAEA,MAAMC,MAAM,GAAGF,KAAK,CAACG,MAAN,CAAaC,OAAb,CAAqBpB,oBAArB,CAAf,CAAA;EACA,EAAA,MAAMW,IAAI,GAAGT,MAAM,CAACU,mBAAP,CAA2BM,MAA3B,CAAb,CAAA;EAEAP,EAAAA,IAAI,CAACP,MAAL,EAAA,CAAA;EACD,CAPD,CAAA,CAAA;EASA;EACA;EACA;;AAEAiB,0BAAkB,CAACnB,MAAD,CAAlB;;;;;;;;"} {"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","jQueryInterface","config","each","data","getOrCreateInstance","EventHandler","on","document","event","preventDefault","button","target","closest","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAMA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,QAAQ,CAAA;EACrB,MAAMC,QAAQ,GAAG,WAAW,CAAA;EAC5B,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAAC,CAAA,CAAA;EAChC,MAAME,YAAY,GAAG,WAAW,CAAA;EAEhC,MAAMC,iBAAiB,GAAG,QAAQ,CAAA;EAClC,MAAMC,oBAAoB,GAAG,2BAA2B,CAAA;EACxD,MAAMC,oBAAoB,GAAI,CAAA,KAAA,EAAOJ,SAAU,CAAA,EAAEC,YAAa,CAAC,CAAA,CAAA;;EAE/D;EACA;EACA;;EAEA,MAAMI,MAAM,SAASC,aAAa,CAAC;EACjC;EACA,EAAA,WAAWR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACAS,EAAAA,MAAM,GAAG;EACP;EACA,IAAA,IAAI,CAACC,QAAQ,CAACC,YAAY,CAAC,cAAc,EAAE,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACH,MAAM,CAACL,iBAAiB,CAAC,CAAC,CAAA;EAC/F,GAAA;;EAEA;IACA,OAAOS,eAAe,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGT,MAAM,CAACU,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAIH,MAAM,KAAK,QAAQ,EAAE;UACvBE,IAAI,CAACF,MAAM,CAAC,EAAE,CAAA;EAChB,OAAA;EACF,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;EAEAI,YAAY,CAACC,EAAE,CAACC,QAAQ,EAAEd,oBAAoB,EAAED,oBAAoB,EAAEgB,KAAK,IAAI;IAC7EA,KAAK,CAACC,cAAc,EAAE,CAAA;IAEtB,MAAMC,MAAM,GAAGF,KAAK,CAACG,MAAM,CAACC,OAAO,CAACpB,oBAAoB,CAAC,CAAA;EACzD,EAAA,MAAMW,IAAI,GAAGT,MAAM,CAACU,mBAAmB,CAACM,MAAM,CAAC,CAAA;IAE/CP,IAAI,CAACP,MAAM,EAAE,CAAA;EACf,CAAC,CAAC,CAAA;;EAEF;EACA;EACA;;AAEAiB,6BAAkB,CAACnB,MAAM,CAAC;;;;;;;;"}
+47 -131
View File
@@ -1,28 +1,21 @@
/*! /*!
* Bootstrap carousel.js v5.2.3 (https://getbootstrap.com/) * Bootstrap carousel.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/manipulator'), require('./dom/selector-engine'), require('./util/swipe'), require('./base-component')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./util/swipe.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './util/swipe', './base-component'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './util/swipe', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Swipe, global.BaseComponent)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Swipe, global.BaseComponent));
})(this, (function (index, EventHandler, Manipulator, SelectorEngine, Swipe, BaseComponent) { 'use strict'; })(this, (function (index_js, EventHandler, Manipulator, SelectorEngine, Swipe, BaseComponent) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const Swipe__default = /*#__PURE__*/_interopDefaultLegacy(Swipe);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): carousel.js * Bootstrap (v5.3.0-alpha1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -82,11 +75,12 @@
touch: 'boolean', touch: 'boolean',
wrap: 'boolean' wrap: 'boolean'
}; };
/** /**
* Class definition * Class definition
*/ */
class Carousel extends BaseComponent__default.default { class Carousel extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); super(element, config);
this._interval = null; this._interval = null;
@@ -94,136 +88,110 @@
this._isSliding = false; this._isSliding = false;
this.touchTimeout = null; this.touchTimeout = null;
this._swipeHelper = null; this._swipeHelper = null;
this._indicatorsElement = SelectorEngine__default.default.findOne(SELECTOR_INDICATORS, this._element); this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
this._addEventListeners(); this._addEventListeners();
if (this._config.ride === CLASS_NAME_CAROUSEL) { if (this._config.ride === CLASS_NAME_CAROUSEL) {
this.cycle(); this.cycle();
} }
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
next() { next() {
this._slide(ORDER_NEXT); this._slide(ORDER_NEXT);
} }
nextWhenVisible() { nextWhenVisible() {
// FIXME TODO use `document.visibilityState` // FIXME TODO use `document.visibilityState`
// Don't call next when the page isn't visible // Don't call next when the page isn't visible
// or the carousel or its parent isn't visible // or the carousel or its parent isn't visible
if (!document.hidden && index.isVisible(this._element)) { if (!document.hidden && index_js.isVisible(this._element)) {
this.next(); this.next();
} }
} }
prev() { prev() {
this._slide(ORDER_PREV); this._slide(ORDER_PREV);
} }
pause() { pause() {
if (this._isSliding) { if (this._isSliding) {
index.triggerTransitionEnd(this._element); index_js.triggerTransitionEnd(this._element);
} }
this._clearInterval(); this._clearInterval();
} }
cycle() { cycle() {
this._clearInterval(); this._clearInterval();
this._updateInterval(); this._updateInterval();
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
} }
_maybeEnableCycle() { _maybeEnableCycle() {
if (!this._config.ride) { if (!this._config.ride) {
return; return;
} }
if (this._isSliding) { if (this._isSliding) {
EventHandler__default.default.one(this._element, EVENT_SLID, () => this.cycle()); EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
return; return;
} }
this.cycle(); this.cycle();
} }
to(index) { to(index) {
const items = this._getItems(); const items = this._getItems();
if (index > items.length - 1 || index < 0) { if (index > items.length - 1 || index < 0) {
return; return;
} }
if (this._isSliding) { if (this._isSliding) {
EventHandler__default.default.one(this._element, EVENT_SLID, () => this.to(index)); EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
return; return;
} }
const activeIndex = this._getItemIndex(this._getActive()); const activeIndex = this._getItemIndex(this._getActive());
if (activeIndex === index) { if (activeIndex === index) {
return; return;
} }
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
this._slide(order, items[index]); this._slide(order, items[index]);
} }
dispose() { dispose() {
if (this._swipeHelper) { if (this._swipeHelper) {
this._swipeHelper.dispose(); this._swipeHelper.dispose();
} }
super.dispose(); super.dispose();
} // Private }
// Private
_configAfterMerge(config) { _configAfterMerge(config) {
config.defaultInterval = config.interval; config.defaultInterval = config.interval;
return config; return config;
} }
_addEventListeners() { _addEventListeners() {
if (this._config.keyboard) { if (this._config.keyboard) {
EventHandler__default.default.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
} }
if (this._config.pause === 'hover') { if (this._config.pause === 'hover') {
EventHandler__default.default.on(this._element, EVENT_MOUSEENTER, () => this.pause()); EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());
EventHandler__default.default.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle()); EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());
} }
if (this._config.touch && Swipe.isSupported()) {
if (this._config.touch && Swipe__default.default.isSupported()) {
this._addTouchEventListeners(); this._addTouchEventListeners();
} }
} }
_addTouchEventListeners() { _addTouchEventListeners() {
for (const img of SelectorEngine__default.default.find(SELECTOR_ITEM_IMG, this._element)) { for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
EventHandler__default.default.on(img, EVENT_DRAG_START, event => event.preventDefault()); EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
} }
const endCallBack = () => { const endCallBack = () => {
if (this._config.pause !== 'hover') { if (this._config.pause !== 'hover') {
return; return;
} // If it's a touch-enabled device, mouseenter/leave are fired as }
// If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel // part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it; // would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel // here, we listen for touchend, explicitly pause the carousel
@@ -231,120 +199,92 @@
// is NOT fired) and after a timeout (to allow for mouse compatibility // is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling // events to fire) we explicitly restart cycling
this.pause(); this.pause();
if (this.touchTimeout) { if (this.touchTimeout) {
clearTimeout(this.touchTimeout); clearTimeout(this.touchTimeout);
} }
this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
}; };
const swipeConfig = { const swipeConfig = {
leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
endCallback: endCallBack endCallback: endCallBack
}; };
this._swipeHelper = new Swipe__default.default(this._element, swipeConfig); this._swipeHelper = new Swipe(this._element, swipeConfig);
} }
_keydown(event) { _keydown(event) {
if (/input|textarea/i.test(event.target.tagName)) { if (/input|textarea/i.test(event.target.tagName)) {
return; return;
} }
const direction = KEY_TO_DIRECTION[event.key]; const direction = KEY_TO_DIRECTION[event.key];
if (direction) { if (direction) {
event.preventDefault(); event.preventDefault();
this._slide(this._directionToOrder(direction)); this._slide(this._directionToOrder(direction));
} }
} }
_getItemIndex(element) { _getItemIndex(element) {
return this._getItems().indexOf(element); return this._getItems().indexOf(element);
} }
_setActiveIndicatorElement(index) { _setActiveIndicatorElement(index) {
if (!this._indicatorsElement) { if (!this._indicatorsElement) {
return; return;
} }
const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
const activeIndicator = SelectorEngine__default.default.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
activeIndicator.classList.remove(CLASS_NAME_ACTIVE); activeIndicator.classList.remove(CLASS_NAME_ACTIVE);
activeIndicator.removeAttribute('aria-current'); activeIndicator.removeAttribute('aria-current');
const newActiveIndicator = SelectorEngine__default.default.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
if (newActiveIndicator) { if (newActiveIndicator) {
newActiveIndicator.classList.add(CLASS_NAME_ACTIVE); newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);
newActiveIndicator.setAttribute('aria-current', 'true'); newActiveIndicator.setAttribute('aria-current', 'true');
} }
} }
_updateInterval() { _updateInterval() {
const element = this._activeElement || this._getActive(); const element = this._activeElement || this._getActive();
if (!element) { if (!element) {
return; return;
} }
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
this._config.interval = elementInterval || this._config.defaultInterval; this._config.interval = elementInterval || this._config.defaultInterval;
} }
_slide(order, element = null) { _slide(order, element = null) {
if (this._isSliding) { if (this._isSliding) {
return; return;
} }
const activeElement = this._getActive(); const activeElement = this._getActive();
const isNext = order === ORDER_NEXT; const isNext = order === ORDER_NEXT;
const nextElement = element || index.getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); const nextElement = element || index_js.getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
if (nextElement === activeElement) { if (nextElement === activeElement) {
return; return;
} }
const nextElementIndex = this._getItemIndex(nextElement); const nextElementIndex = this._getItemIndex(nextElement);
const triggerEvent = eventName => { const triggerEvent = eventName => {
return EventHandler__default.default.trigger(this._element, eventName, { return EventHandler.trigger(this._element, eventName, {
relatedTarget: nextElement, relatedTarget: nextElement,
direction: this._orderToDirection(order), direction: this._orderToDirection(order),
from: this._getItemIndex(activeElement), from: this._getItemIndex(activeElement),
to: nextElementIndex to: nextElementIndex
}); });
}; };
const slideEvent = triggerEvent(EVENT_SLIDE); const slideEvent = triggerEvent(EVENT_SLIDE);
if (slideEvent.defaultPrevented) { if (slideEvent.defaultPrevented) {
return; return;
} }
if (!activeElement || !nextElement) { if (!activeElement || !nextElement) {
// Some weirdness is happening, so we bail // Some weirdness is happening, so we bail
// todo: change tests that use empty divs to avoid this check // todo: change tests that use empty divs to avoid this check
return; return;
} }
const isCycling = Boolean(this._interval); const isCycling = Boolean(this._interval);
this.pause(); this.pause();
this._isSliding = true; this._isSliding = true;
this._setActiveIndicatorElement(nextElementIndex); this._setActiveIndicatorElement(nextElementIndex);
this._activeElement = nextElement; this._activeElement = nextElement;
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
nextElement.classList.add(orderClassName); nextElement.classList.add(orderClassName);
index.reflow(nextElement); index_js.reflow(nextElement);
activeElement.classList.add(directionalClassName); activeElement.classList.add(directionalClassName);
nextElement.classList.add(directionalClassName); nextElement.classList.add(directionalClassName);
const completeCallBack = () => { const completeCallBack = () => {
nextElement.classList.remove(directionalClassName, orderClassName); nextElement.classList.remove(directionalClassName, orderClassName);
nextElement.classList.add(CLASS_NAME_ACTIVE); nextElement.classList.add(CLASS_NAME_ACTIVE);
@@ -352,118 +292,94 @@
this._isSliding = false; this._isSliding = false;
triggerEvent(EVENT_SLID); triggerEvent(EVENT_SLID);
}; };
this._queueCallback(completeCallBack, activeElement, this._isAnimated()); this._queueCallback(completeCallBack, activeElement, this._isAnimated());
if (isCycling) { if (isCycling) {
this.cycle(); this.cycle();
} }
} }
_isAnimated() { _isAnimated() {
return this._element.classList.contains(CLASS_NAME_SLIDE); return this._element.classList.contains(CLASS_NAME_SLIDE);
} }
_getActive() { _getActive() {
return SelectorEngine__default.default.findOne(SELECTOR_ACTIVE_ITEM, this._element); return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
} }
_getItems() { _getItems() {
return SelectorEngine__default.default.find(SELECTOR_ITEM, this._element); return SelectorEngine.find(SELECTOR_ITEM, this._element);
} }
_clearInterval() { _clearInterval() {
if (this._interval) { if (this._interval) {
clearInterval(this._interval); clearInterval(this._interval);
this._interval = null; this._interval = null;
} }
} }
_directionToOrder(direction) { _directionToOrder(direction) {
if (index.isRTL()) { if (index_js.isRTL()) {
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
} }
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
} }
_orderToDirection(order) { _orderToDirection(order) {
if (index.isRTL()) { if (index_js.isRTL()) {
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
} }
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Carousel.getOrCreateInstance(this, config); const data = Carousel.getOrCreateInstance(this, config);
if (typeof config === 'number') { if (typeof config === 'number') {
data.to(config); data.to(config);
return; return;
} }
if (typeof config === 'string') { if (typeof config === 'string') {
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
} }
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) { const target = SelectorEngine.getElementFromSelector(this);
const target = index.getElementFromSelector(this);
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
return; return;
} }
event.preventDefault(); event.preventDefault();
const carousel = Carousel.getOrCreateInstance(target); const carousel = Carousel.getOrCreateInstance(target);
const slideIndex = this.getAttribute('data-bs-slide-to'); const slideIndex = this.getAttribute('data-bs-slide-to');
if (slideIndex) { if (slideIndex) {
carousel.to(slideIndex); carousel.to(slideIndex);
carousel._maybeEnableCycle(); carousel._maybeEnableCycle();
return; return;
} }
if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
if (Manipulator__default.default.getDataAttribute(this, 'slide') === 'next') {
carousel.next(); carousel.next();
carousel._maybeEnableCycle(); carousel._maybeEnableCycle();
return; return;
} }
carousel.prev(); carousel.prev();
carousel._maybeEnableCycle(); carousel._maybeEnableCycle();
}); });
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => { EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
const carousels = SelectorEngine__default.default.find(SELECTOR_DATA_RIDE); const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
for (const carousel of carousels) { for (const carousel of carousels) {
Carousel.getOrCreateInstance(carousel); Carousel.getOrCreateInstance(carousel);
} }
}); });
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Carousel); index_js.defineJQueryPlugin(Carousel);
return Carousel; return Carousel;
+1 -1
View File
File diff suppressed because one or more lines are too long
+39 -102
View File
@@ -1,26 +1,21 @@
/*! /*!
* Bootstrap collapse.js v5.2.3 (https://getbootstrap.com/) * Bootstrap collapse.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict'; })(this, (function (index_js, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): collapse.js * Bootstrap (v5.3.0-alpha1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -52,51 +47,45 @@
parent: '(null|element)', parent: '(null|element)',
toggle: 'boolean' toggle: 'boolean'
}; };
/** /**
* Class definition * Class definition
*/ */
class Collapse extends BaseComponent__default.default { class Collapse extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); super(element, config);
this._isTransitioning = false; this._isTransitioning = false;
this._triggerArray = []; this._triggerArray = [];
const toggleList = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE); const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
for (const elem of toggleList) { for (const elem of toggleList) {
const selector = index.getSelectorFromElement(elem); const selector = SelectorEngine.getSelectorFromElement(elem);
const filterElement = SelectorEngine__default.default.find(selector).filter(foundElement => foundElement === this._element); const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
if (selector !== null && filterElement.length) { if (selector !== null && filterElement.length) {
this._triggerArray.push(elem); this._triggerArray.push(elem);
} }
} }
this._initializeChildren(); this._initializeChildren();
if (!this._config.parent) { if (!this._config.parent) {
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
} }
if (this._config.toggle) { if (this._config.toggle) {
this.toggle(); this.toggle();
} }
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
toggle() { toggle() {
if (this._isShown()) { if (this._isShown()) {
this.hide(); this.hide();
@@ -104,206 +93,154 @@
this.show(); this.show();
} }
} }
show() { show() {
if (this._isTransitioning || this._isShown()) { if (this._isTransitioning || this._isShown()) {
return; return;
} }
let activeChildren = [];
let activeChildren = []; // find active children // find active children
if (this._config.parent) { if (this._config.parent) {
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
toggle: false toggle: false
})); }));
} }
if (activeChildren.length && activeChildren[0]._isTransitioning) { if (activeChildren.length && activeChildren[0]._isTransitioning) {
return; return;
} }
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
const startEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
if (startEvent.defaultPrevented) { if (startEvent.defaultPrevented) {
return; return;
} }
for (const activeInstance of activeChildren) { for (const activeInstance of activeChildren) {
activeInstance.hide(); activeInstance.hide();
} }
const dimension = this._getDimension(); const dimension = this._getDimension();
this._element.classList.remove(CLASS_NAME_COLLAPSE); this._element.classList.remove(CLASS_NAME_COLLAPSE);
this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSING);
this._element.style[dimension] = 0; this._element.style[dimension] = 0;
this._addAriaAndCollapsedClass(this._triggerArray, true); this._addAriaAndCollapsedClass(this._triggerArray, true);
this._isTransitioning = true; this._isTransitioning = true;
const complete = () => { const complete = () => {
this._isTransitioning = false; this._isTransitioning = false;
this._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.remove(CLASS_NAME_COLLAPSING);
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
this._element.style[dimension] = ''; this._element.style[dimension] = '';
EventHandler__default.default.trigger(this._element, EVENT_SHOWN); EventHandler.trigger(this._element, EVENT_SHOWN);
}; };
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
const scrollSize = `scroll${capitalizedDimension}`; const scrollSize = `scroll${capitalizedDimension}`;
this._queueCallback(complete, this._element, true); this._queueCallback(complete, this._element, true);
this._element.style[dimension] = `${this._element[scrollSize]}px`; this._element.style[dimension] = `${this._element[scrollSize]}px`;
} }
hide() { hide() {
if (this._isTransitioning || !this._isShown()) { if (this._isTransitioning || !this._isShown()) {
return; return;
} }
const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
const startEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
if (startEvent.defaultPrevented) { if (startEvent.defaultPrevented) {
return; return;
} }
const dimension = this._getDimension(); const dimension = this._getDimension();
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
index.reflow(this._element); index_js.reflow(this._element);
this._element.classList.add(CLASS_NAME_COLLAPSING); this._element.classList.add(CLASS_NAME_COLLAPSING);
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
for (const trigger of this._triggerArray) { for (const trigger of this._triggerArray) {
const element = index.getElementFromSelector(trigger); const element = SelectorEngine.getElementFromSelector(trigger);
if (element && !this._isShown(element)) { if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false); this._addAriaAndCollapsedClass([trigger], false);
} }
} }
this._isTransitioning = true; this._isTransitioning = true;
const complete = () => { const complete = () => {
this._isTransitioning = false; this._isTransitioning = false;
this._element.classList.remove(CLASS_NAME_COLLAPSING); this._element.classList.remove(CLASS_NAME_COLLAPSING);
this._element.classList.add(CLASS_NAME_COLLAPSE); this._element.classList.add(CLASS_NAME_COLLAPSE);
EventHandler.trigger(this._element, EVENT_HIDDEN);
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
}; };
this._element.style[dimension] = ''; this._element.style[dimension] = '';
this._queueCallback(complete, this._element, true); this._queueCallback(complete, this._element, true);
} }
_isShown(element = this._element) { _isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW); return element.classList.contains(CLASS_NAME_SHOW);
} // Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = index.getElement(config.parent);
return config;
} }
// Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
config.parent = index_js.getElement(config.parent);
return config;
}
_getDimension() { _getDimension() {
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
} }
_initializeChildren() { _initializeChildren() {
if (!this._config.parent) { if (!this._config.parent) {
return; return;
} }
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE); const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
for (const element of children) { for (const element of children) {
const selected = index.getElementFromSelector(element); const selected = SelectorEngine.getElementFromSelector(element);
if (selected) { if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected)); this._addAriaAndCollapsedClass([element], this._isShown(selected));
} }
} }
} }
_getFirstLevelChildren(selector) { _getFirstLevelChildren(selector) {
const children = SelectorEngine__default.default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
// remove children if greater depth
return SelectorEngine__default.default.find(selector, this._config.parent).filter(element => !children.includes(element)); return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
} }
_addAriaAndCollapsedClass(triggerArray, isOpen) { _addAriaAndCollapsedClass(triggerArray, isOpen) {
if (!triggerArray.length) { if (!triggerArray.length) {
return; return;
} }
for (const element of triggerArray) { for (const element of triggerArray) {
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
element.setAttribute('aria-expanded', isOpen); element.setAttribute('aria-expanded', isOpen);
} }
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
const _config = {}; const _config = {};
if (typeof config === 'string' && /show|hide/.test(config)) { if (typeof config === 'string' && /show|hide/.test(config)) {
_config.toggle = false; _config.toggle = false;
} }
return this.each(function () { return this.each(function () {
const data = Collapse.getOrCreateInstance(this, _config); const data = Collapse.getOrCreateInstance(this, _config);
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
} }
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
EventHandler__default.default.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 // 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') { if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
event.preventDefault(); event.preventDefault();
} }
for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
const selector = index.getSelectorFromElement(this);
const selectorElements = SelectorEngine__default.default.find(selector);
for (const element of selectorElements) {
Collapse.getOrCreateInstance(element, { Collapse.getOrCreateInstance(element, {
toggle: false toggle: false
}).toggle(); }).toggle();
} }
}); });
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Collapse); index_js.defineJQueryPlugin(Collapse);
return Collapse; return Collapse;
+1 -1
View File
File diff suppressed because one or more lines are too long
+7 -11
View File
@@ -1,5 +1,5 @@
/*! /*!
* Bootstrap data.js v5.2.3 (https://getbootstrap.com/) * Bootstrap data.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -11,7 +11,7 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): dom/data.js * Bootstrap (v5.3.0-alpha1): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
@@ -19,46 +19,42 @@
/** /**
* Constants * Constants
*/ */
const elementMap = new Map(); const elementMap = new Map();
const data = { const data = {
set(element, key, instance) { set(element, key, instance) {
if (!elementMap.has(element)) { if (!elementMap.has(element)) {
elementMap.set(element, new Map()); elementMap.set(element, new Map());
} }
const instanceMap = elementMap.get(element);
const instanceMap = elementMap.get(element); // make it clear we only want one instance per element // make it clear we only want one instance per element
// can be removed later when multiple key/instances are fine to be used // can be removed later when multiple key/instances are fine to be used
if (!instanceMap.has(key) && instanceMap.size !== 0) { if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
return; return;
} }
instanceMap.set(key, instance); instanceMap.set(key, instance);
}, },
get(element, key) { get(element, key) {
if (elementMap.has(element)) { if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null; return elementMap.get(element).get(key) || null;
} }
return null; return null;
}, },
remove(element, key) { remove(element, key) {
if (!elementMap.has(element)) { if (!elementMap.has(element)) {
return; return;
} }
const instanceMap = elementMap.get(element); const instanceMap = elementMap.get(element);
instanceMap.delete(key); // free up element references if there are no instances left for an element instanceMap.delete(key);
// free up element references if there are no instances left for an element
if (instanceMap.size === 0) { if (instanceMap.size === 0) {
elementMap.delete(element); elementMap.delete(element);
} }
} }
}; };
return data; return data;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n"],"names":["elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EAEA,MAAMA,UAAU,GAAG,IAAIC,GAAJ,EAAnB,CAAA;AAEA,eAAe;EACbC,EAAAA,GAAG,CAACC,OAAD,EAAUC,GAAV,EAAeC,QAAf,EAAyB;EAC1B,IAAA,IAAI,CAACL,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5BH,MAAAA,UAAU,CAACE,GAAX,CAAeC,OAAf,EAAwB,IAAIF,GAAJ,EAAxB,CAAA,CAAA;EACD,KAAA;;MAED,MAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB,CAL0B;EAQ1B;;EACA,IAAA,IAAI,CAACI,WAAW,CAACD,GAAZ,CAAgBF,GAAhB,CAAD,IAAyBG,WAAW,CAACE,IAAZ,KAAqB,CAAlD,EAAqD;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAR,CAAe,CAAA,4EAAA,EAA8EC,KAAK,CAACC,IAAN,CAAWN,WAAW,CAACO,IAAZ,EAAX,CAA+B,CAAA,CAA/B,CAAkC,CAA/H,CAAA,CAAA,CAAA,CAAA;EACA,MAAA,OAAA;EACD,KAAA;;EAEDP,IAAAA,WAAW,CAACL,GAAZ,CAAgBE,GAAhB,EAAqBC,QAArB,CAAA,CAAA;KAhBW;;EAmBbG,EAAAA,GAAG,CAACL,OAAD,EAAUC,GAAV,EAAe;EAChB,IAAA,IAAIJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAJ,EAA6B;QAC3B,OAAOH,UAAU,CAACQ,GAAX,CAAeL,OAAf,EAAwBK,GAAxB,CAA4BJ,GAA5B,CAAA,IAAoC,IAA3C,CAAA;EACD,KAAA;;EAED,IAAA,OAAO,IAAP,CAAA;KAxBW;;EA2BbW,EAAAA,MAAM,CAACZ,OAAD,EAAUC,GAAV,EAAe;EACnB,IAAA,IAAI,CAACJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5B,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB,CAAA;EAEAI,IAAAA,WAAW,CAACS,MAAZ,CAAmBZ,GAAnB,EAPmB;;EAUnB,IAAA,IAAIG,WAAW,CAACE,IAAZ,KAAqB,CAAzB,EAA4B;QAC1BT,UAAU,CAACgB,MAAX,CAAkBb,OAAlB,CAAA,CAAA;EACD,KAAA;EACF,GAAA;;EAxCY,CAAf;;;;;;;;"} {"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n"],"names":["elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;;EAEA,MAAMA,UAAU,GAAG,IAAIC,GAAG,EAAE,CAAA;AAE5B,eAAe;EACbC,EAAAA,GAAG,CAACC,OAAO,EAAEC,GAAG,EAAEC,QAAQ,EAAE;EAC1B,IAAA,IAAI,CAACL,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;QAC5BH,UAAU,CAACE,GAAG,CAACC,OAAO,EAAE,IAAIF,GAAG,EAAE,CAAC,CAAA;EACpC,KAAA;EAEA,IAAA,MAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAAA;;EAE3C;EACA;EACA,IAAA,IAAI,CAACI,WAAW,CAACD,GAAG,CAACF,GAAG,CAAC,IAAIG,WAAW,CAACE,IAAI,KAAK,CAAC,EAAE;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAK,CAAE,CAA8EC,4EAAAA,EAAAA,KAAK,CAACC,IAAI,CAACN,WAAW,CAACO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,GAAE,CAAC,CAAA;EAClI,MAAA,OAAA;EACF,KAAA;EAEAP,IAAAA,WAAW,CAACL,GAAG,CAACE,GAAG,EAAEC,QAAQ,CAAC,CAAA;KAC/B;EAEDG,EAAAA,GAAG,CAACL,OAAO,EAAEC,GAAG,EAAE;EAChB,IAAA,IAAIJ,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;EAC3B,MAAA,OAAOH,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAACK,GAAG,CAACJ,GAAG,CAAC,IAAI,IAAI,CAAA;EACjD,KAAA;EAEA,IAAA,OAAO,IAAI,CAAA;KACZ;EAEDW,EAAAA,MAAM,CAACZ,OAAO,EAAEC,GAAG,EAAE;EACnB,IAAA,IAAI,CAACJ,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;EAC5B,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAAA;EAE3CI,IAAAA,WAAW,CAACS,MAAM,CAACZ,GAAG,CAAC,CAAA;;EAEvB;EACA,IAAA,IAAIG,WAAW,CAACE,IAAI,KAAK,CAAC,EAAE;EAC1BT,MAAAA,UAAU,CAACgB,MAAM,CAACb,OAAO,CAAC,CAAA;EAC5B,KAAA;EACF,GAAA;EACF,CAAC;;;;;;;;"}
+15 -62
View File
@@ -1,20 +1,21 @@
/*! /*!
* Bootstrap event-handler.js v5.2.3 (https://getbootstrap.com/) * Bootstrap event-handler.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
typeof define === 'function' && define.amd ? define(['../util/index'], factory) : typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
})(this, (function (index) { 'use strict'; })(this, (function (index_js) { 'use strict';
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): dom/event-handler.js * Bootstrap (v5.3.0-alpha1): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -23,13 +24,13 @@
const stripNameRegex = /\..*/; const stripNameRegex = /\..*/;
const stripUidRegex = /::\d+$/; const stripUidRegex = /::\d+$/;
const eventRegistry = {}; // Events storage const eventRegistry = {}; // Events storage
let uidEvent = 1; let uidEvent = 1;
const customEvents = { const customEvents = {
mouseenter: 'mouseover', mouseenter: 'mouseover',
mouseleave: 'mouseout' mouseleave: 'mouseout'
}; };
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
/** /**
* Private methods * Private methods
*/ */
@@ -37,32 +38,26 @@
function makeEventUid(element, uid) { function makeEventUid(element, uid) {
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
} }
function getElementEvents(element) { function getElementEvents(element) {
const uid = makeEventUid(element); const uid = makeEventUid(element);
element.uidEvent = uid; element.uidEvent = uid;
eventRegistry[uid] = eventRegistry[uid] || {}; eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid]; return eventRegistry[uid];
} }
function bootstrapHandler(element, fn) { function bootstrapHandler(element, fn) {
return function handler(event) { return function handler(event) {
hydrateObj(event, { hydrateObj(event, {
delegateTarget: element delegateTarget: element
}); });
if (handler.oneOff) { if (handler.oneOff) {
EventHandler.off(element, event.type, fn); EventHandler.off(element, event.type, fn);
} }
return fn.apply(element, [event]); return fn.apply(element, [event]);
}; };
} }
function bootstrapDelegationHandler(element, selector, fn) { function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) { return function handler(event) {
const domElements = element.querySelectorAll(selector); const domElements = element.querySelectorAll(selector);
for (let { for (let {
target target
} = event; target && target !== this; target = target.parentNode) { } = event; target && target !== this; target = target.parentNode) {
@@ -70,46 +65,38 @@
if (domElement !== target) { if (domElement !== target) {
continue; continue;
} }
hydrateObj(event, { hydrateObj(event, {
delegateTarget: target delegateTarget: target
}); });
if (handler.oneOff) { if (handler.oneOff) {
EventHandler.off(element, event.type, selector, fn); EventHandler.off(element, event.type, selector, fn);
} }
return fn.apply(target, [event]); return fn.apply(target, [event]);
} }
} }
}; };
} }
function findHandler(events, callable, delegationSelector = null) { function findHandler(events, callable, delegationSelector = null) {
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
} }
function normalizeParameters(originalTypeEvent, handler, delegationFunction) { function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check const isDelegated = typeof handler === 'string';
// todo: tooltip passes `false` instead of selector, so we need to check
const callable = isDelegated ? delegationFunction : handler || delegationFunction; const callable = isDelegated ? delegationFunction : handler || delegationFunction;
let typeEvent = getTypeEvent(originalTypeEvent); let typeEvent = getTypeEvent(originalTypeEvent);
if (!nativeEvents.has(typeEvent)) { if (!nativeEvents.has(typeEvent)) {
typeEvent = originalTypeEvent; typeEvent = originalTypeEvent;
} }
return [isDelegated, callable, typeEvent]; return [isDelegated, callable, typeEvent];
} }
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
if (typeof originalTypeEvent !== 'string' || !element) { if (typeof originalTypeEvent !== 'string' || !element) {
return; return;
} }
let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
// this prevents the handler from being dispatched the same way as mouseover or mouseout does // this prevents the handler from being dispatched the same way as mouseover or mouseout does
if (originalTypeEvent in customEvents) { if (originalTypeEvent in customEvents) {
const wrapFunction = fn => { const wrapFunction = fn => {
return function (event) { return function (event) {
@@ -118,19 +105,15 @@
} }
}; };
}; };
callable = wrapFunction(callable); callable = wrapFunction(callable);
} }
const events = getElementEvents(element); const events = getElementEvents(element);
const handlers = events[typeEvent] || (events[typeEvent] = {}); const handlers = events[typeEvent] || (events[typeEvent] = {});
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
if (previousFunction) { if (previousFunction) {
previousFunction.oneOff = previousFunction.oneOff && oneOff; previousFunction.oneOff = previousFunction.oneOff && oneOff;
return; return;
} }
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
fn.delegationSelector = isDelegated ? handler : null; fn.delegationSelector = isDelegated ? handler : null;
@@ -140,94 +123,74 @@
handlers[uid] = fn; handlers[uid] = fn;
element.addEventListener(typeEvent, fn, isDelegated); element.addEventListener(typeEvent, fn, isDelegated);
} }
function removeHandler(element, events, typeEvent, handler, delegationSelector) { function removeHandler(element, events, typeEvent, handler, delegationSelector) {
const fn = findHandler(events[typeEvent], handler, delegationSelector); const fn = findHandler(events[typeEvent], handler, delegationSelector);
if (!fn) { if (!fn) {
return; return;
} }
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
delete events[typeEvent][fn.uidEvent]; delete events[typeEvent][fn.uidEvent];
} }
function removeNamespacedHandlers(element, events, typeEvent, namespace) { function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {}; const storeElementEvent = events[typeEvent] || {};
for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
for (const handlerKey of Object.keys(storeElementEvent)) {
if (handlerKey.includes(namespace)) { if (handlerKey.includes(namespace)) {
const event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
} }
} }
} }
function getTypeEvent(event) { function getTypeEvent(event) {
// allow to get the native events from namespaced events ('click.bs.button' --> 'click') // allow to get the native events from namespaced events ('click.bs.button' --> 'click')
event = event.replace(stripNameRegex, ''); event = event.replace(stripNameRegex, '');
return customEvents[event] || event; return customEvents[event] || event;
} }
const EventHandler = { const EventHandler = {
on(element, event, handler, delegationFunction) { on(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, false); addHandler(element, event, handler, delegationFunction, false);
}, },
one(element, event, handler, delegationFunction) { one(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, true); addHandler(element, event, handler, delegationFunction, true);
}, },
off(element, originalTypeEvent, handler, delegationFunction) { off(element, originalTypeEvent, handler, delegationFunction) {
if (typeof originalTypeEvent !== 'string' || !element) { if (typeof originalTypeEvent !== 'string' || !element) {
return; return;
} }
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
const inNamespace = typeEvent !== originalTypeEvent; const inNamespace = typeEvent !== originalTypeEvent;
const events = getElementEvents(element); const events = getElementEvents(element);
const storeElementEvent = events[typeEvent] || {}; const storeElementEvent = events[typeEvent] || {};
const isNamespace = originalTypeEvent.startsWith('.'); const isNamespace = originalTypeEvent.startsWith('.');
if (typeof callable !== 'undefined') { if (typeof callable !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY. // Simplest case: handler is passed, remove that listener ONLY.
if (!Object.keys(storeElementEvent).length) { if (!Object.keys(storeElementEvent).length) {
return; return;
} }
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
return; return;
} }
if (isNamespace) { if (isNamespace) {
for (const elementEvent of Object.keys(events)) { for (const elementEvent of Object.keys(events)) {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
} }
} }
for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
for (const keyHandlers of Object.keys(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, ''); const handlerKey = keyHandlers.replace(stripUidRegex, '');
if (!inNamespace || originalTypeEvent.includes(handlerKey)) { if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
const event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
} }
} }
}, },
trigger(element, event, args) { trigger(element, event, args) {
if (typeof event !== 'string' || !element) { if (typeof event !== 'string' || !element) {
return null; return null;
} }
const $ = index_js.getjQuery();
const $ = index.getjQuery();
const typeEvent = getTypeEvent(event); const typeEvent = getTypeEvent(event);
const inNamespace = event !== typeEvent; const inNamespace = event !== typeEvent;
let jQueryEvent = null; let jQueryEvent = null;
let bubbles = true; let bubbles = true;
let nativeDispatch = true; let nativeDispatch = true;
let defaultPrevented = false; let defaultPrevented = false;
if (inNamespace && $) { if (inNamespace && $) {
jQueryEvent = $.Event(event, args); jQueryEvent = $.Event(event, args);
$(element).trigger(jQueryEvent); $(element).trigger(jQueryEvent);
@@ -235,46 +198,36 @@
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented(); defaultPrevented = jQueryEvent.isDefaultPrevented();
} }
let evt = new Event(event, { let evt = new Event(event, {
bubbles, bubbles,
cancelable: true cancelable: true
}); });
evt = hydrateObj(evt, args); evt = hydrateObj(evt, args);
if (defaultPrevented) { if (defaultPrevented) {
evt.preventDefault(); evt.preventDefault();
} }
if (nativeDispatch) { if (nativeDispatch) {
element.dispatchEvent(evt); element.dispatchEvent(evt);
} }
if (evt.defaultPrevented && jQueryEvent) { if (evt.defaultPrevented && jQueryEvent) {
jQueryEvent.preventDefault(); jQueryEvent.preventDefault();
} }
return evt; return evt;
} }
}; };
function hydrateObj(obj, meta = {}) {
function hydrateObj(obj, meta) { for (const [key, value] of Object.entries(meta)) {
for (const [key, value] of Object.entries(meta || {})) {
try { try {
obj[key] = value; obj[key] = value;
} catch (_unused) { } catch (_unused) {
Object.defineProperty(obj, key, { Object.defineProperty(obj, key, {
configurable: true, configurable: true,
get() { get() {
return value; return value;
} }
}); });
} }
} }
return obj; return obj;
} }
+1 -1
View File
File diff suppressed because one or more lines are too long
+3 -16
View File
@@ -1,5 +1,5 @@
/*! /*!
* Bootstrap manipulator.js v5.2.3 (https://getbootstrap.com/) * Bootstrap manipulator.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -11,72 +11,59 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): dom/manipulator.js * Bootstrap (v5.3.0-alpha1): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
function normalizeData(value) { function normalizeData(value) {
if (value === 'true') { if (value === 'true') {
return true; return true;
} }
if (value === 'false') { if (value === 'false') {
return false; return false;
} }
if (value === Number(value).toString()) { if (value === Number(value).toString()) {
return Number(value); return Number(value);
} }
if (value === '' || value === 'null') { if (value === '' || value === 'null') {
return null; return null;
} }
if (typeof value !== 'string') { if (typeof value !== 'string') {
return value; return value;
} }
try { try {
return JSON.parse(decodeURIComponent(value)); return JSON.parse(decodeURIComponent(value));
} catch (_unused) { } catch (_unused) {
return value; return value;
} }
} }
function normalizeDataKey(key) { function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
} }
const Manipulator = { const Manipulator = {
setDataAttribute(element, key, value) { setDataAttribute(element, key, value) {
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
}, },
removeDataAttribute(element, key) { removeDataAttribute(element, key) {
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
}, },
getDataAttributes(element) { getDataAttributes(element) {
if (!element) { if (!element) {
return {}; return {};
} }
const attributes = {}; const attributes = {};
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
for (const key of bsKeys) { for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, ''); let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]); attributes[pureKey] = normalizeData(element.dataset[key]);
} }
return attributes; return attributes;
}, },
getDataAttribute(element, key) { getDataAttribute(element, key) {
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
} }
}; };
return Manipulator; return Manipulator;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","value","Number","toString","JSON","parse","decodeURIComponent","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","Object","keys","dataset","filter","startsWith","pureKey","charAt","slice","length","getDataAttribute","getAttribute"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAEA,SAASA,aAAT,CAAuBC,KAAvB,EAA8B;IAC5B,IAAIA,KAAK,KAAK,MAAd,EAAsB;EACpB,IAAA,OAAO,IAAP,CAAA;EACD,GAAA;;IAED,IAAIA,KAAK,KAAK,OAAd,EAAuB;EACrB,IAAA,OAAO,KAAP,CAAA;EACD,GAAA;;IAED,IAAIA,KAAK,KAAKC,MAAM,CAACD,KAAD,CAAN,CAAcE,QAAd,EAAd,EAAwC;MACtC,OAAOD,MAAM,CAACD,KAAD,CAAb,CAAA;EACD,GAAA;;EAED,EAAA,IAAIA,KAAK,KAAK,EAAV,IAAgBA,KAAK,KAAK,MAA9B,EAAsC;EACpC,IAAA,OAAO,IAAP,CAAA;EACD,GAAA;;EAED,EAAA,IAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;EAC7B,IAAA,OAAOA,KAAP,CAAA;EACD,GAAA;;IAED,IAAI;MACF,OAAOG,IAAI,CAACC,KAAL,CAAWC,kBAAkB,CAACL,KAAD,CAA7B,CAAP,CAAA;EACD,GAFD,CAEE,OAAM,OAAA,EAAA;EACN,IAAA,OAAOA,KAAP,CAAA;EACD,GAAA;EACF,CAAA;;EAED,SAASM,gBAAT,CAA0BC,GAA1B,EAA+B;EAC7B,EAAA,OAAOA,GAAG,CAACC,OAAJ,CAAY,QAAZ,EAAsBC,GAAG,IAAK,CAAA,CAAA,EAAGA,GAAG,CAACC,WAAJ,EAAkB,EAAnD,CAAP,CAAA;EACD,CAAA;;AAED,QAAMC,WAAW,GAAG;EAClBC,EAAAA,gBAAgB,CAACC,OAAD,EAAUN,GAAV,EAAeP,KAAf,EAAsB;MACpCa,OAAO,CAACC,YAAR,CAAsB,CAAUR,QAAAA,EAAAA,gBAAgB,CAACC,GAAD,CAAM,CAAtD,CAAA,EAAyDP,KAAzD,CAAA,CAAA;KAFgB;;EAKlBe,EAAAA,mBAAmB,CAACF,OAAD,EAAUN,GAAV,EAAe;MAChCM,OAAO,CAACG,eAAR,CAAyB,CAAA,QAAA,EAAUV,gBAAgB,CAACC,GAAD,CAAM,CAAzD,CAAA,CAAA,CAAA;KANgB;;IASlBU,iBAAiB,CAACJ,OAAD,EAAU;MACzB,IAAI,CAACA,OAAL,EAAc;EACZ,MAAA,OAAO,EAAP,CAAA;EACD,KAAA;;MAED,MAAMK,UAAU,GAAG,EAAnB,CAAA;MACA,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAP,CAAYR,OAAO,CAACS,OAApB,CAA6BC,CAAAA,MAA7B,CAAoChB,GAAG,IAAIA,GAAG,CAACiB,UAAJ,CAAe,IAAf,CAAwB,IAAA,CAACjB,GAAG,CAACiB,UAAJ,CAAe,UAAf,CAApE,CAAf,CAAA;;EAEA,IAAA,KAAK,MAAMjB,GAAX,IAAkBY,MAAlB,EAA0B;QACxB,IAAIM,OAAO,GAAGlB,GAAG,CAACC,OAAJ,CAAY,KAAZ,EAAmB,EAAnB,CAAd,CAAA;EACAiB,MAAAA,OAAO,GAAGA,OAAO,CAACC,MAAR,CAAe,CAAf,EAAkBhB,WAAlB,EAAA,GAAkCe,OAAO,CAACE,KAAR,CAAc,CAAd,EAAiBF,OAAO,CAACG,MAAzB,CAA5C,CAAA;EACAV,MAAAA,UAAU,CAACO,OAAD,CAAV,GAAsB1B,aAAa,CAACc,OAAO,CAACS,OAAR,CAAgBf,GAAhB,CAAD,CAAnC,CAAA;EACD,KAAA;;EAED,IAAA,OAAOW,UAAP,CAAA;KAvBgB;;EA0BlBW,EAAAA,gBAAgB,CAAChB,OAAD,EAAUN,GAAV,EAAe;EAC7B,IAAA,OAAOR,aAAa,CAACc,OAAO,CAACiB,YAAR,CAAsB,CAAUxB,QAAAA,EAAAA,gBAAgB,CAACC,GAAD,CAAM,CAAA,CAAtD,CAAD,CAApB,CAAA;EACD,GAAA;;EA5BiB;;;;;;;;"} {"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","value","Number","toString","JSON","parse","decodeURIComponent","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","Object","keys","dataset","filter","startsWith","pureKey","charAt","slice","length","getDataAttribute","getAttribute"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA,SAASA,aAAa,CAACC,KAAK,EAAE;IAC5B,IAAIA,KAAK,KAAK,MAAM,EAAE;EACpB,IAAA,OAAO,IAAI,CAAA;EACb,GAAA;IAEA,IAAIA,KAAK,KAAK,OAAO,EAAE;EACrB,IAAA,OAAO,KAAK,CAAA;EACd,GAAA;IAEA,IAAIA,KAAK,KAAKC,MAAM,CAACD,KAAK,CAAC,CAACE,QAAQ,EAAE,EAAE;MACtC,OAAOD,MAAM,CAACD,KAAK,CAAC,CAAA;EACtB,GAAA;EAEA,EAAA,IAAIA,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,MAAM,EAAE;EACpC,IAAA,OAAO,IAAI,CAAA;EACb,GAAA;EAEA,EAAA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;EAC7B,IAAA,OAAOA,KAAK,CAAA;EACd,GAAA;IAEA,IAAI;MACF,OAAOG,IAAI,CAACC,KAAK,CAACC,kBAAkB,CAACL,KAAK,CAAC,CAAC,CAAA;EAC9C,GAAC,CAAC,OAAM,OAAA,EAAA;EACN,IAAA,OAAOA,KAAK,CAAA;EACd,GAAA;EACF,CAAA;EAEA,SAASM,gBAAgB,CAACC,GAAG,EAAE;EAC7B,EAAA,OAAOA,GAAG,CAACC,OAAO,CAAC,QAAQ,EAAEC,GAAG,IAAK,CAAA,CAAA,EAAGA,GAAG,CAACC,WAAW,EAAG,EAAC,CAAC,CAAA;EAC9D,CAAA;AAEA,QAAMC,WAAW,GAAG;EAClBC,EAAAA,gBAAgB,CAACC,OAAO,EAAEN,GAAG,EAAEP,KAAK,EAAE;MACpCa,OAAO,CAACC,YAAY,CAAE,CAAUR,QAAAA,EAAAA,gBAAgB,CAACC,GAAG,CAAE,CAAA,CAAC,EAAEP,KAAK,CAAC,CAAA;KAChE;EAEDe,EAAAA,mBAAmB,CAACF,OAAO,EAAEN,GAAG,EAAE;MAChCM,OAAO,CAACG,eAAe,CAAE,CAAA,QAAA,EAAUV,gBAAgB,CAACC,GAAG,CAAE,CAAA,CAAC,CAAC,CAAA;KAC5D;IAEDU,iBAAiB,CAACJ,OAAO,EAAE;MACzB,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA,OAAO,EAAE,CAAA;EACX,KAAA;MAEA,MAAMK,UAAU,GAAG,EAAE,CAAA;EACrB,IAAA,MAAMC,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACR,OAAO,CAACS,OAAO,CAAC,CAACC,MAAM,CAAChB,GAAG,IAAIA,GAAG,CAACiB,UAAU,CAAC,IAAI,CAAC,IAAI,CAACjB,GAAG,CAACiB,UAAU,CAAC,UAAU,CAAC,CAAC,CAAA;EAE9G,IAAA,KAAK,MAAMjB,GAAG,IAAIY,MAAM,EAAE;QACxB,IAAIM,OAAO,GAAGlB,GAAG,CAACC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QACpCiB,OAAO,GAAGA,OAAO,CAACC,MAAM,CAAC,CAAC,CAAC,CAAChB,WAAW,EAAE,GAAGe,OAAO,CAACE,KAAK,CAAC,CAAC,EAAEF,OAAO,CAACG,MAAM,CAAC,CAAA;EAC5EV,MAAAA,UAAU,CAACO,OAAO,CAAC,GAAG1B,aAAa,CAACc,OAAO,CAACS,OAAO,CAACf,GAAG,CAAC,CAAC,CAAA;EAC3D,KAAA;EAEA,IAAA,OAAOW,UAAU,CAAA;KAClB;EAEDW,EAAAA,gBAAgB,CAAChB,OAAO,EAAEN,GAAG,EAAE;EAC7B,IAAA,OAAOR,aAAa,CAACc,OAAO,CAACiB,YAAY,CAAE,CAAUxB,QAAAA,EAAAA,gBAAgB,CAACC,GAAG,CAAE,CAAA,CAAC,CAAC,CAAC,CAAA;EAChF,GAAA;EACF;;;;;;;;"}
+40 -23
View File
@@ -1,83 +1,100 @@
/*! /*!
* Bootstrap selector-engine.js v5.2.3 (https://getbootstrap.com/) * Bootstrap selector-engine.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
typeof define === 'function' && define.amd ? define(['../util/index'], factory) : typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory(global.Index)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory(global.Index));
})(this, (function (index) { 'use strict'; })(this, (function (index_js) { 'use strict';
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): dom/selector-engine.js * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** const getSelector = element => {
* Constants let selector = element.getAttribute('data-bs-target');
*/ if (!selector || selector === '#') {
let hrefAttribute = element.getAttribute('href');
// The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
return null;
}
// Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
}
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
}
return index_js.parseSelector(selector);
};
const SelectorEngine = { const SelectorEngine = {
find(selector, element = document.documentElement) { find(selector, element = document.documentElement) {
return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
}, },
findOne(selector, element = document.documentElement) { findOne(selector, element = document.documentElement) {
return Element.prototype.querySelector.call(element, selector); return Element.prototype.querySelector.call(element, selector);
}, },
children(element, selector) { children(element, selector) {
return [].concat(...element.children).filter(child => child.matches(selector)); return [].concat(...element.children).filter(child => child.matches(selector));
}, },
parents(element, selector) { parents(element, selector) {
const parents = []; const parents = [];
let ancestor = element.parentNode.closest(selector); let ancestor = element.parentNode.closest(selector);
while (ancestor) { while (ancestor) {
parents.push(ancestor); parents.push(ancestor);
ancestor = ancestor.parentNode.closest(selector); ancestor = ancestor.parentNode.closest(selector);
} }
return parents; return parents;
}, },
prev(element, selector) { prev(element, selector) {
let previous = element.previousElementSibling; let previous = element.previousElementSibling;
while (previous) { while (previous) {
if (previous.matches(selector)) { if (previous.matches(selector)) {
return [previous]; return [previous];
} }
previous = previous.previousElementSibling; previous = previous.previousElementSibling;
} }
return []; return [];
}, },
// TODO: this is now unused; remove later along with prev() // TODO: this is now unused; remove later along with prev()
next(element, selector) { next(element, selector) {
let next = element.nextElementSibling; let next = element.nextElementSibling;
while (next) { while (next) {
if (next.matches(selector)) { if (next.matches(selector)) {
return [next]; return [next];
} }
next = next.nextElementSibling; next = next.nextElementSibling;
} }
return []; return [];
}, },
focusableChildren(element) { focusableChildren(element) {
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
return this.find(focusables, element).filter(el => !index.isDisabled(el) && index.isVisible(el)); return this.find(focusables, element).filter(el => !index_js.isDisabled(el) && index_js.isVisible(el));
},
getSelectorFromElement(element) {
const selector = getSelector(element);
if (selector) {
return SelectorEngine.findOne(selector) ? selector : null;
}
return null;
},
getElementFromSelector(element) {
const selector = getSelector(element);
return selector ? SelectorEngine.findOne(selector) : null;
},
getMultipleElementsFromSelector(element) {
const selector = getSelector(element);
return selector ? SelectorEngine.find(selector) : [];
} }
}; };
return SelectorEngine; return SelectorEngine;
+1 -1
View File
File diff suppressed because one or more lines are too long
+73 -145
View File
@@ -1,18 +1,15 @@
/*! /*!
* Bootstrap dropdown.js v5.2.3 (https://getbootstrap.com/) * Bootstrap dropdown.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index'), require('./dom/event-handler'), require('./dom/manipulator'), require('./dom/selector-engine'), require('./base-component')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) : typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.BaseComponent)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.BaseComponent));
})(this, (function (Popper, index, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict'; })(this, (function (Popper, index_js, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; function _interopNamespaceDefault(e) {
function _interopNamespace(e) {
if (e && e.__esModule) return e;
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }); const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
if (e) { if (e) {
for (const k in e) { for (const k in e) {
@@ -29,18 +26,15 @@
return Object.freeze(n); return Object.freeze(n);
} }
const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper); const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): dropdown.js * Bootstrap (v5.3.0-alpha1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -74,12 +68,12 @@
const SELECTOR_NAVBAR = '.navbar'; const SELECTOR_NAVBAR = '.navbar';
const SELECTOR_NAVBAR_NAV = '.navbar-nav'; const SELECTOR_NAVBAR_NAV = '.navbar-nav';
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
const PLACEMENT_TOP = index.isRTL() ? 'top-end' : 'top-start'; const PLACEMENT_TOP = index_js.isRTL() ? 'top-end' : 'top-start';
const PLACEMENT_TOPEND = index.isRTL() ? 'top-start' : 'top-end'; const PLACEMENT_TOPEND = index_js.isRTL() ? 'top-start' : 'top-end';
const PLACEMENT_BOTTOM = index.isRTL() ? 'bottom-end' : 'bottom-start'; const PLACEMENT_BOTTOM = index_js.isRTL() ? 'bottom-end' : 'bottom-start';
const PLACEMENT_BOTTOMEND = index.isRTL() ? 'bottom-start' : 'bottom-end'; const PLACEMENT_BOTTOMEND = index_js.isRTL() ? 'bottom-start' : 'bottom-end';
const PLACEMENT_RIGHT = index.isRTL() ? 'left-start' : 'right-start'; const PLACEMENT_RIGHT = index_js.isRTL() ? 'left-start' : 'right-start';
const PLACEMENT_LEFT = index.isRTL() ? 'right-start' : 'left-start'; const PLACEMENT_LEFT = index_js.isRTL() ? 'right-start' : 'left-start';
const PLACEMENT_TOPCENTER = 'top'; const PLACEMENT_TOPCENTER = 'top';
const PLACEMENT_BOTTOMCENTER = 'bottom'; const PLACEMENT_BOTTOMCENTER = 'bottom';
const Default = { const Default = {
@@ -98,218 +92,172 @@
popperConfig: '(null|object|function)', popperConfig: '(null|object|function)',
reference: '(string|element|object)' reference: '(string|element|object)'
}; };
/** /**
* Class definition * Class definition
*/ */
class Dropdown extends BaseComponent__default.default { class Dropdown extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); super(element, config);
this._popper = null; this._popper = null;
this._parent = this._element.parentNode; // dropdown wrapper this._parent = this._element.parentNode; // dropdown wrapper
// todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
this._menu = SelectorEngine__default.default.next(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.findOne(SELECTOR_MENU, this._parent);
this._inNavbar = this._detectNavbar(); this._inNavbar = this._detectNavbar();
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
toggle() { toggle() {
return this._isShown() ? this.hide() : this.show(); return this._isShown() ? this.hide() : this.show();
} }
show() { show() {
if (index.isDisabled(this._element) || this._isShown()) { if (index_js.isDisabled(this._element) || this._isShown()) {
return; return;
} }
const relatedTarget = { const relatedTarget = {
relatedTarget: this._element relatedTarget: this._element
}; };
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, relatedTarget); const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
if (showEvent.defaultPrevented) { if (showEvent.defaultPrevented) {
return; return;
} }
this._createPopper();
this._createPopper(); // If this is a touch-enabled device we add extra // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
for (const element of [].concat(...document.body.children)) { for (const element of [].concat(...document.body.children)) {
EventHandler__default.default.on(element, 'mouseover', index.noop); EventHandler.on(element, 'mouseover', index_js.noop);
} }
} }
this._element.focus(); this._element.focus();
this._element.setAttribute('aria-expanded', true); this._element.setAttribute('aria-expanded', true);
this._menu.classList.add(CLASS_NAME_SHOW); this._menu.classList.add(CLASS_NAME_SHOW);
this._element.classList.add(CLASS_NAME_SHOW); this._element.classList.add(CLASS_NAME_SHOW);
EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);
EventHandler__default.default.trigger(this._element, EVENT_SHOWN, relatedTarget);
} }
hide() { hide() {
if (index.isDisabled(this._element) || !this._isShown()) { if (index_js.isDisabled(this._element) || !this._isShown()) {
return; return;
} }
const relatedTarget = { const relatedTarget = {
relatedTarget: this._element relatedTarget: this._element
}; };
this._completeHide(relatedTarget); this._completeHide(relatedTarget);
} }
dispose() { dispose() {
if (this._popper) { if (this._popper) {
this._popper.destroy(); this._popper.destroy();
} }
super.dispose(); super.dispose();
} }
update() { update() {
this._inNavbar = this._detectNavbar(); this._inNavbar = this._detectNavbar();
if (this._popper) { if (this._popper) {
this._popper.update(); this._popper.update();
} }
} // Private }
// Private
_completeHide(relatedTarget) { _completeHide(relatedTarget) {
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE, relatedTarget); const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
} // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler__default.default.off(element, 'mouseover', index.noop);
}
} }
// If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', index_js.noop);
}
}
if (this._popper) { if (this._popper) {
this._popper.destroy(); this._popper.destroy();
} }
this._menu.classList.remove(CLASS_NAME_SHOW); this._menu.classList.remove(CLASS_NAME_SHOW);
this._element.classList.remove(CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_SHOW);
this._element.setAttribute('aria-expanded', 'false'); this._element.setAttribute('aria-expanded', 'false');
Manipulator.removeDataAttribute(this._menu, 'popper');
Manipulator__default.default.removeDataAttribute(this._menu, 'popper'); EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN, relatedTarget);
} }
_getConfig(config) { _getConfig(config) {
config = super._getConfig(config); config = super._getConfig(config);
if (typeof config.reference === 'object' && !index_js.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
if (typeof config.reference === 'object' && !index.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
// Popper virtual elements require a getBoundingClientRect method // Popper virtual elements require a getBoundingClientRect method
throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
} }
return config; return config;
} }
_createPopper() { _createPopper() {
if (typeof Popper__namespace === 'undefined') { if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
} }
let referenceElement = this._element; let referenceElement = this._element;
if (this._config.reference === 'parent') { if (this._config.reference === 'parent') {
referenceElement = this._parent; referenceElement = this._parent;
} else if (index.isElement(this._config.reference)) { } else if (index_js.isElement(this._config.reference)) {
referenceElement = index.getElement(this._config.reference); referenceElement = index_js.getElement(this._config.reference);
} else if (typeof this._config.reference === 'object') { } else if (typeof this._config.reference === 'object') {
referenceElement = this._config.reference; referenceElement = this._config.reference;
} }
const popperConfig = this._getPopperConfig(); const popperConfig = this._getPopperConfig();
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig); this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
} }
_isShown() { _isShown() {
return this._menu.classList.contains(CLASS_NAME_SHOW); return this._menu.classList.contains(CLASS_NAME_SHOW);
} }
_getPlacement() { _getPlacement() {
const parentDropdown = this._parent; const parentDropdown = this._parent;
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT; return PLACEMENT_RIGHT;
} }
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
return PLACEMENT_LEFT; return PLACEMENT_LEFT;
} }
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
return PLACEMENT_TOPCENTER; return PLACEMENT_TOPCENTER;
} }
if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
return PLACEMENT_BOTTOMCENTER; return PLACEMENT_BOTTOMCENTER;
} // We need to trim the value because custom properties can also include spaces }
// We need to trim the value because custom properties can also include spaces
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
} }
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
} }
_detectNavbar() { _detectNavbar() {
return this._element.closest(SELECTOR_NAVBAR) !== null; return this._element.closest(SELECTOR_NAVBAR) !== null;
} }
_getOffset() { _getOffset() {
const { const {
offset offset
} = this._config; } = this._config;
if (typeof offset === 'string') { if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10)); return offset.split(',').map(value => Number.parseInt(value, 10));
} }
if (typeof offset === 'function') { if (typeof offset === 'function') {
return popperData => offset(popperData, this._element); return popperData => offset(popperData, this._element);
} }
return offset; return offset;
} }
_getPopperConfig() { _getPopperConfig() {
const defaultBsPopperConfig = { const defaultBsPopperConfig = {
placement: this._getPlacement(), placement: this._getPlacement(),
@@ -324,121 +272,101 @@
offset: this._getOffset() offset: this._getOffset()
} }
}] }]
}; // Disable Popper if we have a static display or Dropdown is in Navbar };
// Disable Popper if we have a static display or Dropdown is in Navbar
if (this._inNavbar || this._config.display === 'static') { if (this._inNavbar || this._config.display === 'static') {
Manipulator__default.default.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
defaultBsPopperConfig.modifiers = [{ defaultBsPopperConfig.modifiers = [{
name: 'applyStyles', name: 'applyStyles',
enabled: false enabled: false
}]; }];
} }
return {
return { ...defaultBsPopperConfig, ...defaultBsPopperConfig,
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_selectMenuItem({ _selectMenuItem({
key, key,
target target
}) { }) {
const items = SelectorEngine__default.default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index.isVisible(element)); const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index_js.isVisible(element));
if (!items.length) { if (!items.length) {
return; return;
} // if target isn't included in items (e.g. when expanding the dropdown) }
// if target isn't included in items (e.g. when expanding the dropdown)
// allow cycling to get the last item in case key equals ARROW_UP_KEY // allow cycling to get the last item in case key equals ARROW_UP_KEY
index_js.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
}
// Static
index.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
} // Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Dropdown.getOrCreateInstance(this, config); const data = Dropdown.getOrCreateInstance(this, config);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
}); });
} }
static clearMenus(event) { static clearMenus(event) {
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) { if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
return; return;
} }
const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
const openToggles = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_SHOWN);
for (const toggle of openToggles) { for (const toggle of openToggles) {
const context = Dropdown.getInstance(toggle); const context = Dropdown.getInstance(toggle);
if (!context || context._config.autoClose === false) { if (!context || context._config.autoClose === false) {
continue; continue;
} }
const composedPath = event.composedPath(); const composedPath = event.composedPath();
const isMenuTarget = composedPath.includes(context._menu); const isMenuTarget = composedPath.includes(context._menu);
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
continue; continue;
} // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu }
// Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) { if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
continue; continue;
} }
const relatedTarget = { const relatedTarget = {
relatedTarget: context._element relatedTarget: context._element
}; };
if (event.type === 'click') { if (event.type === 'click') {
relatedTarget.clickEvent = event; relatedTarget.clickEvent = event;
} }
context._completeHide(relatedTarget); context._completeHide(relatedTarget);
} }
} }
static dataApiKeydownHandler(event) { static dataApiKeydownHandler(event) {
// If not an UP | DOWN | ESCAPE key => not a dropdown command // If not an UP | DOWN | ESCAPE key => not a dropdown command
// If input/textarea && if key is other than ESCAPE => not a dropdown command // If input/textarea && if key is other than ESCAPE => not a dropdown command
const isInput = /input|textarea/i.test(event.target.tagName); const isInput = /input|textarea/i.test(event.target.tagName);
const isEscapeEvent = event.key === ESCAPE_KEY; const isEscapeEvent = event.key === ESCAPE_KEY;
const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key); const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);
if (!isUpOrDownEvent && !isEscapeEvent) { if (!isUpOrDownEvent && !isEscapeEvent) {
return; return;
} }
if (isInput && !isEscapeEvent) { if (isInput && !isEscapeEvent) {
return; return;
} }
event.preventDefault();
event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default.default.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
const instance = Dropdown.getOrCreateInstance(getToggleButton); const instance = Dropdown.getOrCreateInstance(getToggleButton);
if (isUpOrDownEvent) { if (isUpOrDownEvent) {
event.stopPropagation(); event.stopPropagation();
instance.show(); instance.show();
instance._selectMenuItem(event); instance._selectMenuItem(event);
return; return;
} }
if (instance._isShown()) { if (instance._isShown()) {
// else is escape and we check if it is shown // else is escape and we check if it is shown
event.stopPropagation(); event.stopPropagation();
@@ -446,26 +374,26 @@
getToggleButton.focus(); getToggleButton.focus();
} }
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler); EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus); EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
EventHandler__default.default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault(); event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle(); Dropdown.getOrCreateInstance(this).toggle();
}); });
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Dropdown); index_js.defineJQueryPlugin(Dropdown);
return Dropdown; return Dropdown;
+1 -1
View File
File diff suppressed because one or more lines are too long
+48 -127
View File
@@ -1,29 +1,21 @@
/*! /*!
* Bootstrap modal.js v5.2.3 (https://getbootstrap.com/) * Bootstrap modal.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./util/scrollbar'), require('./base-component'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/scrollbar.js'), require('./base-component.js'), require('./util/backdrop.js'), require('./util/focustrap.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './util/scrollbar', './base-component', './util/backdrop', './util/focustrap', './util/component-functions'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './util/scrollbar', './base-component', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Index, global.EventHandler, global.SelectorEngine, global.Scrollbar, global.BaseComponent, global.Backdrop, global.Focustrap, global.ComponentFunctions)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Index, global.EventHandler, global.SelectorEngine, global.Scrollbar, global.BaseComponent, global.Backdrop, global.Focustrap, global.ComponentFunctions));
})(this, (function (index, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions) { 'use strict'; })(this, (function (index_js, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions_js) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): modal.js * Bootstrap (v5.3.0-alpha1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -61,338 +53,267 @@
focus: 'boolean', focus: 'boolean',
keyboard: 'boolean' keyboard: 'boolean'
}; };
/** /**
* Class definition * Class definition
*/ */
class Modal extends BaseComponent__default.default { class Modal extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); super(element, config);
this._dialog = SelectorEngine__default.default.findOne(SELECTOR_DIALOG, this._element); this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
this._backdrop = this._initializeBackDrop(); this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap(); this._focustrap = this._initializeFocusTrap();
this._isShown = false; this._isShown = false;
this._isTransitioning = false; this._isTransitioning = false;
this._scrollBar = new ScrollBarHelper__default.default(); this._scrollBar = new ScrollBarHelper();
this._addEventListeners(); this._addEventListeners();
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
toggle(relatedTarget) { toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget); return this._isShown ? this.hide() : this.show(relatedTarget);
} }
show(relatedTarget) { show(relatedTarget) {
if (this._isShown || this._isTransitioning) { if (this._isShown || this._isTransitioning) {
return; return;
} }
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
relatedTarget relatedTarget
}); });
if (showEvent.defaultPrevented) { if (showEvent.defaultPrevented) {
return; return;
} }
this._isShown = true; this._isShown = true;
this._isTransitioning = true; this._isTransitioning = true;
this._scrollBar.hide(); this._scrollBar.hide();
document.body.classList.add(CLASS_NAME_OPEN); document.body.classList.add(CLASS_NAME_OPEN);
this._adjustDialog(); this._adjustDialog();
this._backdrop.show(() => this._showElement(relatedTarget)); this._backdrop.show(() => this._showElement(relatedTarget));
} }
hide() { hide() {
if (!this._isShown || this._isTransitioning) { if (!this._isShown || this._isTransitioning) {
return; return;
} }
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
} }
this._isShown = false; this._isShown = false;
this._isTransitioning = true; this._isTransitioning = true;
this._focustrap.deactivate(); this._focustrap.deactivate();
this._element.classList.remove(CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_SHOW);
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
} }
dispose() { dispose() {
for (const htmlElement of [window, this._dialog]) { for (const htmlElement of [window, this._dialog]) {
EventHandler__default.default.off(htmlElement, EVENT_KEY); EventHandler.off(htmlElement, EVENT_KEY);
} }
this._backdrop.dispose(); this._backdrop.dispose();
this._focustrap.deactivate(); this._focustrap.deactivate();
super.dispose(); super.dispose();
} }
handleUpdate() { handleUpdate() {
this._adjustDialog(); this._adjustDialog();
} // Private }
// Private
_initializeBackDrop() { _initializeBackDrop() {
return new Backdrop__default.default({ return new Backdrop({
isVisible: Boolean(this._config.backdrop), isVisible: Boolean(this._config.backdrop),
// 'static' option will be translated to true, and booleans will keep their value, // 'static' option will be translated to true, and booleans will keep their value,
isAnimated: this._isAnimated() isAnimated: this._isAnimated()
}); });
} }
_initializeFocusTrap() { _initializeFocusTrap() {
return new FocusTrap__default.default({ return new FocusTrap({
trapElement: this._element trapElement: this._element
}); });
} }
_showElement(relatedTarget) { _showElement(relatedTarget) {
// try to append dynamic modal // try to append dynamic modal
if (!document.body.contains(this._element)) { if (!document.body.contains(this._element)) {
document.body.append(this._element); document.body.append(this._element);
} }
this._element.style.display = 'block'; this._element.style.display = 'block';
this._element.removeAttribute('aria-hidden'); this._element.removeAttribute('aria-hidden');
this._element.setAttribute('aria-modal', true); this._element.setAttribute('aria-modal', true);
this._element.setAttribute('role', 'dialog'); this._element.setAttribute('role', 'dialog');
this._element.scrollTop = 0; this._element.scrollTop = 0;
const modalBody = SelectorEngine__default.default.findOne(SELECTOR_MODAL_BODY, this._dialog); const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
if (modalBody) { if (modalBody) {
modalBody.scrollTop = 0; modalBody.scrollTop = 0;
} }
index_js.reflow(this._element);
index.reflow(this._element);
this._element.classList.add(CLASS_NAME_SHOW); this._element.classList.add(CLASS_NAME_SHOW);
const transitionComplete = () => { const transitionComplete = () => {
if (this._config.focus) { if (this._config.focus) {
this._focustrap.activate(); this._focustrap.activate();
} }
this._isTransitioning = false; this._isTransitioning = false;
EventHandler__default.default.trigger(this._element, EVENT_SHOWN, { EventHandler.trigger(this._element, EVENT_SHOWN, {
relatedTarget relatedTarget
}); });
}; };
this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
} }
_addEventListeners() { _addEventListeners() {
EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => { EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) { if (event.key !== ESCAPE_KEY) {
return; return;
} }
if (this._config.keyboard) { if (this._config.keyboard) {
event.preventDefault(); event.preventDefault();
this.hide(); this.hide();
return; return;
} }
this._triggerBackdropTransition(); this._triggerBackdropTransition();
}); });
EventHandler__default.default.on(window, EVENT_RESIZE, () => { EventHandler.on(window, EVENT_RESIZE, () => {
if (this._isShown && !this._isTransitioning) { if (this._isShown && !this._isTransitioning) {
this._adjustDialog(); this._adjustDialog();
} }
}); });
EventHandler__default.default.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
// a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
EventHandler__default.default.one(this._element, EVENT_CLICK_DISMISS, event2 => { EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
if (this._element !== event.target || this._element !== event2.target) { if (this._element !== event.target || this._element !== event2.target) {
return; return;
} }
if (this._config.backdrop === 'static') { if (this._config.backdrop === 'static') {
this._triggerBackdropTransition(); this._triggerBackdropTransition();
return; return;
} }
if (this._config.backdrop) { if (this._config.backdrop) {
this.hide(); this.hide();
} }
}); });
}); });
} }
_hideModal() { _hideModal() {
this._element.style.display = 'none'; this._element.style.display = 'none';
this._element.setAttribute('aria-hidden', true); this._element.setAttribute('aria-hidden', true);
this._element.removeAttribute('aria-modal'); this._element.removeAttribute('aria-modal');
this._element.removeAttribute('role'); this._element.removeAttribute('role');
this._isTransitioning = false; this._isTransitioning = false;
this._backdrop.hide(() => { this._backdrop.hide(() => {
document.body.classList.remove(CLASS_NAME_OPEN); document.body.classList.remove(CLASS_NAME_OPEN);
this._resetAdjustments(); this._resetAdjustments();
this._scrollBar.reset(); this._scrollBar.reset();
EventHandler.trigger(this._element, EVENT_HIDDEN);
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
}); });
} }
_isAnimated() { _isAnimated() {
return this._element.classList.contains(CLASS_NAME_FADE); return this._element.classList.contains(CLASS_NAME_FADE);
} }
_triggerBackdropTransition() { _triggerBackdropTransition() {
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED); const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
} }
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed const initialOverflowY = this._element.style.overflowY;
// return if the following background transition hasn't yet completed
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
return; return;
} }
if (!isModalOverflowing) { if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden'; this._element.style.overflowY = 'hidden';
} }
this._element.classList.add(CLASS_NAME_STATIC); this._element.classList.add(CLASS_NAME_STATIC);
this._queueCallback(() => { this._queueCallback(() => {
this._element.classList.remove(CLASS_NAME_STATIC); this._element.classList.remove(CLASS_NAME_STATIC);
this._queueCallback(() => { this._queueCallback(() => {
this._element.style.overflowY = initialOverflowY; this._element.style.overflowY = initialOverflowY;
}, this._dialog); }, this._dialog);
}, this._dialog); }, this._dialog);
this._element.focus(); this._element.focus();
} }
/** /**
* The following methods are used to handle overflowing modals * The following methods are used to handle overflowing modals
*/ */
_adjustDialog() { _adjustDialog() {
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
const scrollbarWidth = this._scrollBar.getWidth(); const scrollbarWidth = this._scrollBar.getWidth();
const isBodyOverflowing = scrollbarWidth > 0; const isBodyOverflowing = scrollbarWidth > 0;
if (isBodyOverflowing && !isModalOverflowing) { if (isBodyOverflowing && !isModalOverflowing) {
const property = index.isRTL() ? 'paddingLeft' : 'paddingRight'; const property = index_js.isRTL() ? 'paddingLeft' : 'paddingRight';
this._element.style[property] = `${scrollbarWidth}px`; this._element.style[property] = `${scrollbarWidth}px`;
} }
if (!isBodyOverflowing && isModalOverflowing) { if (!isBodyOverflowing && isModalOverflowing) {
const property = index.isRTL() ? 'paddingRight' : 'paddingLeft'; const property = index_js.isRTL() ? 'paddingRight' : 'paddingLeft';
this._element.style[property] = `${scrollbarWidth}px`; this._element.style[property] = `${scrollbarWidth}px`;
} }
} }
_resetAdjustments() { _resetAdjustments() {
this._element.style.paddingLeft = ''; this._element.style.paddingLeft = '';
this._element.style.paddingRight = ''; this._element.style.paddingRight = '';
} // Static }
// Static
static jQueryInterface(config, relatedTarget) { static jQueryInterface(config, relatedTarget) {
return this.each(function () { return this.each(function () {
const data = Modal.getOrCreateInstance(this, config); const data = Modal.getOrCreateInstance(this, config);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](relatedTarget); data[config](relatedTarget);
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { const target = SelectorEngine.getElementFromSelector(this);
const target = index.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) { if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault(); event.preventDefault();
} }
EventHandler.one(target, EVENT_SHOW, showEvent => {
EventHandler__default.default.one(target, EVENT_SHOW, showEvent => {
if (showEvent.defaultPrevented) { if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown // only register focus restorer if modal will actually get shown
return; return;
} }
EventHandler.one(target, EVENT_HIDDEN, () => {
EventHandler__default.default.one(target, EVENT_HIDDEN, () => { if (index_js.isVisible(this)) {
if (index.isVisible(this)) {
this.focus(); this.focus();
} }
}); });
}); // avoid conflict when clicking modal toggler while another one is open });
const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
// avoid conflict when clicking modal toggler while another one is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
if (alreadyOpen) { if (alreadyOpen) {
Modal.getInstance(alreadyOpen).hide(); Modal.getInstance(alreadyOpen).hide();
} }
const data = Modal.getOrCreateInstance(target); const data = Modal.getOrCreateInstance(target);
data.toggle(this); data.toggle(this);
}); });
componentFunctions.enableDismissTrigger(Modal); componentFunctions_js.enableDismissTrigger(Modal);
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Modal); index_js.defineJQueryPlugin(Modal);
return Modal; return Modal;
+1 -1
View File
File diff suppressed because one or more lines are too long
+55 -108
View File
@@ -1,29 +1,21 @@
/*! /*!
* Bootstrap offcanvas.js v5.2.3 (https://getbootstrap.com/) * Bootstrap offcanvas.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./util/scrollbar'), require('./dom/event-handler'), require('./base-component'), require('./dom/selector-engine'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./util/scrollbar.js'), require('./dom/event-handler.js'), require('./base-component.js'), require('./dom/selector-engine.js'), require('./util/backdrop.js'), require('./util/focustrap.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './util/scrollbar', './dom/event-handler', './base-component', './dom/selector-engine', './util/backdrop', './util/focustrap', './util/component-functions'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './util/scrollbar', './dom/event-handler', './base-component', './dom/selector-engine', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Offcanvas = factory(global.Index, global.Scrollbar, global.EventHandler, global.BaseComponent, global.SelectorEngine, global.Backdrop, global.Focustrap, global.ComponentFunctions)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Offcanvas = factory(global.Index, global.Scrollbar, global.EventHandler, global.BaseComponent, global.SelectorEngine, global.Backdrop, global.Focustrap, global.ComponentFunctions));
})(this, (function (index, ScrollBarHelper, EventHandler, BaseComponent, SelectorEngine, Backdrop, FocusTrap, componentFunctions) { 'use strict'; })(this, (function (index_js, ScrollBarHelper, EventHandler, BaseComponent, SelectorEngine, Backdrop, FocusTrap, componentFunctions_js) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): offcanvas.js * Bootstrap (v5.3.0-alpha1): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -58,142 +50,108 @@
keyboard: 'boolean', keyboard: 'boolean',
scroll: 'boolean' scroll: 'boolean'
}; };
/** /**
* Class definition * Class definition
*/ */
class Offcanvas extends BaseComponent__default.default { class Offcanvas extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); super(element, config);
this._isShown = false; this._isShown = false;
this._backdrop = this._initializeBackDrop(); this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap(); this._focustrap = this._initializeFocusTrap();
this._addEventListeners(); this._addEventListeners();
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
toggle(relatedTarget) { toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget); return this._isShown ? this.hide() : this.show(relatedTarget);
} }
show(relatedTarget) { show(relatedTarget) {
if (this._isShown) { if (this._isShown) {
return; return;
} }
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
relatedTarget relatedTarget
}); });
if (showEvent.defaultPrevented) { if (showEvent.defaultPrevented) {
return; return;
} }
this._isShown = true; this._isShown = true;
this._backdrop.show(); this._backdrop.show();
if (!this._config.scroll) { if (!this._config.scroll) {
new ScrollBarHelper__default.default().hide(); new ScrollBarHelper().hide();
} }
this._element.setAttribute('aria-modal', true); this._element.setAttribute('aria-modal', true);
this._element.setAttribute('role', 'dialog'); this._element.setAttribute('role', 'dialog');
this._element.classList.add(CLASS_NAME_SHOWING); this._element.classList.add(CLASS_NAME_SHOWING);
const completeCallBack = () => { const completeCallBack = () => {
if (!this._config.scroll || this._config.backdrop) { if (!this._config.scroll || this._config.backdrop) {
this._focustrap.activate(); this._focustrap.activate();
} }
this._element.classList.add(CLASS_NAME_SHOW); this._element.classList.add(CLASS_NAME_SHOW);
this._element.classList.remove(CLASS_NAME_SHOWING); this._element.classList.remove(CLASS_NAME_SHOWING);
EventHandler.trigger(this._element, EVENT_SHOWN, {
EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
relatedTarget relatedTarget
}); });
}; };
this._queueCallback(completeCallBack, this._element, true); this._queueCallback(completeCallBack, this._element, true);
} }
hide() { hide() {
if (!this._isShown) { if (!this._isShown) {
return; return;
} }
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
} }
this._focustrap.deactivate(); this._focustrap.deactivate();
this._element.blur(); this._element.blur();
this._isShown = false; this._isShown = false;
this._element.classList.add(CLASS_NAME_HIDING); this._element.classList.add(CLASS_NAME_HIDING);
this._backdrop.hide(); this._backdrop.hide();
const completeCallback = () => { const completeCallback = () => {
this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING); this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);
this._element.removeAttribute('aria-modal'); this._element.removeAttribute('aria-modal');
this._element.removeAttribute('role'); this._element.removeAttribute('role');
if (!this._config.scroll) { if (!this._config.scroll) {
new ScrollBarHelper__default.default().reset(); new ScrollBarHelper().reset();
} }
EventHandler.trigger(this._element, EVENT_HIDDEN);
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
}; };
this._queueCallback(completeCallback, this._element, true); this._queueCallback(completeCallback, this._element, true);
} }
dispose() { dispose() {
this._backdrop.dispose(); this._backdrop.dispose();
this._focustrap.deactivate(); this._focustrap.deactivate();
super.dispose(); super.dispose();
} // Private }
// Private
_initializeBackDrop() { _initializeBackDrop() {
const clickCallback = () => { const clickCallback = () => {
if (this._config.backdrop === 'static') { if (this._config.backdrop === 'static') {
EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED); EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return; return;
} }
this.hide(); this.hide();
}; // 'static' option will be translated to true, and booleans will keep their value };
// 'static' option will be translated to true, and booleans will keep their value
const isVisible = Boolean(this._config.backdrop); const isVisible = Boolean(this._config.backdrop);
return new Backdrop__default.default({ return new Backdrop({
className: CLASS_NAME_BACKDROP, className: CLASS_NAME_BACKDROP,
isVisible, isVisible,
isAnimated: true, isAnimated: true,
@@ -201,96 +159,85 @@
clickCallback: isVisible ? clickCallback : null clickCallback: isVisible ? clickCallback : null
}); });
} }
_initializeFocusTrap() { _initializeFocusTrap() {
return new FocusTrap__default.default({ return new FocusTrap({
trapElement: this._element trapElement: this._element
}); });
} }
_addEventListeners() { _addEventListeners() {
EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => { EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) { if (event.key !== ESCAPE_KEY) {
return; return;
} }
if (!this._config.keyboard) { if (!this._config.keyboard) {
EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED); EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return; return;
} }
this.hide(); this.hide();
}); });
} // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Offcanvas.getOrCreateInstance(this, config);
if (typeof config !== 'string') {
return;
}
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
data[config](this);
});
} }
// Static
static jQueryInterface(config) {
return this.each(function () {
const data = Offcanvas.getOrCreateInstance(this, config);
if (typeof config !== 'string') {
return;
}
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
data[config](this);
});
}
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { const target = SelectorEngine.getElementFromSelector(this);
const target = index.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) { if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault(); event.preventDefault();
} }
if (index_js.isDisabled(this)) {
if (index.isDisabled(this)) {
return; return;
} }
EventHandler.one(target, EVENT_HIDDEN, () => {
EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
// focus on trigger when it is closed // focus on trigger when it is closed
if (index.isVisible(this)) { if (index_js.isVisible(this)) {
this.focus(); this.focus();
} }
}); // avoid conflict when clicking a toggler of an offcanvas, while another is open });
const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
// avoid conflict when clicking a toggler of an offcanvas, while another is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
if (alreadyOpen && alreadyOpen !== target) { if (alreadyOpen && alreadyOpen !== target) {
Offcanvas.getInstance(alreadyOpen).hide(); Offcanvas.getInstance(alreadyOpen).hide();
} }
const data = Offcanvas.getOrCreateInstance(target); const data = Offcanvas.getOrCreateInstance(target);
data.toggle(this); data.toggle(this);
}); });
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => { EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
for (const selector of SelectorEngine__default.default.find(OPEN_SELECTOR)) { for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
Offcanvas.getOrCreateInstance(selector).show(); Offcanvas.getOrCreateInstance(selector).show();
} }
}); });
EventHandler__default.default.on(window, EVENT_RESIZE, () => { EventHandler.on(window, EVENT_RESIZE, () => {
for (const element of SelectorEngine__default.default.find('[aria-modal][class*=show][class*=offcanvas-]')) { for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
if (getComputedStyle(element).position !== 'fixed') { if (getComputedStyle(element).position !== 'fixed') {
Offcanvas.getOrCreateInstance(element).hide(); Offcanvas.getOrCreateInstance(element).hide();
} }
} }
}); });
componentFunctions.enableDismissTrigger(Offcanvas); componentFunctions_js.enableDismissTrigger(Offcanvas);
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Offcanvas); index_js.defineJQueryPlugin(Offcanvas);
return Offcanvas; return Offcanvas;
+1 -1
View File
File diff suppressed because one or more lines are too long
+19 -26
View File
@@ -1,24 +1,21 @@
/*! /*!
* Bootstrap popover.js v5.2.3 (https://getbootstrap.com/) * Bootstrap popover.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./tooltip')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./tooltip.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './tooltip'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './tooltip'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Index, global.Tooltip)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Index, global.Tooltip));
})(this, (function (index, Tooltip) { 'use strict'; })(this, (function (index_js, Tooltip) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): popover.js * Bootstrap (v5.3.0-alpha1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -26,75 +23,71 @@
const NAME = 'popover'; const NAME = 'popover';
const SELECTOR_TITLE = '.popover-header'; const SELECTOR_TITLE = '.popover-header';
const SELECTOR_CONTENT = '.popover-body'; const SELECTOR_CONTENT = '.popover-body';
const Default = { ...Tooltip__default.default.Default, const Default = {
...Tooltip.Default,
content: '', content: '',
offset: [0, 8], offset: [0, 8],
placement: 'right', placement: 'right',
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
trigger: 'click' trigger: 'click'
}; };
const DefaultType = { ...Tooltip__default.default.DefaultType, const DefaultType = {
...Tooltip.DefaultType,
content: '(null|string|element|function)' content: '(null|string|element|function)'
}; };
/** /**
* Class definition * Class definition
*/ */
class Popover extends Tooltip__default.default { class Popover extends Tooltip {
// Getters // Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Overrides }
// Overrides
_isWithContent() { _isWithContent() {
return this._getTitle() || this._getContent(); return this._getTitle() || this._getContent();
} // Private }
// Private
_getContentForTemplate() { _getContentForTemplate() {
return { return {
[SELECTOR_TITLE]: this._getTitle(), [SELECTOR_TITLE]: this._getTitle(),
[SELECTOR_CONTENT]: this._getContent() [SELECTOR_CONTENT]: this._getContent()
}; };
} }
_getContent() { _getContent() {
return this._resolvePossibleFunction(this._config.content); return this._resolvePossibleFunction(this._config.content);
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Popover.getOrCreateInstance(this, config); const data = Popover.getOrCreateInstance(this, config);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
}); });
} }
} }
/** /**
* jQuery * jQuery
*/ */
index_js.defineJQueryPlugin(Popover);
index.defineJQueryPlugin(Popover);
return Popover; return Popover;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n"],"names":["NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","Tooltip","content","offset","placement","template","trigger","DefaultType","Popover","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config","jQueryInterface","config","each","data","getOrCreateInstance","TypeError","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,SAAb,CAAA;EAEA,MAAMC,cAAc,GAAG,iBAAvB,CAAA;EACA,MAAMC,gBAAgB,GAAG,eAAzB,CAAA;EAEA,MAAMC,OAAO,GAAG,EACd,GAAGC,wBAAO,CAACD,OADG;EAEdE,EAAAA,OAAO,EAAE,EAFK;EAGdC,EAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,CAHM;EAIdC,EAAAA,SAAS,EAAE,OAJG;IAKdC,QAAQ,EAAE,yCACR,mCADQ,GAER,kCAFQ,GAGR,kCAHQ,GAIR,QATY;EAUdC,EAAAA,OAAO,EAAE,OAAA;EAVK,CAAhB,CAAA;EAaA,MAAMC,WAAW,GAAG,EAClB,GAAGN,wBAAO,CAACM,WADO;EAElBL,EAAAA,OAAO,EAAE,gCAAA;EAFS,CAApB,CAAA;EAKA;EACA;EACA;;EAEA,MAAMM,OAAN,SAAsBP,wBAAtB,CAA8B;EAC5B;EACkB,EAAA,WAAPD,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAP,CAAA;EACD,GAAA;;EAEqB,EAAA,WAAXO,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAP,CAAA;EACD,GAAA;;EAEc,EAAA,WAAJV,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAZ2B;;;EAe5BY,EAAAA,cAAc,GAAG;EACf,IAAA,OAAO,IAAKC,CAAAA,SAAL,EAAoB,IAAA,IAAA,CAAKC,WAAL,EAA3B,CAAA;EACD,GAjB2B;;;EAoB5BC,EAAAA,sBAAsB,GAAG;MACvB,OAAO;EACL,MAAA,CAACd,cAAD,GAAkB,IAAKY,CAAAA,SAAL,EADb;QAEL,CAACX,gBAAD,GAAoB,IAAA,CAAKY,WAAL,EAAA;OAFtB,CAAA;EAID,GAAA;;EAEDA,EAAAA,WAAW,GAAG;EACZ,IAAA,OAAO,KAAKE,wBAAL,CAA8B,KAAKC,OAAL,CAAaZ,OAA3C,CAAP,CAAA;EACD,GA7B2B;;;IAgCN,OAAfa,eAAe,CAACC,MAAD,EAAS;MAC7B,OAAO,IAAA,CAAKC,IAAL,CAAU,YAAY;QAC3B,MAAMC,IAAI,GAAGV,OAAO,CAACW,mBAAR,CAA4B,IAA5B,EAAkCH,MAAlC,CAAb,CAAA;;EAEA,MAAA,IAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,QAAA,OAAA;EACD,OAAA;;EAED,MAAA,IAAI,OAAOE,IAAI,CAACF,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,QAAA,MAAM,IAAII,SAAJ,CAAe,CAAmBJ,iBAAAA,EAAAA,MAAO,GAAzC,CAAN,CAAA;EACD,OAAA;;QAEDE,IAAI,CAACF,MAAD,CAAJ,EAAA,CAAA;EACD,KAZM,CAAP,CAAA;EAaD,GAAA;;EA9C2B,CAAA;EAiD9B;EACA;EACA;;;AAEAK,0BAAkB,CAACb,OAAD,CAAlB;;;;;;;;"} {"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n"],"names":["NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","Tooltip","content","offset","placement","template","trigger","DefaultType","Popover","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config","jQueryInterface","config","each","data","getOrCreateInstance","TypeError","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAKA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,SAAS,CAAA;EAEtB,MAAMC,cAAc,GAAG,iBAAiB,CAAA;EACxC,MAAMC,gBAAgB,GAAG,eAAe,CAAA;EAExC,MAAMC,OAAO,GAAG;IACd,GAAGC,OAAO,CAACD,OAAO;EAClBE,EAAAA,OAAO,EAAE,EAAE;EACXC,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdC,EAAAA,SAAS,EAAE,OAAO;IAClBC,QAAQ,EAAE,sCAAsC,GAC9C,mCAAmC,GACnC,kCAAkC,GAClC,kCAAkC,GAClC,QAAQ;EACVC,EAAAA,OAAO,EAAE,OAAA;EACX,CAAC,CAAA;EAED,MAAMC,WAAW,GAAG;IAClB,GAAGN,OAAO,CAACM,WAAW;EACtBL,EAAAA,OAAO,EAAE,gCAAA;EACX,CAAC,CAAA;;EAED;EACA;EACA;;EAEA,MAAMM,OAAO,SAASP,OAAO,CAAC;EAC5B;EACA,EAAA,WAAWD,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;EAEA,EAAA,WAAWO,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAW,CAAA;EACpB,GAAA;EAEA,EAAA,WAAWV,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACAY,EAAAA,cAAc,GAAG;MACf,OAAO,IAAI,CAACC,SAAS,EAAE,IAAI,IAAI,CAACC,WAAW,EAAE,CAAA;EAC/C,GAAA;;EAEA;EACAC,EAAAA,sBAAsB,GAAG;MACvB,OAAO;EACL,MAAA,CAACd,cAAc,GAAG,IAAI,CAACY,SAAS,EAAE;EAClC,MAAA,CAACX,gBAAgB,GAAG,IAAI,CAACY,WAAW,EAAA;OACrC,CAAA;EACH,GAAA;EAEAA,EAAAA,WAAW,GAAG;MACZ,OAAO,IAAI,CAACE,wBAAwB,CAAC,IAAI,CAACC,OAAO,CAACZ,OAAO,CAAC,CAAA;EAC5D,GAAA;;EAEA;IACA,OAAOa,eAAe,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGV,OAAO,CAACW,mBAAmB,CAAC,IAAI,EAAEH,MAAM,CAAC,CAAA;EAEtD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAI,OAAOE,IAAI,CAACF,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAII,SAAS,CAAE,CAAmBJ,iBAAAA,EAAAA,MAAO,GAAE,CAAC,CAAA;EACpD,OAAA;QAEAE,IAAI,CAACF,MAAM,CAAC,EAAE,CAAA;EAChB,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;AAEAK,6BAAkB,CAACb,OAAO,CAAC;;;;;;;;"}
+48 -86
View File
@@ -1,26 +1,21 @@
/*! /*!
* Bootstrap scrollspy.js v5.2.3 (https://getbootstrap.com/) * Bootstrap scrollspy.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict'; })(this, (function (index_js, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): scrollspy.js * Bootstrap (v5.3.0-alpha1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -59,14 +54,16 @@
target: 'element', target: 'element',
threshold: 'array' threshold: 'array'
}; };
/** /**
* Class definition * Class definition
*/ */
class ScrollSpy extends BaseComponent__default.default { class ScrollSpy extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper super(element, config);
// this._element is the observablesContainer and config.target the menu links wrapper
this._targetLinks = new Map(); this._targetLinks = new Map();
this._observableSections = new Map(); this._observableSections = new Map();
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
@@ -77,87 +74,75 @@
parentScrollTop: 0 parentScrollTop: 0
}; };
this.refresh(); // initialize this.refresh(); // initialize
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
refresh() { refresh() {
this._initializeTargetsAndObservables(); this._initializeTargetsAndObservables();
this._maybeEnableSmoothScroll(); this._maybeEnableSmoothScroll();
if (this._observer) { if (this._observer) {
this._observer.disconnect(); this._observer.disconnect();
} else { } else {
this._observer = this._getNewObserver(); this._observer = this._getNewObserver();
} }
for (const section of this._observableSections.values()) { for (const section of this._observableSections.values()) {
this._observer.observe(section); this._observer.observe(section);
} }
} }
dispose() { dispose() {
this._observer.disconnect(); this._observer.disconnect();
super.dispose(); super.dispose();
} // Private }
// Private
_configAfterMerge(config) { _configAfterMerge(config) {
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
config.target = index.getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only config.target = index_js.getElement(config.target) || document.body;
// TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
if (typeof config.threshold === 'string') { if (typeof config.threshold === 'string') {
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
} }
return config; return config;
} }
_maybeEnableSmoothScroll() { _maybeEnableSmoothScroll() {
if (!this._config.smoothScroll) { if (!this._config.smoothScroll) {
return; return;
} // unregister any previous listeners }
// unregister any previous listeners
EventHandler__default.default.off(this._config.target, EVENT_CLICK); EventHandler.off(this._config.target, EVENT_CLICK);
EventHandler__default.default.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
const observableSection = this._observableSections.get(event.target.hash); const observableSection = this._observableSections.get(event.target.hash);
if (observableSection) { if (observableSection) {
event.preventDefault(); event.preventDefault();
const root = this._rootElement || window; const root = this._rootElement || window;
const height = observableSection.offsetTop - this._element.offsetTop; const height = observableSection.offsetTop - this._element.offsetTop;
if (root.scrollTo) { if (root.scrollTo) {
root.scrollTo({ root.scrollTo({
top: height, top: height,
behavior: 'smooth' behavior: 'smooth'
}); });
return; return;
} // Chrome 60 doesn't support `scrollTo` }
// Chrome 60 doesn't support `scrollTo`
root.scrollTop = height; root.scrollTop = height;
} }
}); });
} }
_getNewObserver() { _getNewObserver() {
const options = { const options = {
root: this._rootElement, root: this._rootElement,
@@ -165,146 +150,123 @@
rootMargin: this._config.rootMargin rootMargin: this._config.rootMargin
}; };
return new IntersectionObserver(entries => this._observerCallback(entries), options); return new IntersectionObserver(entries => this._observerCallback(entries), options);
} // The logic of selection }
// The logic of selection
_observerCallback(entries) { _observerCallback(entries) {
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
const activate = entry => { const activate = entry => {
this._previousScrollData.visibleEntryTop = entry.target.offsetTop; this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
this._process(targetElement(entry)); this._process(targetElement(entry));
}; };
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
this._previousScrollData.parentScrollTop = parentScrollTop; this._previousScrollData.parentScrollTop = parentScrollTop;
for (const entry of entries) { for (const entry of entries) {
if (!entry.isIntersecting) { if (!entry.isIntersecting) {
this._activeTarget = null; this._activeTarget = null;
this._clearActiveClass(targetElement(entry)); this._clearActiveClass(targetElement(entry));
continue; continue;
} }
const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop // if we are scrolling down, pick the bigger offsetTop
if (userScrollsDown && entryIsLowerThanPrevious) { if (userScrollsDown && entryIsLowerThanPrevious) {
activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration activate(entry);
// if parent isn't scrolled, let's keep the first visible item, breaking the iteration
if (!parentScrollTop) { if (!parentScrollTop) {
return; return;
} }
continue; continue;
} // if we are scrolling up, pick the smallest offsetTop }
// if we are scrolling up, pick the smallest offsetTop
if (!userScrollsDown && !entryIsLowerThanPrevious) { if (!userScrollsDown && !entryIsLowerThanPrevious) {
activate(entry); activate(entry);
} }
} }
} }
_initializeTargetsAndObservables() { _initializeTargetsAndObservables() {
this._targetLinks = new Map(); this._targetLinks = new Map();
this._observableSections = new Map(); this._observableSections = new Map();
const targetLinks = SelectorEngine__default.default.find(SELECTOR_TARGET_LINKS, this._config.target); const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
for (const anchor of targetLinks) { for (const anchor of targetLinks) {
// ensure that the anchor has an id and is not disabled // ensure that the anchor has an id and is not disabled
if (!anchor.hash || index.isDisabled(anchor)) { if (!anchor.hash || index_js.isDisabled(anchor)) {
continue; continue;
} }
const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
const observableSection = SelectorEngine__default.default.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible // ensure that the observableSection exists & is visible
if (index_js.isVisible(observableSection)) {
if (index.isVisible(observableSection)) {
this._targetLinks.set(anchor.hash, anchor); this._targetLinks.set(anchor.hash, anchor);
this._observableSections.set(anchor.hash, observableSection); this._observableSections.set(anchor.hash, observableSection);
} }
} }
} }
_process(target) { _process(target) {
if (this._activeTarget === target) { if (this._activeTarget === target) {
return; return;
} }
this._clearActiveClass(this._config.target); this._clearActiveClass(this._config.target);
this._activeTarget = target; this._activeTarget = target;
target.classList.add(CLASS_NAME_ACTIVE); target.classList.add(CLASS_NAME_ACTIVE);
this._activateParents(target); this._activateParents(target);
EventHandler.trigger(this._element, EVENT_ACTIVATE, {
EventHandler__default.default.trigger(this._element, EVENT_ACTIVATE, {
relatedTarget: target relatedTarget: target
}); });
} }
_activateParents(target) { _activateParents(target) {
// Activate dropdown parents // Activate dropdown parents
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE); SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
return; return;
} }
for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
for (const listGroup of SelectorEngine__default.default.parents(target, SELECTOR_NAV_LIST_GROUP)) {
// Set triggered links parents as active // Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
for (const item of SelectorEngine__default.default.prev(listGroup, SELECTOR_LINK_ITEMS)) { for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
item.classList.add(CLASS_NAME_ACTIVE); item.classList.add(CLASS_NAME_ACTIVE);
} }
} }
} }
_clearActiveClass(parent) { _clearActiveClass(parent) {
parent.classList.remove(CLASS_NAME_ACTIVE); parent.classList.remove(CLASS_NAME_ACTIVE);
const activeNodes = SelectorEngine__default.default.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent); const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
for (const node of activeNodes) { for (const node of activeNodes) {
node.classList.remove(CLASS_NAME_ACTIVE); node.classList.remove(CLASS_NAME_ACTIVE);
} }
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = ScrollSpy.getOrCreateInstance(this, config); const data = ScrollSpy.getOrCreateInstance(this, config);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => { for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
for (const spy of SelectorEngine__default.default.find(SELECTOR_DATA_SPY)) {
ScrollSpy.getOrCreateInstance(spy); ScrollSpy.getOrCreateInstance(spy);
} }
}); });
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(ScrollSpy); index_js.defineJQueryPlugin(ScrollSpy);
return ScrollSpy; return ScrollSpy;
+1 -1
View File
File diff suppressed because one or more lines are too long
+53 -111
View File
@@ -1,26 +1,21 @@
/*! /*!
* Bootstrap tab.js v5.2.3 (https://getbootstrap.com/) * Bootstrap tab.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict'; })(this, (function (index_js, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): tab.js * Bootstrap (v5.3.0-alpha1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -50,133 +45,108 @@
const SELECTOR_OUTER = '.nav-item, .list-group-item'; const SELECTOR_OUTER = '.nav-item, .list-group-item';
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab` const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab`
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`; const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
/** /**
* Class definition * Class definition
*/ */
class Tab extends BaseComponent__default.default { class Tab extends BaseComponent {
constructor(element) { constructor(element) {
super(element); super(element);
this._parent = this._element.closest(SELECTOR_TAB_PANEL); this._parent = this._element.closest(SELECTOR_TAB_PANEL);
if (!this._parent) { if (!this._parent) {
return; // todo: should Throw exception on v6 return;
// todo: should Throw exception on v6
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
} // Set up initial aria attributes }
// Set up initial aria attributes
this._setInitialAttributes(this._parent, this._getChildren()); this._setInitialAttributes(this._parent, this._getChildren());
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
}
EventHandler__default.default.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); // Getters
} // Getters
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
show() { show() {
// Shows this elem and deactivate the active sibling if exists // Shows this elem and deactivate the active sibling if exists
const innerElem = this._element; const innerElem = this._element;
if (this._elemIsActive(innerElem)) { if (this._elemIsActive(innerElem)) {
return; return;
} // Search for active tab on same parent to deactivate it
const active = this._getActiveElem();
const hideEvent = active ? EventHandler__default.default.trigger(active, EVENT_HIDE, {
relatedTarget: innerElem
}) : null;
const showEvent = EventHandler__default.default.trigger(innerElem, EVENT_SHOW, {
relatedTarget: active
});
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
return;
} }
// Search for active tab on same parent to deactivate it
const active = this._getActiveElem();
const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE, {
relatedTarget: innerElem
}) : null;
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, {
relatedTarget: active
});
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
return;
}
this._deactivate(active, innerElem); this._deactivate(active, innerElem);
this._activate(innerElem, active); this._activate(innerElem, active);
} // Private }
// Private
_activate(element, relatedElem) { _activate(element, relatedElem) {
if (!element) { if (!element) {
return; return;
} }
element.classList.add(CLASS_NAME_ACTIVE); element.classList.add(CLASS_NAME_ACTIVE);
this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
this._activate(index.getElementFromSelector(element)); // Search and activate/show the proper section
const complete = () => { const complete = () => {
if (element.getAttribute('role') !== 'tab') { if (element.getAttribute('role') !== 'tab') {
element.classList.add(CLASS_NAME_SHOW); element.classList.add(CLASS_NAME_SHOW);
return; return;
} }
element.removeAttribute('tabindex'); element.removeAttribute('tabindex');
element.setAttribute('aria-selected', true); element.setAttribute('aria-selected', true);
this._toggleDropDown(element, true); this._toggleDropDown(element, true);
EventHandler.trigger(element, EVENT_SHOWN, {
EventHandler__default.default.trigger(element, EVENT_SHOWN, {
relatedTarget: relatedElem relatedTarget: relatedElem
}); });
}; };
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE)); this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
} }
_deactivate(element, relatedElem) { _deactivate(element, relatedElem) {
if (!element) { if (!element) {
return; return;
} }
element.classList.remove(CLASS_NAME_ACTIVE); element.classList.remove(CLASS_NAME_ACTIVE);
element.blur(); element.blur();
this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
this._deactivate(index.getElementFromSelector(element)); // Search and deactivate the shown section too
const complete = () => { const complete = () => {
if (element.getAttribute('role') !== 'tab') { if (element.getAttribute('role') !== 'tab') {
element.classList.remove(CLASS_NAME_SHOW); element.classList.remove(CLASS_NAME_SHOW);
return; return;
} }
element.setAttribute('aria-selected', false); element.setAttribute('aria-selected', false);
element.setAttribute('tabindex', '-1'); element.setAttribute('tabindex', '-1');
this._toggleDropDown(element, false); this._toggleDropDown(element, false);
EventHandler.trigger(element, EVENT_HIDDEN, {
EventHandler__default.default.trigger(element, EVENT_HIDDEN, {
relatedTarget: relatedElem relatedTarget: relatedElem
}); });
}; };
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE)); this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
} }
_keydown(event) { _keydown(event) {
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) { if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
return; return;
} }
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
event.preventDefault(); event.preventDefault();
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
const nextActiveElement = index.getNextActiveElement(this._getChildren().filter(element => !index.isDisabled(element)), event.target, isNext, true); const nextActiveElement = index_js.getNextActiveElement(this._getChildren().filter(element => !index_js.isDisabled(element)), event.target, isNext, true);
if (nextActiveElement) { if (nextActiveElement) {
nextActiveElement.focus({ nextActiveElement.focus({
preventScroll: true preventScroll: true
@@ -184,141 +154,113 @@
Tab.getOrCreateInstance(nextActiveElement).show(); Tab.getOrCreateInstance(nextActiveElement).show();
} }
} }
_getChildren() { _getChildren() {
// collection of inner elements // collection of inner elements
return SelectorEngine__default.default.find(SELECTOR_INNER_ELEM, this._parent); return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
} }
_getActiveElem() { _getActiveElem() {
return this._getChildren().find(child => this._elemIsActive(child)) || null; return this._getChildren().find(child => this._elemIsActive(child)) || null;
} }
_setInitialAttributes(parent, children) { _setInitialAttributes(parent, children) {
this._setAttributeIfNotExists(parent, 'role', 'tablist'); this._setAttributeIfNotExists(parent, 'role', 'tablist');
for (const child of children) { for (const child of children) {
this._setInitialAttributesOnChild(child); this._setInitialAttributesOnChild(child);
} }
} }
_setInitialAttributesOnChild(child) { _setInitialAttributesOnChild(child) {
child = this._getInnerElement(child); child = this._getInnerElement(child);
const isActive = this._elemIsActive(child); const isActive = this._elemIsActive(child);
const outerElem = this._getOuterElement(child); const outerElem = this._getOuterElement(child);
child.setAttribute('aria-selected', isActive); child.setAttribute('aria-selected', isActive);
if (outerElem !== child) { if (outerElem !== child) {
this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
} }
if (!isActive) { if (!isActive) {
child.setAttribute('tabindex', '-1'); child.setAttribute('tabindex', '-1');
} }
this._setAttributeIfNotExists(child, 'role', 'tab');
this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too // set attributes to the related panel too
this._setInitialAttributesOnTargetPanel(child); this._setInitialAttributesOnTargetPanel(child);
} }
_setInitialAttributesOnTargetPanel(child) { _setInitialAttributesOnTargetPanel(child) {
const target = index.getElementFromSelector(child); const target = SelectorEngine.getElementFromSelector(child);
if (!target) { if (!target) {
return; return;
} }
this._setAttributeIfNotExists(target, 'role', 'tabpanel'); this._setAttributeIfNotExists(target, 'role', 'tabpanel');
if (child.id) { if (child.id) {
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`); this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);
} }
} }
_toggleDropDown(element, open) { _toggleDropDown(element, open) {
const outerElem = this._getOuterElement(element); const outerElem = this._getOuterElement(element);
if (!outerElem.classList.contains(CLASS_DROPDOWN)) { if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
return; return;
} }
const toggle = (selector, className) => { const toggle = (selector, className) => {
const element = SelectorEngine__default.default.findOne(selector, outerElem); const element = SelectorEngine.findOne(selector, outerElem);
if (element) { if (element) {
element.classList.toggle(className, open); element.classList.toggle(className, open);
} }
}; };
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW); toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);
outerElem.setAttribute('aria-expanded', open); outerElem.setAttribute('aria-expanded', open);
} }
_setAttributeIfNotExists(element, attribute, value) { _setAttributeIfNotExists(element, attribute, value) {
if (!element.hasAttribute(attribute)) { if (!element.hasAttribute(attribute)) {
element.setAttribute(attribute, value); element.setAttribute(attribute, value);
} }
} }
_elemIsActive(elem) { _elemIsActive(elem) {
return elem.classList.contains(CLASS_NAME_ACTIVE); return elem.classList.contains(CLASS_NAME_ACTIVE);
} // Try to get the inner element (usually the .nav-link) }
// Try to get the inner element (usually the .nav-link)
_getInnerElement(elem) { _getInnerElement(elem) {
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine__default.default.findOne(SELECTOR_INNER_ELEM, elem); return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
} // Try to get the outer element (usually the .nav-item) }
// Try to get the outer element (usually the .nav-item)
_getOuterElement(elem) { _getOuterElement(elem) {
return elem.closest(SELECTOR_OUTER) || elem; return elem.closest(SELECTOR_OUTER) || elem;
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Tab.getOrCreateInstance(this); const data = Tab.getOrCreateInstance(this);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
if (['A', 'AREA'].includes(this.tagName)) { if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault(); event.preventDefault();
} }
if (index_js.isDisabled(this)) {
if (index.isDisabled(this)) {
return; return;
} }
Tab.getOrCreateInstance(this).show(); Tab.getOrCreateInstance(this).show();
}); });
/** /**
* Initialize on focus * Initialize on focus
*/ */
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => { for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
for (const element of SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
Tab.getOrCreateInstance(element); Tab.getOrCreateInstance(element);
} }
}); });
@@ -326,7 +268,7 @@
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Tab); index_js.defineJQueryPlugin(Tab);
return Tab; return Tab;
+1 -1
View File
File diff suppressed because one or more lines are too long
+27 -70
View File
@@ -1,25 +1,21 @@
/*! /*!
* Bootstrap toast.js v5.2.3 (https://getbootstrap.com/) * Bootstrap toast.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component'), require('./util/component-functions')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./base-component.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) : typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions));
})(this, (function (index, EventHandler, BaseComponent, componentFunctions) { 'use strict'; })(this, (function (index_js, EventHandler, BaseComponent, componentFunctions_js) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): toast.js * Bootstrap (v5.3.0-alpha1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -37,7 +33,6 @@
const EVENT_SHOWN = `shown${EVENT_KEY}`; const EVENT_SHOWN = `shown${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade'; const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
const CLASS_NAME_SHOW = 'show'; const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_SHOWING = 'showing'; const CLASS_NAME_SHOWING = 'showing';
const DefaultType = { const DefaultType = {
@@ -50,119 +45,91 @@
autohide: true, autohide: true,
delay: 5000 delay: 5000
}; };
/** /**
* Class definition * Class definition
*/ */
class Toast extends BaseComponent__default.default { class Toast extends BaseComponent {
constructor(element, config) { constructor(element, config) {
super(element, config); super(element, config);
this._timeout = null; this._timeout = null;
this._hasMouseInteraction = false; this._hasMouseInteraction = false;
this._hasKeyboardInteraction = false; this._hasKeyboardInteraction = false;
this._setListeners(); this._setListeners();
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
show() { show() {
const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW); const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
if (showEvent.defaultPrevented) { if (showEvent.defaultPrevented) {
return; return;
} }
this._clearTimeout(); this._clearTimeout();
if (this._config.animation) { if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE); this._element.classList.add(CLASS_NAME_FADE);
} }
const complete = () => { const complete = () => {
this._element.classList.remove(CLASS_NAME_SHOWING); this._element.classList.remove(CLASS_NAME_SHOWING);
EventHandler.trigger(this._element, EVENT_SHOWN);
EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
this._maybeScheduleHide(); this._maybeScheduleHide();
}; };
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
index_js.reflow(this._element);
index.reflow(this._element);
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
this._queueCallback(complete, this._element, this._config.animation); this._queueCallback(complete, this._element, this._config.animation);
} }
hide() { hide() {
if (!this.isShown()) { if (!this.isShown()) {
return; return;
} }
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
} }
const complete = () => { const complete = () => {
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
EventHandler.trigger(this._element, EVENT_HIDDEN);
EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
}; };
this._element.classList.add(CLASS_NAME_SHOWING); this._element.classList.add(CLASS_NAME_SHOWING);
this._queueCallback(complete, this._element, this._config.animation); this._queueCallback(complete, this._element, this._config.animation);
} }
dispose() { dispose() {
this._clearTimeout(); this._clearTimeout();
if (this.isShown()) { if (this.isShown()) {
this._element.classList.remove(CLASS_NAME_SHOW); this._element.classList.remove(CLASS_NAME_SHOW);
} }
super.dispose(); super.dispose();
} }
isShown() { isShown() {
return this._element.classList.contains(CLASS_NAME_SHOW); return this._element.classList.contains(CLASS_NAME_SHOW);
} // Private }
// Private
_maybeScheduleHide() { _maybeScheduleHide() {
if (!this._config.autohide) { if (!this._config.autohide) {
return; return;
} }
if (this._hasMouseInteraction || this._hasKeyboardInteraction) { if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
return; return;
} }
this._timeout = setTimeout(() => { this._timeout = setTimeout(() => {
this.hide(); this.hide();
}, this._config.delay); }, this._config.delay);
} }
_onInteraction(event, isInteracting) { _onInteraction(event, isInteracting) {
switch (event.type) { switch (event.type) {
case 'mouseover': case 'mouseover':
@@ -171,7 +138,6 @@
this._hasMouseInteraction = isInteracting; this._hasMouseInteraction = isInteracting;
break; break;
} }
case 'focusin': case 'focusin':
case 'focusout': case 'focusout':
{ {
@@ -179,61 +145,52 @@
break; break;
} }
} }
if (isInteracting) { if (isInteracting) {
this._clearTimeout(); this._clearTimeout();
return; return;
} }
const nextElement = event.relatedTarget; const nextElement = event.relatedTarget;
if (this._element === nextElement || this._element.contains(nextElement)) { if (this._element === nextElement || this._element.contains(nextElement)) {
return; return;
} }
this._maybeScheduleHide(); this._maybeScheduleHide();
} }
_setListeners() { _setListeners() {
EventHandler__default.default.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
EventHandler__default.default.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
EventHandler__default.default.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
EventHandler__default.default.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
} }
_clearTimeout() { _clearTimeout() {
clearTimeout(this._timeout); clearTimeout(this._timeout);
this._timeout = null; this._timeout = null;
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Toast.getOrCreateInstance(this, config); const data = Toast.getOrCreateInstance(this, config);
if (typeof config === 'string') { if (typeof config === 'string') {
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](this); data[config](this);
} }
}); });
} }
} }
/** /**
* Data API implementation * Data API implementation
*/ */
componentFunctions_js.enableDismissTrigger(Toast);
componentFunctions.enableDismissTrigger(Toast);
/** /**
* jQuery * jQuery
*/ */
index.defineJQueryPlugin(Toast); index_js.defineJQueryPlugin(Toast);
return Toast; return Toast;
+1 -1
View File
File diff suppressed because one or more lines are too long
+70 -173
View File
@@ -1,18 +1,15 @@
/*! /*!
* Bootstrap tooltip.js v5.2.3 (https://getbootstrap.com/) * Bootstrap tooltip.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index'), require('./util/sanitizer'), require('./dom/event-handler'), require('./dom/manipulator'), require('./base-component'), require('./util/template-factory')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index.js'), require('./util/sanitizer.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js'), require('./util/template-factory.js')) :
typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './util/sanitizer', './dom/event-handler', './dom/manipulator', './base-component', './util/template-factory'], factory) : typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './util/sanitizer', './dom/event-handler', './dom/manipulator', './base-component', './util/template-factory'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global["@popperjs/core"], global.Index, global.Sanitizer, global.EventHandler, global.Manipulator, global.BaseComponent, global.TemplateFactory)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global["@popperjs/core"], global.Index, global.Sanitizer, global.EventHandler, global.Manipulator, global.BaseComponent, global.TemplateFactory));
})(this, (function (Popper, index, sanitizer, EventHandler, Manipulator, BaseComponent, TemplateFactory) { 'use strict'; })(this, (function (Popper, index_js, sanitizer_js, EventHandler, Manipulator, BaseComponent, TemplateFactory) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; function _interopNamespaceDefault(e) {
function _interopNamespace(e) {
if (e && e.__esModule) return e;
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } }); const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
if (e) { if (e) {
for (const k in e) { for (const k in e) {
@@ -29,18 +26,15 @@
return Object.freeze(n); return Object.freeze(n);
} }
const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper); const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
const TemplateFactory__default = /*#__PURE__*/_interopDefaultLegacy(TemplateFactory);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): tooltip.js * Bootstrap (v5.3.0-alpha1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -70,12 +64,12 @@
const AttachmentMap = { const AttachmentMap = {
AUTO: 'auto', AUTO: 'auto',
TOP: 'top', TOP: 'top',
RIGHT: index.isRTL() ? 'left' : 'right', RIGHT: index_js.isRTL() ? 'left' : 'right',
BOTTOM: 'bottom', BOTTOM: 'bottom',
LEFT: index.isRTL() ? 'right' : 'left' LEFT: index_js.isRTL() ? 'right' : 'left'
}; };
const Default = { const Default = {
allowList: sanitizer.DefaultAllowlist, allowList: sanitizer_js.DefaultAllowlist,
animation: true, animation: true,
boundary: 'clippingParents', boundary: 'clippingParents',
container: false, container: false,
@@ -112,171 +106,140 @@
title: '(string|element|function)', title: '(string|element|function)',
trigger: 'string' trigger: 'string'
}; };
/** /**
* Class definition * Class definition
*/ */
class Tooltip extends BaseComponent__default.default { class Tooltip extends BaseComponent {
constructor(element, config) { constructor(element, config) {
if (typeof Popper__namespace === 'undefined') { if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
} }
super(element, config);
super(element, config); // Private // Private
this._isEnabled = true; this._isEnabled = true;
this._timeout = 0; this._timeout = 0;
this._isHovered = null; this._isHovered = null;
this._activeTrigger = {}; this._activeTrigger = {};
this._popper = null; this._popper = null;
this._templateFactory = null; this._templateFactory = null;
this._newContent = null; // Protected this._newContent = null;
// Protected
this.tip = null; this.tip = null;
this._setListeners(); this._setListeners();
if (!this._config.selector) { if (!this._config.selector) {
this._fixTitle(); this._fixTitle();
} }
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
enable() { enable() {
this._isEnabled = true; this._isEnabled = true;
} }
disable() { disable() {
this._isEnabled = false; this._isEnabled = false;
} }
toggleEnabled() { toggleEnabled() {
this._isEnabled = !this._isEnabled; this._isEnabled = !this._isEnabled;
} }
toggle() { toggle() {
if (!this._isEnabled) { if (!this._isEnabled) {
return; return;
} }
this._activeTrigger.click = !this._activeTrigger.click; this._activeTrigger.click = !this._activeTrigger.click;
if (this._isShown()) { if (this._isShown()) {
this._leave(); this._leave();
return; return;
} }
this._enter(); this._enter();
} }
dispose() { dispose() {
clearTimeout(this._timeout); clearTimeout(this._timeout);
EventHandler__default.default.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
if (this._element.getAttribute('data-bs-original-title')) { if (this._element.getAttribute('data-bs-original-title')) {
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
} }
this._disposePopper(); this._disposePopper();
super.dispose(); super.dispose();
} }
show() { show() {
if (this._element.style.display === 'none') { if (this._element.style.display === 'none') {
throw new Error('Please use show on visible elements'); throw new Error('Please use show on visible elements');
} }
if (!(this._isWithContent() && this._isEnabled)) { if (!(this._isWithContent() && this._isEnabled)) {
return; return;
} }
const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));
const showEvent = EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_SHOW)); const shadowRoot = index_js.findShadowRoot(this._element);
const shadowRoot = index.findShadowRoot(this._element);
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
if (showEvent.defaultPrevented || !isInTheDom) { if (showEvent.defaultPrevented || !isInTheDom) {
return; return;
} // todo v6 remove this OR make it optional }
// todo v6 remove this OR make it optional
this._disposePopper(); this._disposePopper();
const tip = this._getTipElement(); const tip = this._getTipElement();
this._element.setAttribute('aria-describedby', tip.getAttribute('id')); this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
const { const {
container container
} = this._config; } = this._config;
if (!this._element.ownerDocument.documentElement.contains(this.tip)) { if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
container.append(tip); container.append(tip);
EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
} }
this._popper = this._createPopper(tip); this._popper = this._createPopper(tip);
tip.classList.add(CLASS_NAME_SHOW); // If this is a touch-enabled device we add extra tip.classList.add(CLASS_NAME_SHOW);
// If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children; // empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS // only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) { for (const element of [].concat(...document.body.children)) {
EventHandler__default.default.on(element, 'mouseover', index.noop); EventHandler.on(element, 'mouseover', index_js.noop);
} }
} }
const complete = () => { const complete = () => {
EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_SHOWN)); EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));
if (this._isHovered === false) { if (this._isHovered === false) {
this._leave(); this._leave();
} }
this._isHovered = false; this._isHovered = false;
}; };
this._queueCallback(complete, this.tip, this._isAnimated()); this._queueCallback(complete, this.tip, this._isAnimated());
} }
hide() { hide() {
if (!this._isShown()) { if (!this._isShown()) {
return; return;
} }
const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));
const hideEvent = EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_HIDE));
if (hideEvent.defaultPrevented) { if (hideEvent.defaultPrevented) {
return; return;
} }
const tip = this._getTipElement(); const tip = this._getTipElement();
tip.classList.remove(CLASS_NAME_SHOW);
tip.classList.remove(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) { if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) { for (const element of [].concat(...document.body.children)) {
EventHandler__default.default.off(element, 'mouseover', index.noop); EventHandler.off(element, 'mouseover', index_js.noop);
} }
} }
this._activeTrigger[TRIGGER_CLICK] = false; this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false; this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false; this._activeTrigger[TRIGGER_HOVER] = false;
@@ -286,133 +249,107 @@
if (this._isWithActiveTrigger()) { if (this._isWithActiveTrigger()) {
return; return;
} }
if (!this._isHovered) { if (!this._isHovered) {
this._disposePopper(); this._disposePopper();
} }
this._element.removeAttribute('aria-describedby'); this._element.removeAttribute('aria-describedby');
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));
EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));
}; };
this._queueCallback(complete, this.tip, this._isAnimated()); this._queueCallback(complete, this.tip, this._isAnimated());
} }
update() { update() {
if (this._popper) { if (this._popper) {
this._popper.update(); this._popper.update();
} }
} // Protected }
// Protected
_isWithContent() { _isWithContent() {
return Boolean(this._getTitle()); return Boolean(this._getTitle());
} }
_getTipElement() { _getTipElement() {
if (!this.tip) { if (!this.tip) {
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
} }
return this.tip; return this.tip;
} }
_createTipElement(content) { _createTipElement(content) {
const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6 const tip = this._getTemplateFactory(content).toHtml();
// todo: remove this check on v6
if (!tip) { if (!tip) {
return null; return null;
} }
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW); // todo: on v6 the following can be achieved with CSS only // todo: on v6 the following can be achieved with CSS only
tip.classList.add(`bs-${this.constructor.NAME}-auto`); tip.classList.add(`bs-${this.constructor.NAME}-auto`);
const tipId = index.getUID(this.constructor.NAME).toString(); const tipId = index_js.getUID(this.constructor.NAME).toString();
tip.setAttribute('id', tipId); tip.setAttribute('id', tipId);
if (this._isAnimated()) { if (this._isAnimated()) {
tip.classList.add(CLASS_NAME_FADE); tip.classList.add(CLASS_NAME_FADE);
} }
return tip; return tip;
} }
setContent(content) { setContent(content) {
this._newContent = content; this._newContent = content;
if (this._isShown()) { if (this._isShown()) {
this._disposePopper(); this._disposePopper();
this.show(); this.show();
} }
} }
_getTemplateFactory(content) { _getTemplateFactory(content) {
if (this._templateFactory) { if (this._templateFactory) {
this._templateFactory.changeContent(content); this._templateFactory.changeContent(content);
} else { } else {
this._templateFactory = new TemplateFactory__default.default({ ...this._config, this._templateFactory = new TemplateFactory({
...this._config,
// the `content` var has to be after `this._config` // the `content` var has to be after `this._config`
// to override config.content in case of popover // to override config.content in case of popover
content, content,
extraClass: this._resolvePossibleFunction(this._config.customClass) extraClass: this._resolvePossibleFunction(this._config.customClass)
}); });
} }
return this._templateFactory; return this._templateFactory;
} }
_getContentForTemplate() { _getContentForTemplate() {
return { return {
[SELECTOR_TOOLTIP_INNER]: this._getTitle() [SELECTOR_TOOLTIP_INNER]: this._getTitle()
}; };
} }
_getTitle() { _getTitle() {
return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
} // Private }
// Private
_initializeOnDelegatedTarget(event) { _initializeOnDelegatedTarget(event) {
return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
} }
_isAnimated() { _isAnimated() {
return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE); return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE);
} }
_isShown() { _isShown() {
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW); return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);
} }
_createPopper(tip) { _createPopper(tip) {
const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; const placement = index_js.execute(this._config.placement, [this, tip, this._element]);
const attachment = AttachmentMap[placement.toUpperCase()]; const attachment = AttachmentMap[placement.toUpperCase()];
return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment)); return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
} }
_getOffset() { _getOffset() {
const { const {
offset offset
} = this._config; } = this._config;
if (typeof offset === 'string') { if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10)); return offset.split(',').map(value => Number.parseInt(value, 10));
} }
if (typeof offset === 'function') { if (typeof offset === 'function') {
return popperData => offset(popperData, this._element); return popperData => offset(popperData, this._element);
} }
return offset; return offset;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return typeof arg === 'function' ? arg.call(this._element) : arg; return index_js.execute(arg, [this._element]);
} }
_getPopperConfig(attachment) { _getPopperConfig(attachment) {
const defaultBsPopperConfig = { const defaultBsPopperConfig = {
placement: attachment, placement: attachment,
@@ -447,200 +384,160 @@
} }
}] }]
}; };
return { ...defaultBsPopperConfig, return {
...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) ...defaultBsPopperConfig,
...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
}; };
} }
_setListeners() { _setListeners() {
const triggers = this._config.trigger.split(' '); const triggers = this._config.trigger.split(' ');
for (const trigger of triggers) { for (const trigger of triggers) {
if (trigger === 'click') { if (trigger === 'click') {
EventHandler__default.default.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => { EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event); const context = this._initializeOnDelegatedTarget(event);
context.toggle(); context.toggle();
}); });
} else if (trigger !== TRIGGER_MANUAL) { } else if (trigger !== TRIGGER_MANUAL) {
const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN); const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN);
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT); const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT);
EventHandler__default.default.on(this._element, eventIn, this._config.selector, event => { EventHandler.on(this._element, eventIn, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event); const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
context._enter(); context._enter();
}); });
EventHandler__default.default.on(this._element, eventOut, this._config.selector, event => { EventHandler.on(this._element, eventOut, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event); const context = this._initializeOnDelegatedTarget(event);
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
context._leave(); context._leave();
}); });
} }
} }
this._hideModalHandler = () => { this._hideModalHandler = () => {
if (this._element) { if (this._element) {
this.hide(); this.hide();
} }
}; };
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
EventHandler__default.default.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
} }
_fixTitle() { _fixTitle() {
const title = this._element.getAttribute('title'); const title = this._element.getAttribute('title');
if (!title) { if (!title) {
return; return;
} }
if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
this._element.setAttribute('aria-label', title); this._element.setAttribute('aria-label', title);
} }
this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
this._element.removeAttribute('title'); this._element.removeAttribute('title');
} }
_enter() { _enter() {
if (this._isShown() || this._isHovered) { if (this._isShown() || this._isHovered) {
this._isHovered = true; this._isHovered = true;
return; return;
} }
this._isHovered = true; this._isHovered = true;
this._setTimeout(() => { this._setTimeout(() => {
if (this._isHovered) { if (this._isHovered) {
this.show(); this.show();
} }
}, this._config.delay.show); }, this._config.delay.show);
} }
_leave() { _leave() {
if (this._isWithActiveTrigger()) { if (this._isWithActiveTrigger()) {
return; return;
} }
this._isHovered = false; this._isHovered = false;
this._setTimeout(() => { this._setTimeout(() => {
if (!this._isHovered) { if (!this._isHovered) {
this.hide(); this.hide();
} }
}, this._config.delay.hide); }, this._config.delay.hide);
} }
_setTimeout(handler, timeout) { _setTimeout(handler, timeout) {
clearTimeout(this._timeout); clearTimeout(this._timeout);
this._timeout = setTimeout(handler, timeout); this._timeout = setTimeout(handler, timeout);
} }
_isWithActiveTrigger() { _isWithActiveTrigger() {
return Object.values(this._activeTrigger).includes(true); return Object.values(this._activeTrigger).includes(true);
} }
_getConfig(config) { _getConfig(config) {
const dataAttributes = Manipulator__default.default.getDataAttributes(this._element); const dataAttributes = Manipulator.getDataAttributes(this._element);
for (const dataAttribute of Object.keys(dataAttributes)) { for (const dataAttribute of Object.keys(dataAttributes)) {
if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
delete dataAttributes[dataAttribute]; delete dataAttributes[dataAttribute];
} }
} }
config = {
config = { ...dataAttributes, ...dataAttributes,
...(typeof config === 'object' && config ? config : {}) ...(typeof config === 'object' && config ? config : {})
}; };
config = this._mergeConfigObj(config); config = this._mergeConfigObj(config);
config = this._configAfterMerge(config); config = this._configAfterMerge(config);
this._typeCheckConfig(config); this._typeCheckConfig(config);
return config; return config;
} }
_configAfterMerge(config) { _configAfterMerge(config) {
config.container = config.container === false ? document.body : index.getElement(config.container); config.container = config.container === false ? document.body : index_js.getElement(config.container);
if (typeof config.delay === 'number') { if (typeof config.delay === 'number') {
config.delay = { config.delay = {
show: config.delay, show: config.delay,
hide: config.delay hide: config.delay
}; };
} }
if (typeof config.title === 'number') { if (typeof config.title === 'number') {
config.title = config.title.toString(); config.title = config.title.toString();
} }
if (typeof config.content === 'number') { if (typeof config.content === 'number') {
config.content = config.content.toString(); config.content = config.content.toString();
} }
return config; return config;
} }
_getDelegateConfig() { _getDelegateConfig() {
const config = {}; const config = {};
for (const [key, value] of Object.entries(this._config)) {
for (const key in this._config) { if (this.constructor.Default[key] !== value) {
if (this.constructor.Default[key] !== this._config[key]) { config[key] = value;
config[key] = this._config[key];
} }
} }
config.selector = false; config.selector = false;
config.trigger = 'manual'; // In the future can be replaced with: config.trigger = 'manual';
// In the future can be replaced with:
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
// `Object.fromEntries(keysWithDifferentValues)` // `Object.fromEntries(keysWithDifferentValues)`
return config; return config;
} }
_disposePopper() { _disposePopper() {
if (this._popper) { if (this._popper) {
this._popper.destroy(); this._popper.destroy();
this._popper = null; this._popper = null;
} }
if (this.tip) { if (this.tip) {
this.tip.remove(); this.tip.remove();
this.tip = null; this.tip = null;
} }
} // Static }
// Static
static jQueryInterface(config) { static jQueryInterface(config) {
return this.each(function () { return this.each(function () {
const data = Tooltip.getOrCreateInstance(this, config); const data = Tooltip.getOrCreateInstance(this, config);
if (typeof config !== 'string') { if (typeof config !== 'string') {
return; return;
} }
if (typeof data[config] === 'undefined') { if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`); throw new TypeError(`No method named "${config}"`);
} }
data[config](); data[config]();
}); });
} }
} }
/** /**
* jQuery * jQuery
*/ */
index_js.defineJQueryPlugin(Tooltip);
index.defineJQueryPlugin(Tooltip);
return Tooltip; return Tooltip;
+1 -1
View File
File diff suppressed because one or more lines are too long
+24 -51
View File
@@ -1,25 +1,21 @@
/*! /*!
* Bootstrap backdrop.js v5.2.3 (https://getbootstrap.com/) * Bootstrap backdrop.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler'), require('./index'), require('./config')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler.js'), require('./index.js'), require('./config.js')) :
typeof define === 'function' && define.amd ? define(['../dom/event-handler', './index', './config'], factory) : typeof define === 'function' && define.amd ? define(['../dom/event-handler', './index', './config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Backdrop = factory(global.EventHandler, global.Index, global.Config)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Backdrop = factory(global.EventHandler, global.Index, global.Config));
})(this, (function (EventHandler, index, Config) { 'use strict'; })(this, (function (EventHandler, index_js, Config) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/backdrop.js * Bootstrap (v5.3.0-alpha1): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -35,8 +31,8 @@
isVisible: true, isVisible: true,
// if false, we use the backdrop helper without adding any element to the dom // 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 rootElement: 'body' // give the choice to place backdrop under different elements
}; };
const DefaultType = { const DefaultType = {
className: 'string', className: 'string',
clickCallback: '(function|null)', clickCallback: '(function|null)',
@@ -44,120 +40,97 @@
isVisible: 'boolean', isVisible: 'boolean',
rootElement: '(element|string)' rootElement: '(element|string)'
}; };
/** /**
* Class definition * Class definition
*/ */
class Backdrop extends Config__default.default { class Backdrop extends Config {
constructor(config) { constructor(config) {
super(); super();
this._config = this._getConfig(config); this._config = this._getConfig(config);
this._isAppended = false; this._isAppended = false;
this._element = null; this._element = null;
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
show(callback) { show(callback) {
if (!this._config.isVisible) { if (!this._config.isVisible) {
index.execute(callback); index_js.execute(callback);
return; return;
} }
this._append(); this._append();
const element = this._getElement(); const element = this._getElement();
if (this._config.isAnimated) { if (this._config.isAnimated) {
index.reflow(element); index_js.reflow(element);
} }
element.classList.add(CLASS_NAME_SHOW); element.classList.add(CLASS_NAME_SHOW);
this._emulateAnimation(() => { this._emulateAnimation(() => {
index.execute(callback); index_js.execute(callback);
}); });
} }
hide(callback) { hide(callback) {
if (!this._config.isVisible) { if (!this._config.isVisible) {
index.execute(callback); index_js.execute(callback);
return; return;
} }
this._getElement().classList.remove(CLASS_NAME_SHOW); this._getElement().classList.remove(CLASS_NAME_SHOW);
this._emulateAnimation(() => { this._emulateAnimation(() => {
this.dispose(); this.dispose();
index.execute(callback); index_js.execute(callback);
}); });
} }
dispose() { dispose() {
if (!this._isAppended) { if (!this._isAppended) {
return; return;
} }
EventHandler.off(this._element, EVENT_MOUSEDOWN);
EventHandler__default.default.off(this._element, EVENT_MOUSEDOWN);
this._element.remove(); this._element.remove();
this._isAppended = false; this._isAppended = false;
} // Private }
// Private
_getElement() { _getElement() {
if (!this._element) { if (!this._element) {
const backdrop = document.createElement('div'); const backdrop = document.createElement('div');
backdrop.className = this._config.className; backdrop.className = this._config.className;
if (this._config.isAnimated) { if (this._config.isAnimated) {
backdrop.classList.add(CLASS_NAME_FADE); backdrop.classList.add(CLASS_NAME_FADE);
} }
this._element = backdrop; this._element = backdrop;
} }
return this._element; return this._element;
} }
_configAfterMerge(config) { _configAfterMerge(config) {
// use getElement() with the default "body" to get a fresh Element on each instantiation // use getElement() with the default "body" to get a fresh Element on each instantiation
config.rootElement = index.getElement(config.rootElement); config.rootElement = index_js.getElement(config.rootElement);
return config; return config;
} }
_append() { _append() {
if (this._isAppended) { if (this._isAppended) {
return; return;
} }
const element = this._getElement(); const element = this._getElement();
this._config.rootElement.append(element); this._config.rootElement.append(element);
EventHandler.on(element, EVENT_MOUSEDOWN, () => {
EventHandler__default.default.on(element, EVENT_MOUSEDOWN, () => { index_js.execute(this._config.clickCallback);
index.execute(this._config.clickCallback);
}); });
this._isAppended = true; this._isAppended = true;
} }
_emulateAnimation(callback) { _emulateAnimation(callback) {
index.executeAfterTransition(callback, this._getElement(), this._config.isAnimated); index_js.executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
} }
} }
return Backdrop; return Backdrop;
+1 -1
View File
File diff suppressed because one or more lines are too long
+12 -18
View File
@@ -1,47 +1,41 @@
/*! /*!
* Bootstrap component-functions.js v5.2.3 (https://getbootstrap.com/) * Bootstrap component-functions.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('../dom/event-handler'), require('./index')) : typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('../dom/event-handler.js'), require('./index.js'), require('../dom/selector-engine.js')) :
typeof define === 'function' && define.amd ? define(['exports', '../dom/event-handler', './index'], factory) : typeof define === 'function' && define.amd ? define(['exports', '../dom/event-handler', './index', '../dom/selector-engine'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComponentFunctions = {}, global.EventHandler, global.Index)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComponentFunctions = {}, global.EventHandler, global.Index, global.SelectorEngine));
})(this, (function (exports, EventHandler, index) { 'use strict'; })(this, (function (exports, EventHandler, index_js, SelectorEngine) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/component-functions.js * Bootstrap (v5.3.0-alpha1): util/component-functions.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
const enableDismissTrigger = (component, method = 'hide') => { const enableDismissTrigger = (component, method = 'hide') => {
const clickEvent = `click.dismiss${component.EVENT_KEY}`; const clickEvent = `click.dismiss${component.EVENT_KEY}`;
const name = component.NAME; const name = component.NAME;
EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
if (['A', 'AREA'].includes(this.tagName)) { if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault(); event.preventDefault();
} }
if (index_js.isDisabled(this)) {
if (index.isDisabled(this)) {
return; return;
} }
const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
const instance = component.getOrCreateInstance(target);
const target = index.getElementFromSelector(this) || this.closest(`.${name}`); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
instance[method](); instance[method]();
}); });
}; };
exports.enableDismissTrigger = enableDismissTrigger; exports.enableDismissTrigger = enableDismissTrigger;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
})); }));
//# sourceMappingURL=component-functions.js.map //# sourceMappingURL=component-functions.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"component-functions.js","sources":["../../src/util/component-functions.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n"],"names":["enableDismissTrigger","component","method","clickEvent","EVENT_KEY","name","NAME","EventHandler","on","document","event","includes","tagName","preventDefault","isDisabled","target","getElementFromSelector","closest","instance","getOrCreateInstance"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;AAKMA,QAAAA,oBAAoB,GAAG,CAACC,SAAD,EAAYC,MAAM,GAAG,MAArB,KAAgC;EAC3D,EAAA,MAAMC,UAAU,GAAI,CAAA,aAAA,EAAeF,SAAS,CAACG,SAAU,CAAvD,CAAA,CAAA;EACA,EAAA,MAAMC,IAAI,GAAGJ,SAAS,CAACK,IAAvB,CAAA;EAEAC,EAAAA,6BAAY,CAACC,EAAb,CAAgBC,QAAhB,EAA0BN,UAA1B,EAAuC,CAAA,kBAAA,EAAoBE,IAAK,CAAA,EAAA,CAAhE,EAAqE,UAAUK,KAAV,EAAiB;MACpF,IAAI,CAAC,GAAD,EAAM,MAAN,CAAA,CAAcC,QAAd,CAAuB,IAAA,CAAKC,OAA5B,CAAJ,EAA0C;EACxCF,MAAAA,KAAK,CAACG,cAAN,EAAA,CAAA;EACD,KAAA;;EAED,IAAA,IAAIC,gBAAU,CAAC,IAAD,CAAd,EAAsB;EACpB,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAMC,MAAM,GAAGC,4BAAsB,CAAC,IAAD,CAAtB,IAAgC,IAAA,CAAKC,OAAL,CAAc,CAAGZ,CAAAA,EAAAA,IAAK,EAAtB,CAA/C,CAAA;MACA,MAAMa,QAAQ,GAAGjB,SAAS,CAACkB,mBAAV,CAA8BJ,MAA9B,CAAjB,CAVoF;;MAapFG,QAAQ,CAAChB,MAAD,CAAR,EAAA,CAAA;KAbF,CAAA,CAAA;EAeD;;;;;;;;;;"} {"version":3,"file":"component-functions.js","sources":["../../src/util/component-functions.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n"],"names":["enableDismissTrigger","component","method","clickEvent","EVENT_KEY","name","NAME","EventHandler","on","document","event","includes","tagName","preventDefault","isDisabled","target","SelectorEngine","getElementFromSelector","closest","instance","getOrCreateInstance"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;AAMMA,QAAAA,oBAAoB,GAAG,CAACC,SAAS,EAAEC,MAAM,GAAG,MAAM,KAAK;EAC3D,EAAA,MAAMC,UAAU,GAAI,CAAA,aAAA,EAAeF,SAAS,CAACG,SAAU,CAAC,CAAA,CAAA;EACxD,EAAA,MAAMC,IAAI,GAAGJ,SAAS,CAACK,IAAI,CAAA;EAE3BC,EAAAA,YAAY,CAACC,EAAE,CAACC,QAAQ,EAAEN,UAAU,EAAG,CAAA,kBAAA,EAAoBE,IAAK,CAAA,EAAA,CAAG,EAAE,UAAUK,KAAK,EAAE;EACpF,IAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACC,QAAQ,CAAC,IAAI,CAACC,OAAO,CAAC,EAAE;QACxCF,KAAK,CAACG,cAAc,EAAE,CAAA;EACxB,KAAA;EAEA,IAAA,IAAIC,mBAAU,CAAC,IAAI,CAAC,EAAE;EACpB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMC,MAAM,GAAGC,cAAc,CAACC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAACC,OAAO,CAAE,CAAGb,CAAAA,EAAAA,IAAK,EAAC,CAAC,CAAA;EACtF,IAAA,MAAMc,QAAQ,GAAGlB,SAAS,CAACmB,mBAAmB,CAACL,MAAM,CAAC,CAAA;;EAEtD;MACAI,QAAQ,CAACjB,MAAM,CAAC,EAAE,CAAA;EACpB,GAAC,CAAC,CAAA;EACJ;;;;;;;;;;"}
+11 -24
View File
@@ -1,24 +1,21 @@
/*! /*!
* Bootstrap config.js v5.2.3 (https://getbootstrap.com/) * Bootstrap config.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./index'), require('../dom/manipulator')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./index.js'), require('../dom/manipulator.js')) :
typeof define === 'function' && define.amd ? define(['./index', '../dom/manipulator'], factory) : typeof define === 'function' && define.amd ? define(['./index', '../dom/manipulator'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Config = factory(global.Index, global.Manipulator)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Config = factory(global.Index, global.Manipulator));
})(this, (function (index, Manipulator) { 'use strict'; })(this, (function (index_js, Manipulator) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/config.js * Bootstrap (v5.3.0-alpha1): util/config.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Class definition * Class definition
*/ */
@@ -28,50 +25,40 @@
static get Default() { static get Default() {
return {}; return {};
} }
static get DefaultType() { static get DefaultType() {
return {}; return {};
} }
static get NAME() { static get NAME() {
throw new Error('You have to implement the static method "NAME", for each component!'); throw new Error('You have to implement the static method "NAME", for each component!');
} }
_getConfig(config) { _getConfig(config) {
config = this._mergeConfigObj(config); config = this._mergeConfigObj(config);
config = this._configAfterMerge(config); config = this._configAfterMerge(config);
this._typeCheckConfig(config); this._typeCheckConfig(config);
return config; return config;
} }
_configAfterMerge(config) { _configAfterMerge(config) {
return config; return config;
} }
_mergeConfigObj(config, element) { _mergeConfigObj(config, element) {
const jsonConfig = index.isElement(element) ? Manipulator__default.default.getDataAttribute(element, 'config') : {}; // try to parse const jsonConfig = index_js.isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
return { ...this.constructor.Default, return {
...this.constructor.Default,
...(typeof jsonConfig === 'object' ? jsonConfig : {}), ...(typeof jsonConfig === 'object' ? jsonConfig : {}),
...(index.isElement(element) ? Manipulator__default.default.getDataAttributes(element) : {}), ...(index_js.isElement(element) ? Manipulator.getDataAttributes(element) : {}),
...(typeof config === 'object' ? config : {}) ...(typeof config === 'object' ? config : {})
}; };
} }
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) { _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
for (const property of Object.keys(configTypes)) { for (const [property, expectedTypes] of Object.entries(configTypes)) {
const expectedTypes = configTypes[property];
const value = config[property]; const value = config[property];
const valueType = index.isElement(value) ? 'element' : index.toType(value); const valueType = index_js.isElement(value) ? 'element' : index_js.toType(value);
if (!new RegExp(expectedTypes).test(valueType)) { if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
} }
} }
} }
} }
return Config; return Config;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"config.js","sources":["../../src/util/config.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.3): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\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 of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\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","Object","keys","expectedTypes","value","valueType","toType","RegExp","test","TypeError","toUpperCase"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;EAEA,MAAMA,MAAN,CAAa;EACX;EACkB,EAAA,WAAPC,OAAO,GAAG;EACnB,IAAA,OAAO,EAAP,CAAA;EACD,GAAA;;EAEqB,EAAA,WAAXC,WAAW,GAAG;EACvB,IAAA,OAAO,EAAP,CAAA;EACD,GAAA;;EAEc,EAAA,WAAJC,IAAI,GAAG;EAChB,IAAA,MAAM,IAAIC,KAAJ,CAAU,qEAAV,CAAN,CAAA;EACD,GAAA;;IAEDC,UAAU,CAACC,MAAD,EAAS;EACjBA,IAAAA,MAAM,GAAG,IAAA,CAAKC,eAAL,CAAqBD,MAArB,CAAT,CAAA;EACAA,IAAAA,MAAM,GAAG,IAAA,CAAKE,iBAAL,CAAuBF,MAAvB,CAAT,CAAA;;MACA,IAAKG,CAAAA,gBAAL,CAAsBH,MAAtB,CAAA,CAAA;;EACA,IAAA,OAAOA,MAAP,CAAA;EACD,GAAA;;IAEDE,iBAAiB,CAACF,MAAD,EAAS;EACxB,IAAA,OAAOA,MAAP,CAAA;EACD,GAAA;;EAEDC,EAAAA,eAAe,CAACD,MAAD,EAASI,OAAT,EAAkB;EAC/B,IAAA,MAAMC,UAAU,GAAGC,eAAS,CAACF,OAAD,CAAT,GAAqBG,4BAAW,CAACC,gBAAZ,CAA6BJ,OAA7B,EAAsC,QAAtC,CAArB,GAAuE,EAA1F,CAD+B;;EAG/B,IAAA,OAAO,EACL,GAAG,IAAKK,CAAAA,WAAL,CAAiBd,OADf;QAEL,IAAI,OAAOU,UAAP,KAAsB,QAAtB,GAAiCA,UAAjC,GAA8C,EAAlD,CAFK;EAGL,MAAA,IAAIC,eAAS,CAACF,OAAD,CAAT,GAAqBG,4BAAW,CAACG,iBAAZ,CAA8BN,OAA9B,CAArB,GAA8D,EAAlE,CAHK;EAIL,MAAA,IAAI,OAAOJ,MAAP,KAAkB,QAAlB,GAA6BA,MAA7B,GAAsC,EAA1C,CAAA;OAJF,CAAA;EAMD,GAAA;;IAEDG,gBAAgB,CAACH,MAAD,EAASW,WAAW,GAAG,IAAKF,CAAAA,WAAL,CAAiBb,WAAxC,EAAqD;MACnE,KAAK,MAAMgB,QAAX,IAAuBC,MAAM,CAACC,IAAP,CAAYH,WAAZ,CAAvB,EAAiD;EAC/C,MAAA,MAAMI,aAAa,GAAGJ,WAAW,CAACC,QAAD,CAAjC,CAAA;EACA,MAAA,MAAMI,KAAK,GAAGhB,MAAM,CAACY,QAAD,CAApB,CAAA;EACA,MAAA,MAAMK,SAAS,GAAGX,eAAS,CAACU,KAAD,CAAT,GAAmB,SAAnB,GAA+BE,YAAM,CAACF,KAAD,CAAvD,CAAA;;QAEA,IAAI,CAAC,IAAIG,MAAJ,CAAWJ,aAAX,EAA0BK,IAA1B,CAA+BH,SAA/B,CAAL,EAAgD;EAC9C,QAAA,MAAM,IAAII,SAAJ,CACH,GAAE,IAAKZ,CAAAA,WAAL,CAAiBZ,IAAjB,CAAsByB,WAAtB,EAAoC,aAAYV,QAAS,CAAA,iBAAA,EAAmBK,SAAU,CAAuBF,qBAAAA,EAAAA,aAAc,IAD1H,CAAN,CAAA;EAGD,OAAA;EACF,KAAA;EACF,GAAA;;EAhDU;;;;;;;;"} {"version":3,"file":"config.js","sources":["../../src/util/config.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.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;EACA,EAAA,WAAWC,OAAO,GAAG;EACnB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;EAEA,EAAA,WAAWC,WAAW,GAAG;EACvB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;EAEA,EAAA,WAAWC,IAAI,GAAG;EAChB,IAAA,MAAM,IAAIC,KAAK,CAAC,qEAAqE,CAAC,CAAA;EACxF,GAAA;IAEAC,UAAU,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,iBAAiB,CAACF,MAAM,EAAE;EACxB,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;EAEAC,EAAAA,eAAe,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,gBAAgB,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;EAC9C,QAAA,MAAM,IAAII,SAAS,CAChB,GAAE,IAAI,CAACZ,WAAW,CAACZ,IAAI,CAACyB,WAAW,EAAG,aAAYV,QAAS,CAAA,iBAAA,EAAmBK,SAAU,CAAuBJ,qBAAAA,EAAAA,aAAc,IAAG,CAClI,CAAA;EACH,OAAA;EACF,KAAA;EACF,GAAA;EACF;;;;;;;;"}
+18 -35
View File
@@ -1,26 +1,21 @@
/*! /*!
* Bootstrap focustrap.js v5.2.3 (https://getbootstrap.com/) * Bootstrap focustrap.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler'), require('../dom/selector-engine'), require('./config')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler.js'), require('../dom/selector-engine.js'), require('./config.js')) :
typeof define === 'function' && define.amd ? define(['../dom/event-handler', '../dom/selector-engine', './config'], factory) : typeof define === 'function' && define.amd ? define(['../dom/event-handler', '../dom/selector-engine', './config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Focustrap = factory(global.EventHandler, global.SelectorEngine, global.Config)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Focustrap = factory(global.EventHandler, global.SelectorEngine, global.Config));
})(this, (function (EventHandler, SelectorEngine, Config) { 'use strict'; })(this, (function (EventHandler, SelectorEngine, Config) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/focustrap.js * Bootstrap (v5.3.0-alpha1): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -36,75 +31,66 @@
const Default = { const Default = {
autofocus: true, autofocus: true,
trapElement: null // The element to trap focus inside of trapElement: null // The element to trap focus inside of
}; };
const DefaultType = { const DefaultType = {
autofocus: 'boolean', autofocus: 'boolean',
trapElement: 'element' trapElement: 'element'
}; };
/** /**
* Class definition * Class definition
*/ */
class FocusTrap extends Config__default.default { class FocusTrap extends Config {
constructor(config) { constructor(config) {
super(); super();
this._config = this._getConfig(config); this._config = this._getConfig(config);
this._isActive = false; this._isActive = false;
this._lastTabNavDirection = null; this._lastTabNavDirection = null;
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
activate() { activate() {
if (this._isActive) { if (this._isActive) {
return; return;
} }
if (this._config.autofocus) { if (this._config.autofocus) {
this._config.trapElement.focus(); this._config.trapElement.focus();
} }
EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop
EventHandler__default.default.off(document, EVENT_KEY); // guard against infinite focus loop EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
EventHandler__default.default.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
EventHandler__default.default.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
this._isActive = true; this._isActive = true;
} }
deactivate() { deactivate() {
if (!this._isActive) { if (!this._isActive) {
return; return;
} }
this._isActive = false; this._isActive = false;
EventHandler__default.default.off(document, EVENT_KEY); EventHandler.off(document, EVENT_KEY);
} // Private }
// Private
_handleFocusin(event) { _handleFocusin(event) {
const { const {
trapElement trapElement
} = this._config; } = this._config;
if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
return; return;
} }
const elements = SelectorEngine.focusableChildren(trapElement);
const elements = SelectorEngine__default.default.focusableChildren(trapElement);
if (elements.length === 0) { if (elements.length === 0) {
trapElement.focus(); trapElement.focus();
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
@@ -113,15 +99,12 @@
elements[0].focus(); elements[0].focus();
} }
} }
_handleKeydown(event) { _handleKeydown(event) {
if (event.key !== TAB_KEY) { if (event.key !== TAB_KEY) {
return; return;
} }
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
} }
} }
return FocusTrap; return FocusTrap;
+1 -1
View File
File diff suppressed because one or more lines are too long
+41 -110
View File
@@ -1,5 +1,5 @@
/*! /*!
* Bootstrap index.js v5.2.3 (https://getbootstrap.com/) * Bootstrap index.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -11,193 +11,146 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/index.js * Bootstrap (v5.3.0-alpha1): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
const MAX_UID = 1000000; const MAX_UID = 1000000;
const MILLISECONDS_MULTIPLIER = 1000; const MILLISECONDS_MULTIPLIER = 1000;
const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp) const TRANSITION_END = 'transitionend';
/**
* Properly escape IDs selectors to handle weird IDs
* @param {string} selector
* @returns {string}
*/
const parseSelector = selector => {
if (selector && window.CSS && window.CSS.escape) {
// document.querySelector needs escaping to handle IDs (html5+) containing for instance /
selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
}
return selector;
};
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
const toType = object => { const toType = object => {
if (object === null || object === undefined) { if (object === null || object === undefined) {
return `${object}`; return `${object}`;
} }
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
}; };
/** /**
* Public Util API * Public Util API
*/ */
const getUID = prefix => { const getUID = prefix => {
do { do {
prefix += Math.floor(Math.random() * MAX_UID); prefix += Math.floor(Math.random() * MAX_UID);
} while (document.getElementById(prefix)); } while (document.getElementById(prefix));
return prefix; return prefix;
}; };
const getSelector = element => {
let selector = element.getAttribute('data-bs-target');
if (!selector || selector === '#') {
let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
// so everything starting with `#` or `.`. If a "real" URL is used as the selector,
// `document.querySelector` will rightfully complain it is invalid.
// See https://github.com/twbs/bootstrap/issues/32273
if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
return null;
} // Just in case some CMS puts out a full URL with the anchor appended
if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
}
selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
}
return selector;
};
const getSelectorFromElement = element => {
const selector = getSelector(element);
if (selector) {
return document.querySelector(selector) ? selector : null;
}
return null;
};
const getElementFromSelector = element => {
const selector = getSelector(element);
return selector ? document.querySelector(selector) : null;
};
const getTransitionDurationFromElement = element => { const getTransitionDurationFromElement = element => {
if (!element) { if (!element) {
return 0; return 0;
} // Get transition-duration of the element }
// Get transition-duration of the element
let { let {
transitionDuration, transitionDuration,
transitionDelay transitionDelay
} = window.getComputedStyle(element); } = window.getComputedStyle(element);
const floatTransitionDuration = Number.parseFloat(transitionDuration); const floatTransitionDuration = Number.parseFloat(transitionDuration);
const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found const floatTransitionDelay = Number.parseFloat(transitionDelay);
// Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) { if (!floatTransitionDuration && !floatTransitionDelay) {
return 0; return 0;
} // If multiple durations are defined, take the first }
// If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0]; transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0]; transitionDelay = transitionDelay.split(',')[0];
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
}; };
const triggerTransitionEnd = element => { const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END)); element.dispatchEvent(new Event(TRANSITION_END));
}; };
const isElement = object => { const isElement = object => {
if (!object || typeof object !== 'object') { if (!object || typeof object !== 'object') {
return false; return false;
} }
if (typeof object.jquery !== 'undefined') { if (typeof object.jquery !== 'undefined') {
object = object[0]; object = object[0];
} }
return typeof object.nodeType !== 'undefined'; return typeof object.nodeType !== 'undefined';
}; };
const getElement = object => { const getElement = object => {
// it's a jQuery object or a node element // it's a jQuery object or a node element
if (isElement(object)) { if (isElement(object)) {
return object.jquery ? object[0] : object; return object.jquery ? object[0] : object;
} }
if (typeof object === 'string' && object.length > 0) { if (typeof object === 'string' && object.length > 0) {
return document.querySelector(object); return document.querySelector(parseSelector(object));
} }
return null; return null;
}; };
const isVisible = element => { const isVisible = element => {
if (!isElement(element) || element.getClientRects().length === 0) { if (!isElement(element) || element.getClientRects().length === 0) {
return false; return false;
} }
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed // Handle `details` element as its content may falsie appear visible when it is closed
const closedDetails = element.closest('details:not([open])'); const closedDetails = element.closest('details:not([open])');
if (!closedDetails) { if (!closedDetails) {
return elementIsVisible; return elementIsVisible;
} }
if (closedDetails !== element) { if (closedDetails !== element) {
const summary = element.closest('summary'); const summary = element.closest('summary');
if (summary && summary.parentNode !== closedDetails) { if (summary && summary.parentNode !== closedDetails) {
return false; return false;
} }
if (summary === null) { if (summary === null) {
return false; return false;
} }
} }
return elementIsVisible; return elementIsVisible;
}; };
const isDisabled = element => { const isDisabled = element => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) { if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return true; return true;
} }
if (element.classList.contains('disabled')) { if (element.classList.contains('disabled')) {
return true; return true;
} }
if (typeof element.disabled !== 'undefined') { if (typeof element.disabled !== 'undefined') {
return element.disabled; return element.disabled;
} }
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
}; };
const findShadowRoot = element => { const findShadowRoot = element => {
if (!document.documentElement.attachShadow) { if (!document.documentElement.attachShadow) {
return null; return null;
} // Can find the shadow root otherwise it'll return the document }
// Can find the shadow root otherwise it'll return the document
if (typeof element.getRootNode === 'function') { if (typeof element.getRootNode === 'function') {
const root = element.getRootNode(); const root = element.getRootNode();
return root instanceof ShadowRoot ? root : null; return root instanceof ShadowRoot ? root : null;
} }
if (element instanceof ShadowRoot) { if (element instanceof ShadowRoot) {
return element; return element;
} // when we don't find a shadow root }
// when we don't find a shadow root
if (!element.parentNode) { if (!element.parentNode) {
return null; return null;
} }
return findShadowRoot(element.parentNode); return findShadowRoot(element.parentNode);
}; };
const noop = () => {}; const noop = () => {};
/** /**
* Trick to restart an element's animation * Trick to restart an element's animation
* *
@@ -206,8 +159,6 @@
* *
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/ */
const reflow = element => { const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions element.offsetHeight; // eslint-disable-line no-unused-expressions
}; };
@@ -216,12 +167,9 @@
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return window.jQuery; return window.jQuery;
} }
return null; return null;
}; };
const DOMContentLoadedCallbacks = []; const DOMContentLoadedCallbacks = [];
const onDOMContentLoaded = callback => { const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
// add listener on the first call when the document is in loading state // add listener on the first call when the document is in loading state
@@ -232,26 +180,21 @@
} }
}); });
} }
DOMContentLoadedCallbacks.push(callback); DOMContentLoadedCallbacks.push(callback);
} else { } else {
callback(); callback();
} }
}; };
const isRTL = () => document.documentElement.dir === 'rtl'; const isRTL = () => document.documentElement.dir === 'rtl';
const defineJQueryPlugin = plugin => { const defineJQueryPlugin = plugin => {
onDOMContentLoaded(() => { onDOMContentLoaded(() => {
const $ = getjQuery(); const $ = getjQuery();
/* istanbul ignore if */ /* istanbul ignore if */
if ($) { if ($) {
const name = plugin.NAME; const name = plugin.NAME;
const JQUERY_NO_CONFLICT = $.fn[name]; const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface; $.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin; $.fn[name].Constructor = plugin;
$.fn[name].noConflict = () => { $.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT; $.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface; return plugin.jQueryInterface;
@@ -259,35 +202,27 @@
} }
}); });
}; };
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
const execute = callback => { return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
if (typeof callback === 'function') {
callback();
}
}; };
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) { if (!waitForTransition) {
execute(callback); execute(callback);
return; return;
} }
const durationPadding = 5; const durationPadding = 5;
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
let called = false; let called = false;
const handler = ({ const handler = ({
target target
}) => { }) => {
if (target !== transitionElement) { if (target !== transitionElement) {
return; return;
} }
called = true; called = true;
transitionElement.removeEventListener(TRANSITION_END, handler); transitionElement.removeEventListener(TRANSITION_END, handler);
execute(callback); execute(callback);
}; };
transitionElement.addEventListener(TRANSITION_END, handler); transitionElement.addEventListener(TRANSITION_END, handler);
setTimeout(() => { setTimeout(() => {
if (!called) { if (!called) {
@@ -295,6 +230,7 @@
} }
}, emulatedDuration); }, emulatedDuration);
}; };
/** /**
* Return the previous/next element of a list. * Return the previous/next element of a list.
* *
@@ -304,23 +240,19 @@
* @param isCycleAllowed * @param isCycleAllowed
* @return {Element|elem} The proper element * @return {Element|elem} The proper element
*/ */
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
const listLength = list.length; const listLength = list.length;
let index = list.indexOf(activeElement); // if the element does not exist in the list return an element let index = list.indexOf(activeElement);
// depending on the direction and if cycle is allowed
// if the element does not exist in the list return an element
// depending on the direction and if cycle is allowed
if (index === -1) { if (index === -1) {
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
} }
index += shouldGetNext ? 1 : -1; index += shouldGetNext ? 1 : -1;
if (isCycleAllowed) { if (isCycleAllowed) {
index = (index + listLength) % listLength; index = (index + listLength) % listLength;
} }
return list[Math.max(0, Math.min(index, listLength - 1))]; return list[Math.max(0, Math.min(index, listLength - 1))];
}; };
@@ -329,9 +261,7 @@
exports.executeAfterTransition = executeAfterTransition; exports.executeAfterTransition = executeAfterTransition;
exports.findShadowRoot = findShadowRoot; exports.findShadowRoot = findShadowRoot;
exports.getElement = getElement; exports.getElement = getElement;
exports.getElementFromSelector = getElementFromSelector;
exports.getNextActiveElement = getNextActiveElement; exports.getNextActiveElement = getNextActiveElement;
exports.getSelectorFromElement = getSelectorFromElement;
exports.getTransitionDurationFromElement = getTransitionDurationFromElement; exports.getTransitionDurationFromElement = getTransitionDurationFromElement;
exports.getUID = getUID; exports.getUID = getUID;
exports.getjQuery = getjQuery; exports.getjQuery = getjQuery;
@@ -341,11 +271,12 @@
exports.isVisible = isVisible; exports.isVisible = isVisible;
exports.noop = noop; exports.noop = noop;
exports.onDOMContentLoaded = onDOMContentLoaded; exports.onDOMContentLoaded = onDOMContentLoaded;
exports.parseSelector = parseSelector;
exports.reflow = reflow; exports.reflow = reflow;
exports.toType = toType; exports.toType = toType;
exports.triggerTransitionEnd = triggerTransitionEnd; exports.triggerTransitionEnd = triggerTransitionEnd;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
})); }));
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+8 -18
View File
@@ -1,5 +1,5 @@
/*! /*!
* Bootstrap sanitizer.js v5.2.3 (https://getbootstrap.com/) * Bootstrap sanitizer.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
@@ -11,42 +11,39 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/sanitizer.js * Bootstrap (v5.3.0-alpha1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
/** /**
* A pattern that recognizes a commonly useful subset of URLs that are safe. * A pattern that recognizes a commonly useful subset of URLs that are safe.
* *
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/ */
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
/** /**
* A pattern that matches safe data URLs. Only matches image, video and audio types. * A pattern that matches safe data URLs. Only matches image, video and audio types.
* *
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/ */
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
const allowedAttribute = (attribute, allowedAttributeList) => { const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase(); const attributeName = attribute.nodeName.toLowerCase();
if (allowedAttributeList.includes(attributeName)) { if (allowedAttributeList.includes(attributeName)) {
if (uriAttributes.has(attributeName)) { if (uriAttributes.has(attributeName)) {
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
} }
return true; return true;
} // Check if a regular expression validates the attribute. }
// Check if a regular expression validates the attribute.
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
}; };
const DefaultAllowlist = { const DefaultAllowlist = {
// Global attributes allowed on any supplied element below. // Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
@@ -84,40 +81,33 @@
if (!unsafeHtml.length) { if (!unsafeHtml.length) {
return unsafeHtml; return unsafeHtml;
} }
if (sanitizeFunction && typeof sanitizeFunction === 'function') { if (sanitizeFunction && typeof sanitizeFunction === 'function') {
return sanitizeFunction(unsafeHtml); return sanitizeFunction(unsafeHtml);
} }
const domParser = new window.DOMParser(); const domParser = new window.DOMParser();
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
const elements = [].concat(...createdDocument.body.querySelectorAll('*')); const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
for (const element of elements) { for (const element of elements) {
const elementName = element.nodeName.toLowerCase(); const elementName = element.nodeName.toLowerCase();
if (!Object.keys(allowList).includes(elementName)) { if (!Object.keys(allowList).includes(elementName)) {
element.remove(); element.remove();
continue; continue;
} }
const attributeList = [].concat(...element.attributes); const attributeList = [].concat(...element.attributes);
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
for (const attribute of attributeList) { for (const attribute of attributeList) {
if (!allowedAttribute(attribute, allowedAttributes)) { if (!allowedAttribute(attribute, allowedAttributes)) {
element.removeAttribute(attribute.nodeName); element.removeAttribute(attribute.nodeName);
} }
} }
} }
return createdDocument.body.innerHTML; return createdDocument.body.innerHTML;
} }
exports.DefaultAllowlist = DefaultAllowlist; exports.DefaultAllowlist = DefaultAllowlist;
exports.sanitizeHtml = sanitizeHtml; exports.sanitizeHtml = sanitizeHtml;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
})); }));
//# sourceMappingURL=sanitizer.js.map //# sourceMappingURL=sanitizer.js.map
+1 -1
View File
File diff suppressed because one or more lines are too long
+23 -50
View File
@@ -1,25 +1,21 @@
/*! /*!
* Bootstrap scrollbar.js v5.2.3 (https://getbootstrap.com/) * Bootstrap scrollbar.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/selector-engine'), require('../dom/manipulator'), require('./index')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/selector-engine.js'), require('../dom/manipulator.js'), require('./index.js')) :
typeof define === 'function' && define.amd ? define(['../dom/selector-engine', '../dom/manipulator', './index'], factory) : typeof define === 'function' && define.amd ? define(['../dom/selector-engine', '../dom/manipulator', './index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollbar = factory(global.SelectorEngine, global.Manipulator, global.Index)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollbar = factory(global.SelectorEngine, global.Manipulator, global.Index));
})(this, (function (SelectorEngine, Manipulator, index) { 'use strict'; })(this, (function (SelectorEngine, Manipulator, index_js) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/scrollBar.js * Bootstrap (v5.3.0-alpha1): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -28,6 +24,7 @@
const SELECTOR_STICKY_CONTENT = '.sticky-top'; const SELECTOR_STICKY_CONTENT = '.sticky-top';
const PROPERTY_PADDING = 'padding-right'; const PROPERTY_PADDING = 'padding-right';
const PROPERTY_MARGIN = 'margin-right'; const PROPERTY_MARGIN = 'margin-right';
/** /**
* Class definition * Class definition
*/ */
@@ -35,102 +32,78 @@
class ScrollBarHelper { class ScrollBarHelper {
constructor() { constructor() {
this._element = document.body; this._element = document.body;
} // Public }
// Public
getWidth() { getWidth() {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document.documentElement.clientWidth; const documentWidth = document.documentElement.clientWidth;
return Math.abs(window.innerWidth - documentWidth); return Math.abs(window.innerWidth - documentWidth);
} }
hide() { hide() {
const width = this.getWidth(); const width = this.getWidth();
this._disableOverFlow();
this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width // give padding to element to balance the hidden scrollbar width
this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
// trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
} }
reset() { reset() {
this._resetElementAttributes(this._element, 'overflow'); this._resetElementAttributes(this._element, 'overflow');
this._resetElementAttributes(this._element, PROPERTY_PADDING); this._resetElementAttributes(this._element, PROPERTY_PADDING);
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
} }
isOverflowing() { isOverflowing() {
return this.getWidth() > 0; return this.getWidth() > 0;
} // Private
_disableOverFlow() {
this._saveInitialAttribute(this._element, 'overflow');
this._element.style.overflow = 'hidden';
} }
// Private
_disableOverFlow() {
this._saveInitialAttribute(this._element, 'overflow');
this._element.style.overflow = 'hidden';
}
_setElementAttributes(selector, styleProperty, callback) { _setElementAttributes(selector, styleProperty, callback) {
const scrollbarWidth = this.getWidth(); const scrollbarWidth = this.getWidth();
const manipulationCallBack = element => { const manipulationCallBack = element => {
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
return; return;
} }
this._saveInitialAttribute(element, styleProperty); this._saveInitialAttribute(element, styleProperty);
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
}; };
this._applyManipulationCallback(selector, manipulationCallBack); this._applyManipulationCallback(selector, manipulationCallBack);
} }
_saveInitialAttribute(element, styleProperty) { _saveInitialAttribute(element, styleProperty) {
const actualValue = element.style.getPropertyValue(styleProperty); const actualValue = element.style.getPropertyValue(styleProperty);
if (actualValue) { if (actualValue) {
Manipulator__default.default.setDataAttribute(element, styleProperty, actualValue); Manipulator.setDataAttribute(element, styleProperty, actualValue);
} }
} }
_resetElementAttributes(selector, styleProperty) { _resetElementAttributes(selector, styleProperty) {
const manipulationCallBack = element => { const manipulationCallBack = element => {
const value = Manipulator__default.default.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero const value = Manipulator.getDataAttribute(element, styleProperty);
// We only want to remove the property if the value is `null`; the value can also be zero
if (value === null) { if (value === null) {
element.style.removeProperty(styleProperty); element.style.removeProperty(styleProperty);
return; return;
} }
Manipulator.removeDataAttribute(element, styleProperty);
Manipulator__default.default.removeDataAttribute(element, styleProperty);
element.style.setProperty(styleProperty, value); element.style.setProperty(styleProperty, value);
}; };
this._applyManipulationCallback(selector, manipulationCallBack); this._applyManipulationCallback(selector, manipulationCallBack);
} }
_applyManipulationCallback(selector, callBack) { _applyManipulationCallback(selector, callBack) {
if (index.isElement(selector)) { if (index_js.isElement(selector)) {
callBack(selector); callBack(selector);
return; return;
} }
for (const sel of SelectorEngine.find(selector, this._element)) {
for (const sel of SelectorEngine__default.default.find(selector, this._element)) {
callBack(sel); callBack(sel);
} }
} }
} }
return ScrollBarHelper; return ScrollBarHelper;
+1 -1
View File
File diff suppressed because one or more lines are too long
+23 -45
View File
@@ -1,25 +1,21 @@
/*! /*!
* Bootstrap swipe.js v5.2.3 (https://getbootstrap.com/) * Bootstrap swipe.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./config'), require('../dom/event-handler'), require('./index')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./config.js'), require('../dom/event-handler.js'), require('./index.js')) :
typeof define === 'function' && define.amd ? define(['./config', '../dom/event-handler', './index'], factory) : typeof define === 'function' && define.amd ? define(['./config', '../dom/event-handler', './index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swipe = factory(global.Config, global.EventHandler, global.Index)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swipe = factory(global.Config, global.EventHandler, global.Index));
})(this, (function (Config, EventHandler, index) { 'use strict'; })(this, (function (Config, EventHandler, index_js) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/swipe.js * Bootstrap (v5.3.0-alpha1): util/swipe.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
@@ -45,109 +41,91 @@
leftCallback: '(function|null)', leftCallback: '(function|null)',
rightCallback: '(function|null)' rightCallback: '(function|null)'
}; };
/** /**
* Class definition * Class definition
*/ */
class Swipe extends Config__default.default { class Swipe extends Config {
constructor(element, config) { constructor(element, config) {
super(); super();
this._element = element; this._element = element;
if (!element || !Swipe.isSupported()) { if (!element || !Swipe.isSupported()) {
return; return;
} }
this._config = this._getConfig(config); this._config = this._getConfig(config);
this._deltaX = 0; this._deltaX = 0;
this._supportPointerEvents = Boolean(window.PointerEvent); this._supportPointerEvents = Boolean(window.PointerEvent);
this._initEvents(); this._initEvents();
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
dispose() { dispose() {
EventHandler__default.default.off(this._element, EVENT_KEY); EventHandler.off(this._element, EVENT_KEY);
} // Private }
// Private
_start(event) { _start(event) {
if (!this._supportPointerEvents) { if (!this._supportPointerEvents) {
this._deltaX = event.touches[0].clientX; this._deltaX = event.touches[0].clientX;
return; return;
} }
if (this._eventIsPointerPenTouch(event)) { if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX; this._deltaX = event.clientX;
} }
} }
_end(event) { _end(event) {
if (this._eventIsPointerPenTouch(event)) { if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX - this._deltaX; this._deltaX = event.clientX - this._deltaX;
} }
this._handleSwipe(); this._handleSwipe();
index_js.execute(this._config.endCallback);
index.execute(this._config.endCallback);
} }
_move(event) { _move(event) {
this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
} }
_handleSwipe() { _handleSwipe() {
const absDeltaX = Math.abs(this._deltaX); const absDeltaX = Math.abs(this._deltaX);
if (absDeltaX <= SWIPE_THRESHOLD) { if (absDeltaX <= SWIPE_THRESHOLD) {
return; return;
} }
const direction = absDeltaX / this._deltaX; const direction = absDeltaX / this._deltaX;
this._deltaX = 0; this._deltaX = 0;
if (!direction) { if (!direction) {
return; return;
} }
index_js.execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
index.execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
} }
_initEvents() { _initEvents() {
if (this._supportPointerEvents) { if (this._supportPointerEvents) {
EventHandler__default.default.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
EventHandler__default.default.on(this._element, EVENT_POINTERUP, event => this._end(event)); EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
this._element.classList.add(CLASS_NAME_POINTER_EVENT); this._element.classList.add(CLASS_NAME_POINTER_EVENT);
} else { } else {
EventHandler__default.default.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
EventHandler__default.default.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
EventHandler__default.default.on(this._element, EVENT_TOUCHEND, event => this._end(event)); EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
} }
} }
_eventIsPointerPenTouch(event) { _eventIsPointerPenTouch(event) {
return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
} // Static }
// Static
static isSupported() { static isSupported() {
return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
} }
} }
return Swipe; return Swipe;
+1 -1
View File
File diff suppressed because one or more lines are too long
+24 -52
View File
@@ -1,32 +1,28 @@
/*! /*!
* Bootstrap template-factory.js v5.2.3 (https://getbootstrap.com/) * Bootstrap template-factory.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/ */
(function (global, factory) { (function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./sanitizer'), require('./index'), require('../dom/selector-engine'), require('./config')) : typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./sanitizer.js'), require('./index.js'), require('../dom/selector-engine.js'), require('./config.js')) :
typeof define === 'function' && define.amd ? define(['./sanitizer', './index', '../dom/selector-engine', './config'], factory) : typeof define === 'function' && define.amd ? define(['./sanitizer', './index', '../dom/selector-engine', './config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TemplateFactory = factory(global.Sanitizer, global.Index, global.SelectorEngine, global.Config)); (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TemplateFactory = factory(global.Sanitizer, global.Index, global.SelectorEngine, global.Config));
})(this, (function (sanitizer, index, SelectorEngine, Config) { 'use strict'; })(this, (function (sanitizer_js, index_js, SelectorEngine, Config) { 'use strict';
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): util/template-factory.js * Bootstrap (v5.3.0-alpha1): util/template-factory.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
/** /**
* Constants * Constants
*/ */
const NAME = 'TemplateFactory'; const NAME = 'TemplateFactory';
const Default = { const Default = {
allowList: sanitizer.DefaultAllowlist, allowList: sanitizer_js.DefaultAllowlist,
content: {}, content: {},
// { selector : text , selector2 : text2 , } // { selector : text , selector2 : text2 , }
extraClass: '', extraClass: '',
@@ -48,73 +44,62 @@
entry: '(string|element|function|null)', entry: '(string|element|function|null)',
selector: '(string|element)' selector: '(string|element)'
}; };
/** /**
* Class definition * Class definition
*/ */
class TemplateFactory extends Config__default.default { class TemplateFactory extends Config {
constructor(config) { constructor(config) {
super(); super();
this._config = this._getConfig(config); this._config = this._getConfig(config);
} // Getters }
// Getters
static get Default() { static get Default() {
return Default; return Default;
} }
static get DefaultType() { static get DefaultType() {
return DefaultType; return DefaultType;
} }
static get NAME() { static get NAME() {
return NAME; return NAME;
} // Public }
// Public
getContent() { getContent() {
return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
} }
hasContent() { hasContent() {
return this.getContent().length > 0; return this.getContent().length > 0;
} }
changeContent(content) { changeContent(content) {
this._checkContent(content); this._checkContent(content);
this._config.content = {
this._config.content = { ...this._config.content, ...this._config.content,
...content ...content
}; };
return this; return this;
} }
toHtml() { toHtml() {
const templateWrapper = document.createElement('div'); const templateWrapper = document.createElement('div');
templateWrapper.innerHTML = this._maybeSanitize(this._config.template); templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
for (const [selector, text] of Object.entries(this._config.content)) { for (const [selector, text] of Object.entries(this._config.content)) {
this._setContent(templateWrapper, text, selector); this._setContent(templateWrapper, text, selector);
} }
const template = templateWrapper.children[0]; const template = templateWrapper.children[0];
const extraClass = this._resolvePossibleFunction(this._config.extraClass); const extraClass = this._resolvePossibleFunction(this._config.extraClass);
if (extraClass) { if (extraClass) {
template.classList.add(...extraClass.split(' ')); template.classList.add(...extraClass.split(' '));
} }
return template; return template;
} // Private
_typeCheckConfig(config) {
super._typeCheckConfig(config);
this._checkContent(config.content);
} }
// Private
_typeCheckConfig(config) {
super._typeCheckConfig(config);
this._checkContent(config.content);
}
_checkContent(arg) { _checkContent(arg) {
for (const [selector, content] of Object.entries(arg)) { for (const [selector, content] of Object.entries(arg)) {
super._typeCheckConfig({ super._typeCheckConfig({
@@ -123,53 +108,40 @@
}, DefaultContentType); }, DefaultContentType);
} }
} }
_setContent(template, content, selector) { _setContent(template, content, selector) {
const templateElement = SelectorEngine__default.default.findOne(selector, template); const templateElement = SelectorEngine.findOne(selector, template);
if (!templateElement) { if (!templateElement) {
return; return;
} }
content = this._resolvePossibleFunction(content); content = this._resolvePossibleFunction(content);
if (!content) { if (!content) {
templateElement.remove(); templateElement.remove();
return; return;
} }
if (index_js.isElement(content)) {
if (index.isElement(content)) { this._putElementInTemplate(index_js.getElement(content), templateElement);
this._putElementInTemplate(index.getElement(content), templateElement);
return; return;
} }
if (this._config.html) { if (this._config.html) {
templateElement.innerHTML = this._maybeSanitize(content); templateElement.innerHTML = this._maybeSanitize(content);
return; return;
} }
templateElement.textContent = content; templateElement.textContent = content;
} }
_maybeSanitize(arg) { _maybeSanitize(arg) {
return this._config.sanitize ? sanitizer.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; return this._config.sanitize ? sanitizer_js.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
} }
_resolvePossibleFunction(arg) { _resolvePossibleFunction(arg) {
return typeof arg === 'function' ? arg(this) : arg; return index_js.execute(arg, [this]);
} }
_putElementInTemplate(element, templateElement) { _putElementInTemplate(element, templateElement) {
if (this._config.html) { if (this._config.html) {
templateElement.innerHTML = ''; templateElement.innerHTML = '';
templateElement.append(element); templateElement.append(element);
return; return;
} }
templateElement.textContent = element.textContent; templateElement.textContent = element.textContent;
} }
} }
return TemplateFactory; return TemplateFactory;
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,6 +1,6 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): index.esm.js * Bootstrap (v5.3.0-alpha1): index.esm.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
+1 -1
View File
@@ -1,6 +1,6 @@
/** /**
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
* Bootstrap (v5.2.3): index.umd.js * Bootstrap (v5.3.0-alpha1): index.umd.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */

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