From 6ce7451857a6d235ab37a236b3438f6ca9ebea04 Mon Sep 17 00:00:00 2001 From: Mario Lorenz Date: Mon, 2 Aug 2021 12:35:09 +0200 Subject: [PATCH 01/11] feat: remove unecessary bootstrap --- build/scss/vendor/_bootstrap-opt.scss | 78 +- build/scss/vendor/_bootstrap.scss | 78 +- build/vendor/bootstrap/LICENSE | 22 - build/vendor/bootstrap/README.md | 239 --- build/vendor/bootstrap/js/src/alert.js | 141 -- .../vendor/bootstrap/js/src/base-component.js | 48 - build/vendor/bootstrap/js/src/button.js | 95 -- build/vendor/bootstrap/js/src/carousel.js | 622 ------- build/vendor/bootstrap/js/src/collapse.js | 410 ----- build/vendor/bootstrap/js/src/dom/data.js | 57 - .../bootstrap/js/src/dom/event-handler.js | 349 ---- .../bootstrap/js/src/dom/manipulator.js | 80 - .../bootstrap/js/src/dom/selector-engine.js | 75 - build/vendor/bootstrap/js/src/dropdown.js | 544 ------ build/vendor/bootstrap/js/src/modal.js | 467 ------ build/vendor/bootstrap/js/src/offcanvas.js | 285 ---- build/vendor/bootstrap/js/src/popover.js | 171 -- build/vendor/bootstrap/js/src/scrollspy.js | 316 ---- build/vendor/bootstrap/js/src/tab.js | 230 --- build/vendor/bootstrap/js/src/toast.js | 217 --- build/vendor/bootstrap/js/src/tooltip.js | 800 --------- .../vendor/bootstrap/js/src/util/backdrop.js | 133 -- build/vendor/bootstrap/js/src/util/index.js | 258 --- .../vendor/bootstrap/js/src/util/sanitizer.js | 127 -- .../vendor/bootstrap/js/src/util/scrollbar.js | 81 - build/vendor/bootstrap/package.json | 177 -- build/vendor/bootstrap/scss/_accordion.scss | 118 -- build/vendor/bootstrap/scss/_alert.scss | 57 - build/vendor/bootstrap/scss/_badge.scss | 29 - build/vendor/bootstrap/scss/_breadcrumb.scss | 28 - .../vendor/bootstrap/scss/_button-group.scss | 139 -- build/vendor/bootstrap/scss/_buttons.scss | 111 -- build/vendor/bootstrap/scss/_card.scss | 215 --- build/vendor/bootstrap/scss/_carousel.scss | 229 --- build/vendor/bootstrap/scss/_close.scss | 40 - build/vendor/bootstrap/scss/_containers.scss | 41 - build/vendor/bootstrap/scss/_dropdown.scss | 240 --- build/vendor/bootstrap/scss/_forms.scss | 9 - build/vendor/bootstrap/scss/_functions.scss | 205 --- build/vendor/bootstrap/scss/_grid.scss | 22 - build/vendor/bootstrap/scss/_helpers.scss | 7 - build/vendor/bootstrap/scss/_images.scss | 42 - build/vendor/bootstrap/scss/_list-group.scss | 174 -- build/vendor/bootstrap/scss/_mixins.scss | 42 - build/vendor/bootstrap/scss/_modal.scss | 228 --- build/vendor/bootstrap/scss/_nav.scss | 139 -- build/vendor/bootstrap/scss/_navbar.scss | 306 ---- build/vendor/bootstrap/scss/_offcanvas.scss | 77 - build/vendor/bootstrap/scss/_pagination.scss | 64 - build/vendor/bootstrap/scss/_popover.scss | 158 -- build/vendor/bootstrap/scss/_progress.scss | 48 - build/vendor/bootstrap/scss/_reboot.scss | 621 ------- build/vendor/bootstrap/scss/_root.scss | 16 - build/vendor/bootstrap/scss/_spinners.scss | 69 - build/vendor/bootstrap/scss/_tables.scss | 150 -- build/vendor/bootstrap/scss/_toasts.scss | 51 - build/vendor/bootstrap/scss/_tooltip.scss | 115 -- build/vendor/bootstrap/scss/_transitions.scss | 21 - build/vendor/bootstrap/scss/_type.scss | 104 -- build/vendor/bootstrap/scss/_utilities.scss | 594 ------- build/vendor/bootstrap/scss/_variables.scss | 1464 ----------------- .../vendor/bootstrap/scss/bootstrap-grid.scss | 65 - .../bootstrap/scss/bootstrap-reboot.scss | 15 - .../bootstrap/scss/bootstrap-utilities.scss | 18 - build/vendor/bootstrap/scss/bootstrap.scss | 52 - .../scss/forms/_floating-labels.scss | 61 - .../bootstrap/scss/forms/_form-check.scss | 152 -- .../bootstrap/scss/forms/_form-control.scss | 219 --- .../bootstrap/scss/forms/_form-range.scss | 91 - .../bootstrap/scss/forms/_form-select.scss | 67 - .../bootstrap/scss/forms/_form-text.scss | 11 - .../bootstrap/scss/forms/_input-group.scss | 121 -- .../vendor/bootstrap/scss/forms/_labels.scss | 36 - .../bootstrap/scss/forms/_validation.scss | 12 - .../bootstrap/scss/helpers/_clearfix.scss | 3 - .../scss/helpers/_colored-links.scss | 12 - .../bootstrap/scss/helpers/_position.scss | 30 - .../vendor/bootstrap/scss/helpers/_ratio.scss | 26 - .../scss/helpers/_stretched-link.scss | 15 - .../scss/helpers/_text-truncation.scss | 7 - .../scss/helpers/_visually-hidden.scss | 8 - .../vendor/bootstrap/scss/mixins/_alert.scss | 11 - .../bootstrap/scss/mixins/_border-radius.scss | 78 - .../bootstrap/scss/mixins/_box-shadow.scss | 18 - .../bootstrap/scss/mixins/_breakpoints.scss | 127 -- .../bootstrap/scss/mixins/_buttons.scss | 133 -- .../vendor/bootstrap/scss/mixins/_caret.scss | 64 - .../bootstrap/scss/mixins/_clearfix.scss | 9 - .../bootstrap/scss/mixins/_color-scheme.scss | 7 - .../bootstrap/scss/mixins/_container.scss | 9 - .../bootstrap/scss/mixins/_deprecate.scss | 10 - .../vendor/bootstrap/scss/mixins/_forms.scss | 137 -- .../bootstrap/scss/mixins/_gradients.scss | 47 - build/vendor/bootstrap/scss/mixins/_grid.scss | 125 -- .../vendor/bootstrap/scss/mixins/_image.scss | 16 - .../bootstrap/scss/mixins/_list-group.scss | 24 - .../vendor/bootstrap/scss/mixins/_lists.scss | 7 - .../bootstrap/scss/mixins/_pagination.scss | 31 - .../bootstrap/scss/mixins/_reset-text.scss | 17 - .../vendor/bootstrap/scss/mixins/_resize.scss | 6 - .../scss/mixins/_table-variants.scss | 21 - .../bootstrap/scss/mixins/_text-truncate.scss | 8 - .../bootstrap/scss/mixins/_transition.scss | 26 - .../bootstrap/scss/mixins/_utilities.scss | 68 - .../scss/mixins/_visually-hidden.scss | 29 - .../vendor/bootstrap/scss/utilities/_api.scss | 47 - build/vendor/bootstrap/scss/vendor/_rfs.scss | 312 ---- 107 files changed, 72 insertions(+), 14409 deletions(-) delete mode 100644 build/vendor/bootstrap/LICENSE delete mode 100644 build/vendor/bootstrap/README.md delete mode 100644 build/vendor/bootstrap/js/src/alert.js delete mode 100644 build/vendor/bootstrap/js/src/base-component.js delete mode 100644 build/vendor/bootstrap/js/src/button.js delete mode 100644 build/vendor/bootstrap/js/src/carousel.js delete mode 100644 build/vendor/bootstrap/js/src/collapse.js delete mode 100644 build/vendor/bootstrap/js/src/dom/data.js delete mode 100644 build/vendor/bootstrap/js/src/dom/event-handler.js delete mode 100644 build/vendor/bootstrap/js/src/dom/manipulator.js delete mode 100644 build/vendor/bootstrap/js/src/dom/selector-engine.js delete mode 100644 build/vendor/bootstrap/js/src/dropdown.js delete mode 100644 build/vendor/bootstrap/js/src/modal.js delete mode 100644 build/vendor/bootstrap/js/src/offcanvas.js delete mode 100644 build/vendor/bootstrap/js/src/popover.js delete mode 100644 build/vendor/bootstrap/js/src/scrollspy.js delete mode 100644 build/vendor/bootstrap/js/src/tab.js delete mode 100644 build/vendor/bootstrap/js/src/toast.js delete mode 100644 build/vendor/bootstrap/js/src/tooltip.js delete mode 100644 build/vendor/bootstrap/js/src/util/backdrop.js delete mode 100644 build/vendor/bootstrap/js/src/util/index.js delete mode 100644 build/vendor/bootstrap/js/src/util/sanitizer.js delete mode 100644 build/vendor/bootstrap/js/src/util/scrollbar.js delete mode 100644 build/vendor/bootstrap/package.json delete mode 100644 build/vendor/bootstrap/scss/_accordion.scss delete mode 100644 build/vendor/bootstrap/scss/_alert.scss delete mode 100644 build/vendor/bootstrap/scss/_badge.scss delete mode 100644 build/vendor/bootstrap/scss/_breadcrumb.scss delete mode 100644 build/vendor/bootstrap/scss/_button-group.scss delete mode 100644 build/vendor/bootstrap/scss/_buttons.scss delete mode 100644 build/vendor/bootstrap/scss/_card.scss delete mode 100644 build/vendor/bootstrap/scss/_carousel.scss delete mode 100644 build/vendor/bootstrap/scss/_close.scss delete mode 100644 build/vendor/bootstrap/scss/_containers.scss delete mode 100644 build/vendor/bootstrap/scss/_dropdown.scss delete mode 100644 build/vendor/bootstrap/scss/_forms.scss delete mode 100644 build/vendor/bootstrap/scss/_functions.scss delete mode 100644 build/vendor/bootstrap/scss/_grid.scss delete mode 100644 build/vendor/bootstrap/scss/_helpers.scss delete mode 100644 build/vendor/bootstrap/scss/_images.scss delete mode 100644 build/vendor/bootstrap/scss/_list-group.scss delete mode 100644 build/vendor/bootstrap/scss/_mixins.scss delete mode 100644 build/vendor/bootstrap/scss/_modal.scss delete mode 100644 build/vendor/bootstrap/scss/_nav.scss delete mode 100644 build/vendor/bootstrap/scss/_navbar.scss delete mode 100644 build/vendor/bootstrap/scss/_offcanvas.scss delete mode 100644 build/vendor/bootstrap/scss/_pagination.scss delete mode 100644 build/vendor/bootstrap/scss/_popover.scss delete mode 100644 build/vendor/bootstrap/scss/_progress.scss delete mode 100644 build/vendor/bootstrap/scss/_reboot.scss delete mode 100644 build/vendor/bootstrap/scss/_root.scss delete mode 100644 build/vendor/bootstrap/scss/_spinners.scss delete mode 100644 build/vendor/bootstrap/scss/_tables.scss delete mode 100644 build/vendor/bootstrap/scss/_toasts.scss delete mode 100644 build/vendor/bootstrap/scss/_tooltip.scss delete mode 100644 build/vendor/bootstrap/scss/_transitions.scss delete mode 100644 build/vendor/bootstrap/scss/_type.scss delete mode 100644 build/vendor/bootstrap/scss/_utilities.scss delete mode 100644 build/vendor/bootstrap/scss/_variables.scss delete mode 100644 build/vendor/bootstrap/scss/bootstrap-grid.scss delete mode 100644 build/vendor/bootstrap/scss/bootstrap-reboot.scss delete mode 100644 build/vendor/bootstrap/scss/bootstrap-utilities.scss delete mode 100644 build/vendor/bootstrap/scss/bootstrap.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_floating-labels.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_form-check.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_form-control.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_form-range.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_form-select.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_form-text.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_input-group.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_labels.scss delete mode 100644 build/vendor/bootstrap/scss/forms/_validation.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_clearfix.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_colored-links.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_position.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_ratio.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_stretched-link.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_text-truncation.scss delete mode 100644 build/vendor/bootstrap/scss/helpers/_visually-hidden.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_alert.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_border-radius.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_box-shadow.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_breakpoints.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_buttons.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_caret.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_clearfix.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_color-scheme.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_container.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_deprecate.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_forms.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_gradients.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_grid.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_image.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_list-group.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_lists.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_pagination.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_reset-text.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_resize.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_table-variants.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_text-truncate.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_transition.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_utilities.scss delete mode 100644 build/vendor/bootstrap/scss/mixins/_visually-hidden.scss delete mode 100644 build/vendor/bootstrap/scss/utilities/_api.scss delete mode 100644 build/vendor/bootstrap/scss/vendor/_rfs.scss diff --git a/build/scss/vendor/_bootstrap-opt.scss b/build/scss/vendor/_bootstrap-opt.scss index 295a5ba..09602a6 100644 --- a/build/scss/vendor/_bootstrap-opt.scss +++ b/build/scss/vendor/_bootstrap-opt.scss @@ -1,55 +1,49 @@ -/*! - * Bootstrap v5.0.0 (https://getbootstrap.com/) - * Copyright 2011-2021 The Bootstrap Authors - * Copyright 2011-2021 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ // scss-docs-start import-stack // Configuration -@import "../../vendor/bootstrap/scss/functions"; -@import "../../vendor/bootstrap/scss/variables"; -@import "../../vendor/bootstrap/scss/mixins"; -@import "../../vendor/bootstrap/scss/utilities"; +@import "../../../node_modules/bootstrap/scss/functions"; +@import "../../../node_modules/bootstrap/scss/variables"; +@import "../../../node_modules/bootstrap/scss/mixins"; +@import "../../../node_modules/bootstrap/scss/utilities"; $theme-colors: map-remove($theme-colors, "info", "secondary", "warning"); $table-variants: map-remove($table-variants, "success", "danger", "info", "dark", "secondary", "warning"); // Layout & components -@import "../../vendor/bootstrap/scss/root"; -@import "../../vendor/bootstrap/scss/reboot"; -@import "../../vendor/bootstrap/scss/type"; -@import "../../vendor/bootstrap/scss/images"; -@import "../../vendor/bootstrap/scss/containers"; -@import "../../vendor/bootstrap/scss/grid"; -@import "../../vendor/bootstrap/scss/tables"; -@import "../../vendor/bootstrap/scss/forms"; -@import "../../vendor/bootstrap/scss/buttons"; -@import "../../vendor/bootstrap/scss/transitions"; -@import "../../vendor/bootstrap/scss/dropdown"; -@import "../../vendor/bootstrap/scss/button-group"; -@import "../../vendor/bootstrap/scss/nav"; -@import "../../vendor/bootstrap/scss/navbar"; -@import "../../vendor/bootstrap/scss/card"; -@import "../../vendor/bootstrap/scss/accordion"; -@import "../../vendor/bootstrap/scss/breadcrumb"; -@import "../../vendor/bootstrap/scss/pagination"; -@import "../../vendor/bootstrap/scss/badge"; -@import "../../vendor/bootstrap/scss/alert"; -//@import "../../vendor/bootstrap/scss/progress"; -@import "../../vendor/bootstrap/scss/list-group"; -@import "../../vendor/bootstrap/scss/close"; -//@import "../../vendor/bootstrap/scss/toasts"; -@import "../../vendor/bootstrap/scss/modal"; -//@import "../../vendor/bootstrap/scss/tooltip"; -//@import "../../vendor/bootstrap/scss/popover"; -@import "../../vendor/bootstrap/scss/carousel"; -//@import "../../vendor/bootstrap/scss/spinners"; -//@import "../../vendor/bootstrap/scss/offcanvas"; +@import "../../../node_modules/bootstrap/scss/root"; +@import "../../../node_modules/bootstrap/scss/reboot"; +@import "../../../node_modules/bootstrap/scss/type"; +@import "../../../node_modules/bootstrap/scss/images"; +@import "../../../node_modules/bootstrap/scss/containers"; +@import "../../../node_modules/bootstrap/scss/grid"; +@import "../../../node_modules/bootstrap/scss/tables"; +@import "../../../node_modules/bootstrap/scss/forms"; +@import "../../../node_modules/bootstrap/scss/buttons"; +@import "../../../node_modules/bootstrap/scss/transitions"; +@import "../../../node_modules/bootstrap/scss/dropdown"; +@import "../../../node_modules/bootstrap/scss/button-group"; +@import "../../../node_modules/bootstrap/scss/nav"; +@import "../../../node_modules/bootstrap/scss/navbar"; +@import "../../../node_modules/bootstrap/scss/card"; +@import "../../../node_modules/bootstrap/scss/accordion"; +@import "../../../node_modules/bootstrap/scss/breadcrumb"; +@import "../../../node_modules/bootstrap/scss/pagination"; +@import "../../../node_modules/bootstrap/scss/badge"; +@import "../../../node_modules/bootstrap/scss/alert"; +//@import "../../../node_modules/bootstrap/scss/progress"; +@import "../../../node_modules/bootstrap/scss/list-group"; +@import "../../../node_modules/bootstrap/scss/close"; +//@import "../../../node_modules/bootstrap/scss/toasts"; +@import "../../../node_modules/bootstrap/scss/modal"; +//@import "../../../node_modules/bootstrap/scss/tooltip"; +//@import "../../../node_modules/bootstrap/scss/popover"; +@import "../../../node_modules/bootstrap/scss/carousel"; +//@import "../../../node_modules/bootstrap/scss/spinners"; +//@import "../../../node_modules/bootstrap/scss/offcanvas"; // Helpers -@import "../../vendor/bootstrap/scss/helpers"; +@import "../../../node_modules/bootstrap/scss/helpers"; // Utilities -@import "../../vendor/bootstrap/scss/utilities/api"; +@import "../../../node_modules/bootstrap/scss/utilities/api"; // scss-docs-end import-stack diff --git a/build/scss/vendor/_bootstrap.scss b/build/scss/vendor/_bootstrap.scss index 6be847d..b893e62 100644 --- a/build/scss/vendor/_bootstrap.scss +++ b/build/scss/vendor/_bootstrap.scss @@ -1,53 +1,47 @@ -/*! - * Bootstrap v5.0.0 (https://getbootstrap.com/) - * Copyright 2011-2021 The Bootstrap Authors - * Copyright 2011-2021 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ // scss-docs-start import-stack // Configuration -@import "../../vendor/bootstrap/scss/functions"; -@import "../../vendor/bootstrap/scss/variables"; -@import "../../vendor/bootstrap/scss/mixins"; -@import "../../vendor/bootstrap/scss/utilities"; +@import "../../../node_modules/bootstrap/scss/functions"; +@import "../../../node_modules/bootstrap/scss/variables"; +@import "../../../node_modules/bootstrap/scss/mixins"; +@import "../../../node_modules/bootstrap/scss/utilities"; // Layout & components -@import "../../vendor/bootstrap/scss/root"; -@import "../../vendor/bootstrap/scss/reboot"; -@import "../../vendor/bootstrap/scss/type"; -@import "../../vendor/bootstrap/scss/images"; -@import "../../vendor/bootstrap/scss/containers"; -@import "../../vendor/bootstrap/scss/grid"; -@import "../../vendor/bootstrap/scss/tables"; -@import "../../vendor/bootstrap/scss/forms"; -@import "../../vendor/bootstrap/scss/buttons"; -@import "../../vendor/bootstrap/scss/transitions"; -@import "../../vendor/bootstrap/scss/dropdown"; -@import "../../vendor/bootstrap/scss/button-group"; -@import "../../vendor/bootstrap/scss/nav"; -@import "../../vendor/bootstrap/scss/navbar"; -@import "../../vendor/bootstrap/scss/card"; -@import "../../vendor/bootstrap/scss/accordion"; -@import "../../vendor/bootstrap/scss/breadcrumb"; -@import "../../vendor/bootstrap/scss/pagination"; -@import "../../vendor/bootstrap/scss/badge"; -@import "../../vendor/bootstrap/scss/alert"; -@import "../../vendor/bootstrap/scss/progress"; -@import "../../vendor/bootstrap/scss/list-group"; -@import "../../vendor/bootstrap/scss/close"; -@import "../../vendor/bootstrap/scss/toasts"; -@import "../../vendor/bootstrap/scss/modal"; -@import "../../vendor/bootstrap/scss/tooltip"; -@import "../../vendor/bootstrap/scss/popover"; -@import "../../vendor/bootstrap/scss/carousel"; -@import "../../vendor/bootstrap/scss/spinners"; -@import "../../vendor/bootstrap/scss/offcanvas"; +@import "../../../node_modules/bootstrap/scss/root"; +@import "../../../node_modules/bootstrap/scss/reboot"; +@import "../../../node_modules/bootstrap/scss/type"; +@import "../../../node_modules/bootstrap/scss/images"; +@import "../../../node_modules/bootstrap/scss/containers"; +@import "../../../node_modules/bootstrap/scss/grid"; +@import "../../../node_modules/bootstrap/scss/tables"; +@import "../../../node_modules/bootstrap/scss/forms"; +@import "../../../node_modules/bootstrap/scss/buttons"; +@import "../../../node_modules/bootstrap/scss/transitions"; +@import "../../../node_modules/bootstrap/scss/dropdown"; +@import "../../../node_modules/bootstrap/scss/button-group"; +@import "../../../node_modules/bootstrap/scss/nav"; +@import "../../../node_modules/bootstrap/scss/navbar"; +@import "../../../node_modules/bootstrap/scss/card"; +@import "../../../node_modules/bootstrap/scss/accordion"; +@import "../../../node_modules/bootstrap/scss/breadcrumb"; +@import "../../../node_modules/bootstrap/scss/pagination"; +@import "../../../node_modules/bootstrap/scss/badge"; +@import "../../../node_modules/bootstrap/scss/alert"; +@import "../../../node_modules/bootstrap/scss/progress"; +@import "../../../node_modules/bootstrap/scss/list-group"; +@import "../../../node_modules/bootstrap/scss/close"; +@import "../../../node_modules/bootstrap/scss/toasts"; +@import "../../../node_modules/bootstrap/scss/modal"; +@import "../../../node_modules/bootstrap/scss/tooltip"; +@import "../../../node_modules/bootstrap/scss/popover"; +@import "../../../node_modules/bootstrap/scss/carousel"; +@import "../../../node_modules/bootstrap/scss/spinners"; +@import "../../../node_modules/bootstrap/scss/offcanvas"; // Helpers -@import "../../vendor/bootstrap/scss/helpers"; +@import "../../../node_modules/bootstrap/scss/helpers"; // Utilities -@import "../../vendor/bootstrap/scss/utilities/api"; +@import "../../../node_modules/bootstrap/scss/utilities/api"; // scss-docs-end import-stack diff --git a/build/vendor/bootstrap/LICENSE b/build/vendor/bootstrap/LICENSE deleted file mode 100644 index 72dda23..0000000 --- a/build/vendor/bootstrap/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2021 Twitter, Inc. -Copyright (c) 2011-2021 The Bootstrap Authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/build/vendor/bootstrap/README.md b/build/vendor/bootstrap/README.md deleted file mode 100644 index 789aeb9..0000000 --- a/build/vendor/bootstrap/README.md +++ /dev/null @@ -1,239 +0,0 @@ -

- - Bootstrap logo - -

- -

Bootstrap

- -

- Sleek, intuitive, and powerful front-end framework for faster and easier web development. -
- Explore Bootstrap docs » -
-
- Report bug - · - Request feature - · - Themes - · - Blog -

- - -## Bootstrap 4 - -Our default branch is for development of our upcoming Bootstrap 5 release. Head to the [`v4-dev` branch](https://github.com/twbs/bootstrap/tree/v4-dev) to view the readme, documentation, and source code for Bootstrap 4. - - -## Table of contents - -- [Quick start](#quick-start) -- [Status](#status) -- [What's included](#whats-included) -- [Bugs and feature requests](#bugs-and-feature-requests) -- [Documentation](#documentation) -- [Contributing](#contributing) -- [Community](#community) -- [Versioning](#versioning) -- [Creators](#creators) -- [Thanks](#thanks) -- [Copyright and license](#copyright-and-license) - - -## Quick start - -Several quick start options are available: - -- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.0.0.zip) -- Clone the repo: `git clone https://github.com/twbs/bootstrap.git` -- Install with [npm](https://www.npmjs.com/): `npm install bootstrap` -- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap` -- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.0.0` -- 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.0/getting-started/introduction/) for information on the framework contents, templates and examples, and more. - - -## Status - -[![Slack](https://bootstrap-slack.herokuapp.com/badge.svg)](https://bootstrap-slack.herokuapp.com/) -[![Build Status](https://img.shields.io/github/workflow/status/twbs/bootstrap/JS%20Tests/main?label=JS%20Tests&logo=github)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Amain) -[![npm version](https://img.shields.io/npm/v/bootstrap)](https://www.npmjs.com/package/bootstrap) -[![Gem version](https://img.shields.io/gem/v/bootstrap)](https://rubygems.org/gems/bootstrap) -[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue)](https://atmospherejs.com/twbs/bootstrap) -[![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap)](https://packagist.org/packages/twbs/bootstrap) -[![NuGet](https://img.shields.io/nuget/vpre/bootstrap)](https://www.nuget.org/packages/bootstrap/absoluteLatest) -[![peerDependencies Status](https://img.shields.io/david/peer/twbs/bootstrap)](https://david-dm.org/twbs/bootstrap?type=peer) -[![devDependency Status](https://img.shields.io/david/dev/twbs/bootstrap)](https://david-dm.org/twbs/bootstrap?type=dev) -[![Coverage Status](https://img.shields.io/coveralls/github/twbs/bootstrap/main)](https://coveralls.io/github/twbs/bootstrap?branch=main) -[![CSS gzip size](https://img.badgesize.io/twbs/bootstrap/main/dist/css/bootstrap.min.css?compression=gzip&label=CSS%20gzip%20size)](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css) -[![CSS Brotli size](https://img.badgesize.io/twbs/bootstrap/main/dist/css/bootstrap.min.css?compression=brotli&label=CSS%20Brotli%20size)](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css) -[![JS gzip size](https://img.badgesize.io/twbs/bootstrap/main/dist/js/bootstrap.min.js?compression=gzip&label=JS%20gzip%20size)](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js) -[![JS Brotli size](https://img.badgesize.io/twbs/bootstrap/main/dist/js/bootstrap.min.js?compression=brotli&label=JS%20Brotli%20size)](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js) -[![BrowserStack Status](https://www.browserstack.com/automate/badge.svg?badge_key=SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229)](https://www.browserstack.com/automate/public-build/SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229) -[![Backers on Open Collective](https://img.shields.io/opencollective/backers/bootstrap)](#backers) -[![Sponsors on Open Collective](https://img.shields.io/opencollective/sponsors/bootstrap)](#sponsors) - - -## What's included - -Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this: - -```text -bootstrap/ -├── css/ -│ ├── bootstrap-grid.css -│ ├── bootstrap-grid.css.map -│ ├── bootstrap-grid.min.css -│ ├── bootstrap-grid.min.css.map -│ ├── bootstrap-grid.rtl.css -│ ├── bootstrap-grid.rtl.css.map -│ ├── bootstrap-grid.rtl.min.css -│ ├── bootstrap-grid.rtl.min.css.map -│ ├── bootstrap-reboot.css -│ ├── bootstrap-reboot.css.map -│ ├── bootstrap-reboot.min.css -│ ├── bootstrap-reboot.min.css.map -│ ├── bootstrap-reboot.rtl.css -│ ├── bootstrap-reboot.rtl.css.map -│ ├── bootstrap-reboot.rtl.min.css -│ ├── bootstrap-reboot.rtl.min.css.map -│ ├── bootstrap-utilities.css -│ ├── bootstrap-utilities.css.map -│ ├── bootstrap-utilities.min.css -│ ├── bootstrap-utilities.min.css.map -│ ├── bootstrap-utilities.rtl.css -│ ├── bootstrap-utilities.rtl.css.map -│ ├── bootstrap-utilities.rtl.min.css -│ ├── bootstrap-utilities.rtl.min.css.map -│ ├── bootstrap.css -│ ├── bootstrap.css.map -│ ├── bootstrap.min.css -│ ├── bootstrap.min.css.map -│ ├── bootstrap.rtl.css -│ ├── bootstrap.rtl.css.map -│ ├── bootstrap.rtl.min.css -│ └── bootstrap.rtl.min.css.map -└── js/ - ├── bootstrap.bundle.js - ├── bootstrap.bundle.js.map - ├── bootstrap.bundle.min.js - ├── bootstrap.bundle.min.js.map - ├── bootstrap.esm.js - ├── bootstrap.esm.js.map - ├── bootstrap.esm.min.js - ├── bootstrap.esm.min.js.map - ├── bootstrap.js - ├── bootstrap.js.map - ├── bootstrap.min.js - └── bootstrap.min.js.map -``` - -We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Bundled JS files (`bootstrap.bundle.js` and minified `bootstrap.bundle.min.js`) include [Popper](https://popper.js.org/). - - -## Bugs and feature requests - -Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new). - - -## Documentation - -Bootstrap's documentation, included in this repo in the root directory, is built with [Hugo](https://gohugo.io/) and publicly hosted on GitHub Pages at . The docs may also be run locally. - -Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/assets/js/search.js`. - -### Running documentation locally - -1. Run `npm install` to install the Node.js dependencies, including Hugo (the site builder). -2. Run `npm run test` (or a specific npm script) to rebuild distributed CSS and JavaScript files, as well as our docs assets. -3. From the root `/bootstrap` directory, run `npm run docs-serve` in the command line. -4. Open `http://localhost:9001/` in your browser, and voilà. - -Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/). - -### Documentation for previous releases - -You can find all our previous releases docs on . - -[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. - - -## Contributing - -Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. - -Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/main/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo). - -Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/main/.editorconfig) for easy use in common text editors. Read more and download plugins at . - - -## Community - -Get updates on Bootstrap's development and chat with the project maintainers and community members. - -- Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap). -- Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/). -- Join [the official Slack room](https://bootstrap-slack.herokuapp.com/). -- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel. -- Implementation help may be found at Stack Overflow (tagged [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5)). -- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability. - - -## Versioning - -For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we adhere to those rules whenever possible. - -See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release. - - -## Creators - -**Mark Otto** - -- -- - -**Jacob Thornton** - -- -- - - -## Thanks - - - BrowserStack Logo - - -Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers! - - -## Sponsors - -Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/bootstrap#sponsor)] - -[![OC sponsor 0](https://opencollective.com/bootstrap/sponsor/0/avatar.svg)](https://opencollective.com/bootstrap/sponsor/0/website) -[![OC sponsor 1](https://opencollective.com/bootstrap/sponsor/1/avatar.svg)](https://opencollective.com/bootstrap/sponsor/1/website) -[![OC sponsor 2](https://opencollective.com/bootstrap/sponsor/2/avatar.svg)](https://opencollective.com/bootstrap/sponsor/2/website) -[![OC sponsor 3](https://opencollective.com/bootstrap/sponsor/3/avatar.svg)](https://opencollective.com/bootstrap/sponsor/3/website) -[![OC sponsor 4](https://opencollective.com/bootstrap/sponsor/4/avatar.svg)](https://opencollective.com/bootstrap/sponsor/4/website) -[![OC sponsor 5](https://opencollective.com/bootstrap/sponsor/5/avatar.svg)](https://opencollective.com/bootstrap/sponsor/5/website) -[![OC sponsor 6](https://opencollective.com/bootstrap/sponsor/6/avatar.svg)](https://opencollective.com/bootstrap/sponsor/6/website) -[![OC sponsor 7](https://opencollective.com/bootstrap/sponsor/7/avatar.svg)](https://opencollective.com/bootstrap/sponsor/7/website) -[![OC sponsor 8](https://opencollective.com/bootstrap/sponsor/8/avatar.svg)](https://opencollective.com/bootstrap/sponsor/8/website) -[![OC sponsor 9](https://opencollective.com/bootstrap/sponsor/9/avatar.svg)](https://opencollective.com/bootstrap/sponsor/9/website) - - -## Backers - -Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/bootstrap#backer)] - -[![Backers](https://opencollective.com/bootstrap/backers.svg?width=890)](https://opencollective.com/bootstrap#backers) - - -## Copyright and license - -Code and documentation copyright 2011–2021 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/). diff --git a/build/vendor/bootstrap/js/src/alert.js b/build/vendor/bootstrap/js/src/alert.js deleted file mode 100644 index 8840415..0000000 --- a/build/vendor/bootstrap/js/src/alert.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): alert.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { - defineJQueryPlugin, - emulateTransitionEnd, - getElementFromSelector, - getTransitionDurationFromElement -} from './util/index' -import Data from './dom/data' -import EventHandler from './dom/event-handler' -import BaseComponent from './base-component' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'alert' -const DATA_KEY = 'bs.alert' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' - -const SELECTOR_DISMISS = '[data-bs-dismiss="alert"]' - -const EVENT_CLOSE = `close${EVENT_KEY}` -const EVENT_CLOSED = `closed${EVENT_KEY}` -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` - -const CLASS_NAME_ALERT = 'alert' -const CLASS_NAME_FADE = 'fade' -const CLASS_NAME_SHOW = 'show' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Alert extends BaseComponent { - // Getters - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - close(element) { - const rootElement = element ? this._getRootElement(element) : this._element - const customEvent = this._triggerCloseEvent(rootElement) - - if (customEvent === null || customEvent.defaultPrevented) { - return - } - - this._removeElement(rootElement) - } - - // Private - - _getRootElement(element) { - return getElementFromSelector(element) || element.closest(`.${CLASS_NAME_ALERT}`) - } - - _triggerCloseEvent(element) { - return EventHandler.trigger(element, EVENT_CLOSE) - } - - _removeElement(element) { - element.classList.remove(CLASS_NAME_SHOW) - - if (!element.classList.contains(CLASS_NAME_FADE)) { - this._destroyElement(element) - return - } - - const transitionDuration = getTransitionDurationFromElement(element) - - EventHandler.one(element, 'transitionend', () => this._destroyElement(element)) - emulateTransitionEnd(element, transitionDuration) - } - - _destroyElement(element) { - if (element.parentNode) { - element.parentNode.removeChild(element) - } - - EventHandler.trigger(element, EVENT_CLOSED) - } - - // Static - - static jQueryInterface(config) { - return this.each(function () { - let data = Data.get(this, DATA_KEY) - - if (!data) { - data = new Alert(this) - } - - if (config === 'close') { - data[config](this) - } - }) - } - - static handleDismiss(alertInstance) { - return function (event) { - if (event) { - event.preventDefault() - } - - alertInstance.close(this) - } - } -} - -/** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert.handleDismiss(new Alert())) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Alert to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Alert) - -export default Alert diff --git a/build/vendor/bootstrap/js/src/base-component.js b/build/vendor/bootstrap/js/src/base-component.js deleted file mode 100644 index a0bb623..0000000 --- a/build/vendor/bootstrap/js/src/base-component.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): base-component.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import Data from './dom/data' -import EventHandler from './dom/event-handler' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const VERSION = '5.0.0' - -class BaseComponent { - constructor(element) { - element = typeof element === 'string' ? document.querySelector(element) : element - - if (!element) { - return - } - - this._element = element - Data.set(this._element, this.constructor.DATA_KEY, this) - } - - dispose() { - Data.remove(this._element, this.constructor.DATA_KEY) - EventHandler.off(this._element, `.${this.constructor.DATA_KEY}`) - this._element = null - } - - /** Static */ - - static getInstance(element) { - return Data.get(element, this.DATA_KEY) - } - - static get VERSION() { - return VERSION - } -} - -export default BaseComponent diff --git a/build/vendor/bootstrap/js/src/button.js b/build/vendor/bootstrap/js/src/button.js deleted file mode 100644 index 45c691d..0000000 --- a/build/vendor/bootstrap/js/src/button.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): button.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { defineJQueryPlugin } from './util/index' -import Data from './dom/data' -import EventHandler from './dom/event-handler' -import BaseComponent from './base-component' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'button' -const DATA_KEY = 'bs.button' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' - -const CLASS_NAME_ACTIVE = 'active' - -const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]' - -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Button extends BaseComponent { - // Getters - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - toggle() { - // 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)) - } - - // Static - - static jQueryInterface(config) { - return this.each(function () { - let data = Data.get(this, DATA_KEY) - - if (!data) { - data = new Button(this) - } - - if (config === 'toggle') { - data[config]() - } - }) - } -} - -/** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => { - event.preventDefault() - - const button = event.target.closest(SELECTOR_DATA_TOGGLE) - - let data = Data.get(button, DATA_KEY) - if (!data) { - data = new Button(button) - } - - data.toggle() -}) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Button to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Button) - -export default Button diff --git a/build/vendor/bootstrap/js/src/carousel.js b/build/vendor/bootstrap/js/src/carousel.js deleted file mode 100644 index 5bf7225..0000000 --- a/build/vendor/bootstrap/js/src/carousel.js +++ /dev/null @@ -1,622 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): carousel.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { - defineJQueryPlugin, - emulateTransitionEnd, - getElementFromSelector, - getTransitionDurationFromElement, - isRTL, - isVisible, - reflow, - triggerTransitionEnd, - typeCheckConfig -} from './util/index' -import Data from './dom/data' -import EventHandler from './dom/event-handler' -import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selector-engine' -import BaseComponent from './base-component' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'carousel' -const DATA_KEY = 'bs.carousel' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' - -const ARROW_LEFT_KEY = 'ArrowLeft' -const ARROW_RIGHT_KEY = 'ArrowRight' -const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch -const SWIPE_THRESHOLD = 40 - -const Default = { - interval: 5000, - keyboard: true, - slide: false, - pause: 'hover', - wrap: true, - touch: true -} - -const DefaultType = { - interval: '(number|boolean)', - keyboard: 'boolean', - slide: '(boolean|string)', - pause: '(string|boolean)', - wrap: 'boolean', - touch: 'boolean' -} - -const ORDER_NEXT = 'next' -const ORDER_PREV = 'prev' -const DIRECTION_LEFT = 'left' -const DIRECTION_RIGHT = 'right' - -const EVENT_SLIDE = `slide${EVENT_KEY}` -const EVENT_SLID = `slid${EVENT_KEY}` -const EVENT_KEYDOWN = `keydown${EVENT_KEY}` -const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}` -const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}` -const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}` -const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}` -const EVENT_TOUCHEND = `touchend${EVENT_KEY}` -const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}` -const EVENT_POINTERUP = `pointerup${EVENT_KEY}` -const EVENT_DRAG_START = `dragstart${EVENT_KEY}` -const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` - -const CLASS_NAME_CAROUSEL = 'carousel' -const CLASS_NAME_ACTIVE = 'active' -const CLASS_NAME_SLIDE = 'slide' -const CLASS_NAME_END = 'carousel-item-end' -const CLASS_NAME_START = 'carousel-item-start' -const CLASS_NAME_NEXT = 'carousel-item-next' -const CLASS_NAME_PREV = 'carousel-item-prev' -const CLASS_NAME_POINTER_EVENT = 'pointer-event' - -const SELECTOR_ACTIVE = '.active' -const SELECTOR_ACTIVE_ITEM = '.active.carousel-item' -const SELECTOR_ITEM = '.carousel-item' -const SELECTOR_ITEM_IMG = '.carousel-item img' -const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev' -const SELECTOR_INDICATORS = '.carousel-indicators' -const SELECTOR_INDICATOR = '[data-bs-target]' -const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]' -const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]' - -const POINTER_TYPE_TOUCH = 'touch' -const POINTER_TYPE_PEN = 'pen' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ -class Carousel extends BaseComponent { - constructor(element, config) { - super(element) - - this._items = null - this._interval = null - this._activeElement = null - this._isPaused = false - this._isSliding = false - this.touchTimeout = null - this.touchStartX = 0 - this.touchDeltaX = 0 - - this._config = this._getConfig(config) - this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element) - this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0 - this._pointerEvent = Boolean(window.PointerEvent) - - this._addEventListeners() - } - - // Getters - - static get Default() { - return Default - } - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - next() { - if (!this._isSliding) { - this._slide(ORDER_NEXT) - } - } - - nextWhenVisible() { - // Don't call next when the page isn't visible - // or the carousel or its parent isn't visible - if (!document.hidden && isVisible(this._element)) { - this.next() - } - } - - prev() { - if (!this._isSliding) { - this._slide(ORDER_PREV) - } - } - - pause(event) { - if (!event) { - this._isPaused = true - } - - if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) { - triggerTransitionEnd(this._element) - this.cycle(true) - } - - clearInterval(this._interval) - this._interval = null - } - - cycle(event) { - if (!event) { - this._isPaused = false - } - - if (this._interval) { - clearInterval(this._interval) - this._interval = null - } - - if (this._config && this._config.interval && !this._isPaused) { - this._updateInterval() - - this._interval = setInterval( - (document.visibilityState ? this.nextWhenVisible : this.next).bind(this), - this._config.interval - ) - } - } - - to(index) { - this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element) - const activeIndex = this._getItemIndex(this._activeElement) - - if (index > this._items.length - 1 || index < 0) { - return - } - - if (this._isSliding) { - EventHandler.one(this._element, EVENT_SLID, () => this.to(index)) - return - } - - if (activeIndex === index) { - this.pause() - this.cycle() - return - } - - const order = index > activeIndex ? - ORDER_NEXT : - ORDER_PREV - - this._slide(order, this._items[index]) - } - - dispose() { - this._items = null - this._config = null - this._interval = null - this._isPaused = null - this._isSliding = null - this._activeElement = null - this._indicatorsElement = null - - super.dispose() - } - - // Private - - _getConfig(config) { - config = { - ...Default, - ...config - } - typeCheckConfig(NAME, config, DefaultType) - return config - } - - _handleSwipe() { - const absDeltax = Math.abs(this.touchDeltaX) - - if (absDeltax <= SWIPE_THRESHOLD) { - return - } - - const direction = absDeltax / this.touchDeltaX - - this.touchDeltaX = 0 - - if (!direction) { - return - } - - this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT) - } - - _addEventListeners() { - if (this._config.keyboard) { - EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)) - } - - if (this._config.pause === 'hover') { - EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event)) - EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event)) - } - - if (this._config.touch && this._touchSupported) { - this._addTouchEventListeners() - } - } - - _addTouchEventListeners() { - const start = event => { - if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) { - this.touchStartX = event.clientX - } else if (!this._pointerEvent) { - this.touchStartX = event.touches[0].clientX - } - } - - const move = event => { - // ensure swiping with one touch and not pinching - this.touchDeltaX = event.touches && event.touches.length > 1 ? - 0 : - event.touches[0].clientX - this.touchStartX - } - - const end = event => { - if (this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) { - this.touchDeltaX = event.clientX - this.touchStartX - } - - this._handleSwipe() - if (this._config.pause === 'hover') { - // If it's a touch-enabled device, mouseenter/leave are fired as - // part of the mouse compatibility events on first tap - the carousel - // would stop cycling until user tapped out of it; - // here, we listen for touchend, explicitly pause the carousel - // (as if it's the second time we tap on it, mouseenter compat event - // is NOT fired) and after a timeout (to allow for mouse compatibility - // events to fire) we explicitly restart cycling - - this.pause() - if (this.touchTimeout) { - clearTimeout(this.touchTimeout) - } - - this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval) - } - } - - SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => { - EventHandler.on(itemImg, EVENT_DRAG_START, e => e.preventDefault()) - }) - - if (this._pointerEvent) { - EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event)) - EventHandler.on(this._element, EVENT_POINTERUP, event => end(event)) - - this._element.classList.add(CLASS_NAME_POINTER_EVENT) - } else { - EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event)) - EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event)) - EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event)) - } - } - - _keydown(event) { - if (/input|textarea/i.test(event.target.tagName)) { - return - } - - if (event.key === ARROW_LEFT_KEY) { - event.preventDefault() - this._slide(DIRECTION_RIGHT) - } else if (event.key === ARROW_RIGHT_KEY) { - event.preventDefault() - this._slide(DIRECTION_LEFT) - } - } - - _getItemIndex(element) { - this._items = element && element.parentNode ? - SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : - [] - - return this._items.indexOf(element) - } - - _getItemByOrder(order, activeElement) { - const isNext = order === ORDER_NEXT - const isPrev = order === ORDER_PREV - const activeIndex = this._getItemIndex(activeElement) - const lastItemIndex = this._items.length - 1 - const isGoingToWrap = (isPrev && activeIndex === 0) || (isNext && activeIndex === lastItemIndex) - - if (isGoingToWrap && !this._config.wrap) { - return activeElement - } - - const delta = isPrev ? -1 : 1 - const itemIndex = (activeIndex + delta) % this._items.length - - return itemIndex === -1 ? - this._items[this._items.length - 1] : - this._items[itemIndex] - } - - _triggerSlideEvent(relatedTarget, eventDirectionName) { - const targetIndex = this._getItemIndex(relatedTarget) - const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)) - - return EventHandler.trigger(this._element, EVENT_SLIDE, { - relatedTarget, - direction: eventDirectionName, - from: fromIndex, - to: targetIndex - }) - } - - _setActiveIndicatorElement(element) { - if (this._indicatorsElement) { - const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement) - - activeIndicator.classList.remove(CLASS_NAME_ACTIVE) - activeIndicator.removeAttribute('aria-current') - - const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement) - - for (let i = 0; i < indicators.length; i++) { - if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) { - indicators[i].classList.add(CLASS_NAME_ACTIVE) - indicators[i].setAttribute('aria-current', 'true') - break - } - } - } - } - - _updateInterval() { - const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element) - - if (!element) { - return - } - - const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10) - - if (elementInterval) { - this._config.defaultInterval = this._config.defaultInterval || this._config.interval - this._config.interval = elementInterval - } else { - this._config.interval = this._config.defaultInterval || this._config.interval - } - } - - _slide(directionOrOrder, element) { - const order = this._directionToOrder(directionOrOrder) - const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element) - const activeElementIndex = this._getItemIndex(activeElement) - const nextElement = element || this._getItemByOrder(order, activeElement) - - const nextElementIndex = this._getItemIndex(nextElement) - const isCycling = Boolean(this._interval) - - const isNext = order === ORDER_NEXT - const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END - const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV - const eventDirectionName = this._orderToDirection(order) - - if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) { - this._isSliding = false - return - } - - const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName) - if (slideEvent.defaultPrevented) { - return - } - - if (!activeElement || !nextElement) { - // Some weirdness is happening, so we bail - return - } - - this._isSliding = true - - if (isCycling) { - this.pause() - } - - this._setActiveIndicatorElement(nextElement) - this._activeElement = nextElement - - if (this._element.classList.contains(CLASS_NAME_SLIDE)) { - nextElement.classList.add(orderClassName) - - reflow(nextElement) - - activeElement.classList.add(directionalClassName) - nextElement.classList.add(directionalClassName) - - const transitionDuration = getTransitionDurationFromElement(activeElement) - - EventHandler.one(activeElement, 'transitionend', () => { - nextElement.classList.remove(directionalClassName, orderClassName) - nextElement.classList.add(CLASS_NAME_ACTIVE) - - activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName) - - this._isSliding = false - - setTimeout(() => { - EventHandler.trigger(this._element, EVENT_SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }) - }, 0) - }) - - emulateTransitionEnd(activeElement, transitionDuration) - } else { - activeElement.classList.remove(CLASS_NAME_ACTIVE) - nextElement.classList.add(CLASS_NAME_ACTIVE) - - this._isSliding = false - EventHandler.trigger(this._element, EVENT_SLID, { - relatedTarget: nextElement, - direction: eventDirectionName, - from: activeElementIndex, - to: nextElementIndex - }) - } - - if (isCycling) { - this.cycle() - } - } - - _directionToOrder(direction) { - if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) { - return direction - } - - if (isRTL()) { - return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT - } - - return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV - } - - _orderToDirection(order) { - if (![ORDER_NEXT, ORDER_PREV].includes(order)) { - return order - } - - if (isRTL()) { - return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT - } - - return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT - } - - // Static - - static carouselInterface(element, config) { - let data = Data.get(element, DATA_KEY) - let _config = { - ...Default, - ...Manipulator.getDataAttributes(element) - } - - if (typeof config === 'object') { - _config = { - ..._config, - ...config - } - } - - const action = typeof config === 'string' ? config : _config.slide - - if (!data) { - data = new Carousel(element, _config) - } - - if (typeof config === 'number') { - data.to(config) - } else if (typeof action === 'string') { - if (typeof data[action] === 'undefined') { - throw new TypeError(`No method named "${action}"`) - } - - data[action]() - } else if (_config.interval && _config.ride) { - data.pause() - data.cycle() - } - } - - static jQueryInterface(config) { - return this.each(function () { - Carousel.carouselInterface(this, config) - }) - } - - static dataApiClickHandler(event) { - const target = getElementFromSelector(this) - - if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { - return - } - - const config = { - ...Manipulator.getDataAttributes(target), - ...Manipulator.getDataAttributes(this) - } - const slideIndex = this.getAttribute('data-bs-slide-to') - - if (slideIndex) { - config.interval = false - } - - Carousel.carouselInterface(target, config) - - if (slideIndex) { - Data.get(target, DATA_KEY).to(slideIndex) - } - - event.preventDefault() - } -} - -/** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler) - -EventHandler.on(window, EVENT_LOAD_DATA_API, () => { - const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE) - - for (let i = 0, len = carousels.length; i < len; i++) { - Carousel.carouselInterface(carousels[i], Data.get(carousels[i], DATA_KEY)) - } -}) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Carousel to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Carousel) - -export default Carousel diff --git a/build/vendor/bootstrap/js/src/collapse.js b/build/vendor/bootstrap/js/src/collapse.js deleted file mode 100644 index 947b6e6..0000000 --- a/build/vendor/bootstrap/js/src/collapse.js +++ /dev/null @@ -1,410 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): collapse.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { - defineJQueryPlugin, - emulateTransitionEnd, - getSelectorFromElement, - getElementFromSelector, - getTransitionDurationFromElement, - isElement, - reflow, - typeCheckConfig -} from './util/index' -import Data from './dom/data' -import EventHandler from './dom/event-handler' -import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selector-engine' -import BaseComponent from './base-component' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'collapse' -const DATA_KEY = 'bs.collapse' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' - -const Default = { - toggle: true, - parent: '' -} - -const DefaultType = { - toggle: 'boolean', - parent: '(string|element)' -} - -const EVENT_SHOW = `show${EVENT_KEY}` -const EVENT_SHOWN = `shown${EVENT_KEY}` -const EVENT_HIDE = `hide${EVENT_KEY}` -const EVENT_HIDDEN = `hidden${EVENT_KEY}` -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` - -const CLASS_NAME_SHOW = 'show' -const CLASS_NAME_COLLAPSE = 'collapse' -const CLASS_NAME_COLLAPSING = 'collapsing' -const CLASS_NAME_COLLAPSED = 'collapsed' - -const WIDTH = 'width' -const HEIGHT = 'height' - -const SELECTOR_ACTIVES = '.show, .collapsing' -const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="collapse"]' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Collapse extends BaseComponent { - constructor(element, config) { - super(element) - - this._isTransitioning = false - this._config = this._getConfig(config) - this._triggerArray = SelectorEngine.find( - `${SELECTOR_DATA_TOGGLE}[href="#${this._element.id}"],` + - `${SELECTOR_DATA_TOGGLE}[data-bs-target="#${this._element.id}"]` - ) - - const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE) - - for (let i = 0, len = toggleList.length; i < len; i++) { - const elem = toggleList[i] - const selector = getSelectorFromElement(elem) - const filterElement = SelectorEngine.find(selector) - .filter(foundElem => foundElem === this._element) - - if (selector !== null && filterElement.length) { - this._selector = selector - this._triggerArray.push(elem) - } - } - - this._parent = this._config.parent ? this._getParent() : null - - if (!this._config.parent) { - this._addAriaAndCollapsedClass(this._element, this._triggerArray) - } - - if (this._config.toggle) { - this.toggle() - } - } - - // Getters - - static get Default() { - return Default - } - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - toggle() { - if (this._element.classList.contains(CLASS_NAME_SHOW)) { - this.hide() - } else { - this.show() - } - } - - show() { - if (this._isTransitioning || this._element.classList.contains(CLASS_NAME_SHOW)) { - return - } - - let actives - let activesData - - if (this._parent) { - actives = SelectorEngine.find(SELECTOR_ACTIVES, this._parent) - .filter(elem => { - if (typeof this._config.parent === 'string') { - return elem.getAttribute('data-bs-parent') === this._config.parent - } - - return elem.classList.contains(CLASS_NAME_COLLAPSE) - }) - - if (actives.length === 0) { - actives = null - } - } - - const container = SelectorEngine.findOne(this._selector) - if (actives) { - const tempActiveData = actives.find(elem => container !== elem) - activesData = tempActiveData ? Data.get(tempActiveData, DATA_KEY) : null - - if (activesData && activesData._isTransitioning) { - return - } - } - - const startEvent = EventHandler.trigger(this._element, EVENT_SHOW) - if (startEvent.defaultPrevented) { - return - } - - if (actives) { - actives.forEach(elemActive => { - if (container !== elemActive) { - Collapse.collapseInterface(elemActive, 'hide') - } - - if (!activesData) { - Data.set(elemActive, DATA_KEY, null) - } - }) - } - - const dimension = this._getDimension() - - this._element.classList.remove(CLASS_NAME_COLLAPSE) - this._element.classList.add(CLASS_NAME_COLLAPSING) - - this._element.style[dimension] = 0 - - if (this._triggerArray.length) { - this._triggerArray.forEach(element => { - element.classList.remove(CLASS_NAME_COLLAPSED) - element.setAttribute('aria-expanded', true) - }) - } - - this.setTransitioning(true) - - const complete = () => { - this._element.classList.remove(CLASS_NAME_COLLAPSING) - this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW) - - this._element.style[dimension] = '' - - this.setTransitioning(false) - - EventHandler.trigger(this._element, EVENT_SHOWN) - } - - const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1) - const scrollSize = `scroll${capitalizedDimension}` - const transitionDuration = getTransitionDurationFromElement(this._element) - - EventHandler.one(this._element, 'transitionend', complete) - - emulateTransitionEnd(this._element, transitionDuration) - this._element.style[dimension] = `${this._element[scrollSize]}px` - } - - hide() { - if (this._isTransitioning || !this._element.classList.contains(CLASS_NAME_SHOW)) { - return - } - - const startEvent = EventHandler.trigger(this._element, EVENT_HIDE) - if (startEvent.defaultPrevented) { - return - } - - const dimension = this._getDimension() - - this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px` - - reflow(this._element) - - this._element.classList.add(CLASS_NAME_COLLAPSING) - this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW) - - const triggerArrayLength = this._triggerArray.length - if (triggerArrayLength > 0) { - for (let i = 0; i < triggerArrayLength; i++) { - const trigger = this._triggerArray[i] - const elem = getElementFromSelector(trigger) - - if (elem && !elem.classList.contains(CLASS_NAME_SHOW)) { - trigger.classList.add(CLASS_NAME_COLLAPSED) - trigger.setAttribute('aria-expanded', false) - } - } - } - - this.setTransitioning(true) - - const complete = () => { - this.setTransitioning(false) - this._element.classList.remove(CLASS_NAME_COLLAPSING) - this._element.classList.add(CLASS_NAME_COLLAPSE) - EventHandler.trigger(this._element, EVENT_HIDDEN) - } - - this._element.style[dimension] = '' - const transitionDuration = getTransitionDurationFromElement(this._element) - - EventHandler.one(this._element, 'transitionend', complete) - emulateTransitionEnd(this._element, transitionDuration) - } - - setTransitioning(isTransitioning) { - this._isTransitioning = isTransitioning - } - - dispose() { - super.dispose() - this._config = null - this._parent = null - this._triggerArray = null - this._isTransitioning = null - } - - // Private - - _getConfig(config) { - config = { - ...Default, - ...config - } - config.toggle = Boolean(config.toggle) // Coerce string values - typeCheckConfig(NAME, config, DefaultType) - return config - } - - _getDimension() { - return this._element.classList.contains(WIDTH) ? WIDTH : HEIGHT - } - - _getParent() { - let { parent } = this._config - - if (isElement(parent)) { - // it's a jQuery object - if (typeof parent.jquery !== 'undefined' || typeof parent[0] !== 'undefined') { - parent = parent[0] - } - } else { - parent = SelectorEngine.findOne(parent) - } - - const selector = `${SELECTOR_DATA_TOGGLE}[data-bs-parent="${parent}"]` - - SelectorEngine.find(selector, parent) - .forEach(element => { - const selected = getElementFromSelector(element) - - this._addAriaAndCollapsedClass( - selected, - [element] - ) - }) - - return parent - } - - _addAriaAndCollapsedClass(element, triggerArray) { - if (!element || !triggerArray.length) { - return - } - - const isOpen = element.classList.contains(CLASS_NAME_SHOW) - - triggerArray.forEach(elem => { - if (isOpen) { - elem.classList.remove(CLASS_NAME_COLLAPSED) - } else { - elem.classList.add(CLASS_NAME_COLLAPSED) - } - - elem.setAttribute('aria-expanded', isOpen) - }) - } - - // Static - - static collapseInterface(element, config) { - let data = Data.get(element, DATA_KEY) - const _config = { - ...Default, - ...Manipulator.getDataAttributes(element), - ...(typeof config === 'object' && config ? config : {}) - } - - if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { - _config.toggle = false - } - - if (!data) { - data = new Collapse(element, _config) - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError(`No method named "${config}"`) - } - - data[config]() - } - } - - static jQueryInterface(config) { - return this.each(function () { - Collapse.collapseInterface(this, config) - }) - } -} - -/** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { - // preventDefault only for elements (which change the URL) not inside the collapsible element - if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) { - event.preventDefault() - } - - const triggerData = Manipulator.getDataAttributes(this) - const selector = getSelectorFromElement(this) - const selectorElements = SelectorEngine.find(selector) - - selectorElements.forEach(element => { - const data = Data.get(element, DATA_KEY) - let config - if (data) { - // update parent attribute - if (data._parent === null && typeof triggerData.parent === 'string') { - data._config.parent = triggerData.parent - data._parent = data._getParent() - } - - config = 'toggle' - } else { - config = triggerData - } - - Collapse.collapseInterface(element, config) - }) -}) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Collapse to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Collapse) - -export default Collapse diff --git a/build/vendor/bootstrap/js/src/dom/data.js b/build/vendor/bootstrap/js/src/dom/data.js deleted file mode 100644 index 5e47365..0000000 --- a/build/vendor/bootstrap/js/src/dom/data.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): dom/data.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const elementMap = new Map() - -export default { - set(element, key, instance) { - if (!elementMap.has(element)) { - elementMap.set(element, new Map()) - } - - const instanceMap = elementMap.get(element) - - // make it clear we only want one instance per element - // can be removed later when multiple key/instances are fine to be used - if (!instanceMap.has(key) && instanceMap.size !== 0) { - // 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]}.`) - return - } - - instanceMap.set(key, instance) - }, - - get(element, key) { - if (elementMap.has(element)) { - return elementMap.get(element).get(key) || null - } - - return null - }, - - remove(element, key) { - if (!elementMap.has(element)) { - return - } - - const instanceMap = elementMap.get(element) - - instanceMap.delete(key) - - // free up element references if there are no instances left for an element - if (instanceMap.size === 0) { - elementMap.delete(element) - } - } -} diff --git a/build/vendor/bootstrap/js/src/dom/event-handler.js b/build/vendor/bootstrap/js/src/dom/event-handler.js deleted file mode 100644 index 3729f38..0000000 --- a/build/vendor/bootstrap/js/src/dom/event-handler.js +++ /dev/null @@ -1,349 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): dom/event-handler.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { getjQuery } from '../util/index' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const namespaceRegex = /[^.]*(?=\..*)\.|.*/ -const stripNameRegex = /\..*/ -const stripUidRegex = /::\d+$/ -const eventRegistry = {} // Events storage -let uidEvent = 1 -const customEvents = { - mouseenter: 'mouseover', - mouseleave: 'mouseout' -} -const customEventsRegex = /^(mouseenter|mouseleave)/i -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 - * ------------------------------------------------------------------------ - */ - -function getUidEvent(element, uid) { - return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++ -} - -function getEvent(element) { - const uid = getUidEvent(element) - - element.uidEvent = uid - eventRegistry[uid] = eventRegistry[uid] || {} - - return eventRegistry[uid] -} - -function bootstrapHandler(element, fn) { - return function handler(event) { - event.delegateTarget = element - - if (handler.oneOff) { - EventHandler.off(element, event.type, fn) - } - - return fn.apply(element, [event]) - } -} - -function bootstrapDelegationHandler(element, selector, fn) { - return function handler(event) { - const domElements = element.querySelectorAll(selector) - - for (let { target } = event; target && target !== this; target = target.parentNode) { - for (let i = domElements.length; i--;) { - if (domElements[i] === target) { - event.delegateTarget = target - - if (handler.oneOff) { - // eslint-disable-next-line unicorn/consistent-destructuring - EventHandler.off(element, event.type, selector, fn) - } - - return fn.apply(target, [event]) - } - } - } - - // To please ESLint - return null - } -} - -function findHandler(events, handler, delegationSelector = null) { - const uidEventList = Object.keys(events) - - for (let i = 0, len = uidEventList.length; i < len; i++) { - const event = events[uidEventList[i]] - - if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { - return event - } - } - - return null -} - -function normalizeParams(originalTypeEvent, handler, delegationFn) { - const delegation = typeof handler === 'string' - const originalHandler = delegation ? delegationFn : handler - - let typeEvent = getTypeEvent(originalTypeEvent) - const isNative = nativeEvents.has(typeEvent) - - if (!isNative) { - typeEvent = originalTypeEvent - } - - return [delegation, originalHandler, typeEvent] -} - -function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { - if (typeof originalTypeEvent !== 'string' || !element) { - return - } - - if (!handler) { - handler = delegationFn - delegationFn = null - } - - // 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 - if (customEventsRegex.test(originalTypeEvent)) { - const wrapFn = fn => { - return function (event) { - if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) { - return fn.call(this, event) - } - } - } - - if (delegationFn) { - delegationFn = wrapFn(delegationFn) - } else { - handler = wrapFn(handler) - } - } - - const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn) - const events = getEvent(element) - const handlers = events[typeEvent] || (events[typeEvent] = {}) - const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null) - - if (previousFn) { - previousFn.oneOff = previousFn.oneOff && oneOff - - return - } - - const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')) - const fn = delegation ? - bootstrapDelegationHandler(element, handler, delegationFn) : - bootstrapHandler(element, handler) - - fn.delegationSelector = delegation ? handler : null - fn.originalHandler = originalHandler - fn.oneOff = oneOff - fn.uidEvent = uid - handlers[uid] = fn - - element.addEventListener(typeEvent, fn, delegation) -} - -function removeHandler(element, events, typeEvent, handler, delegationSelector) { - const fn = findHandler(events[typeEvent], handler, delegationSelector) - - if (!fn) { - return - } - - element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)) - delete events[typeEvent][fn.uidEvent] -} - -function removeNamespacedHandlers(element, events, typeEvent, namespace) { - const storeElementEvent = events[typeEvent] || {} - - Object.keys(storeElementEvent).forEach(handlerKey => { - if (handlerKey.includes(namespace)) { - const event = storeElementEvent[handlerKey] - - removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector) - } - }) -} - -function getTypeEvent(event) { - // allow to get the native events from namespaced events ('click.bs.button' --> 'click') - event = event.replace(stripNameRegex, '') - return customEvents[event] || event -} - -const EventHandler = { - on(element, event, handler, delegationFn) { - addHandler(element, event, handler, delegationFn, false) - }, - - one(element, event, handler, delegationFn) { - addHandler(element, event, handler, delegationFn, true) - }, - - off(element, originalTypeEvent, handler, delegationFn) { - if (typeof originalTypeEvent !== 'string' || !element) { - return - } - - const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn) - const inNamespace = typeEvent !== originalTypeEvent - const events = getEvent(element) - const isNamespace = originalTypeEvent.startsWith('.') - - if (typeof originalHandler !== 'undefined') { - // Simplest case: handler is passed, remove that listener ONLY. - if (!events || !events[typeEvent]) { - return - } - - removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null) - return - } - - if (isNamespace) { - Object.keys(events).forEach(elementEvent => { - removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)) - }) - } - - const storeElementEvent = events[typeEvent] || {} - Object.keys(storeElementEvent).forEach(keyHandlers => { - const handlerKey = keyHandlers.replace(stripUidRegex, '') - - if (!inNamespace || originalTypeEvent.includes(handlerKey)) { - const event = storeElementEvent[keyHandlers] - - removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector) - } - }) - }, - - trigger(element, event, args) { - if (typeof event !== 'string' || !element) { - return null - } - - const $ = getjQuery() - const typeEvent = getTypeEvent(event) - const inNamespace = event !== typeEvent - const isNative = nativeEvents.has(typeEvent) - - let jQueryEvent - let bubbles = true - let nativeDispatch = true - let defaultPrevented = false - let evt = null - - if (inNamespace && $) { - jQueryEvent = $.Event(event, args) - - $(element).trigger(jQueryEvent) - bubbles = !jQueryEvent.isPropagationStopped() - nativeDispatch = !jQueryEvent.isImmediatePropagationStopped() - defaultPrevented = jQueryEvent.isDefaultPrevented() - } - - if (isNative) { - evt = document.createEvent('HTMLEvents') - evt.initEvent(typeEvent, bubbles, true) - } else { - evt = new CustomEvent(event, { - bubbles, - cancelable: true - }) - } - - // merge custom information in our event - if (typeof args !== 'undefined') { - Object.keys(args).forEach(key => { - Object.defineProperty(evt, key, { - get() { - return args[key] - } - }) - }) - } - - if (defaultPrevented) { - evt.preventDefault() - } - - if (nativeDispatch) { - element.dispatchEvent(evt) - } - - if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') { - jQueryEvent.preventDefault() - } - - return evt - } -} - -export default EventHandler diff --git a/build/vendor/bootstrap/js/src/dom/manipulator.js b/build/vendor/bootstrap/js/src/dom/manipulator.js deleted file mode 100644 index 093f96c..0000000 --- a/build/vendor/bootstrap/js/src/dom/manipulator.js +++ /dev/null @@ -1,80 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): dom/manipulator.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -function normalizeData(val) { - if (val === 'true') { - return true - } - - if (val === 'false') { - return false - } - - if (val === Number(val).toString()) { - return Number(val) - } - - if (val === '' || val === 'null') { - return null - } - - return val -} - -function normalizeDataKey(key) { - return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`) -} - -const Manipulator = { - setDataAttribute(element, key, value) { - element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value) - }, - - removeDataAttribute(element, key) { - element.removeAttribute(`data-bs-${normalizeDataKey(key)}`) - }, - - getDataAttributes(element) { - if (!element) { - return {} - } - - const attributes = {} - - Object.keys(element.dataset) - .filter(key => key.startsWith('bs')) - .forEach(key => { - let pureKey = key.replace(/^bs/, '') - pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length) - attributes[pureKey] = normalizeData(element.dataset[key]) - }) - - return attributes - }, - - getDataAttribute(element, key) { - return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)) - }, - - offset(element) { - const rect = element.getBoundingClientRect() - - return { - top: rect.top + document.body.scrollTop, - left: rect.left + document.body.scrollLeft - } - }, - - position(element) { - return { - top: element.offsetTop, - left: element.offsetLeft - } - } -} - -export default Manipulator diff --git a/build/vendor/bootstrap/js/src/dom/selector-engine.js b/build/vendor/bootstrap/js/src/dom/selector-engine.js deleted file mode 100644 index 343dfbb..0000000 --- a/build/vendor/bootstrap/js/src/dom/selector-engine.js +++ /dev/null @@ -1,75 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): dom/selector-engine.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NODE_TEXT = 3 - -const SelectorEngine = { - find(selector, element = document.documentElement) { - return [].concat(...Element.prototype.querySelectorAll.call(element, selector)) - }, - - findOne(selector, element = document.documentElement) { - return Element.prototype.querySelector.call(element, selector) - }, - - children(element, selector) { - return [].concat(...element.children) - .filter(child => child.matches(selector)) - }, - - parents(element, selector) { - const parents = [] - - let ancestor = element.parentNode - - while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { - if (ancestor.matches(selector)) { - parents.push(ancestor) - } - - ancestor = ancestor.parentNode - } - - return parents - }, - - prev(element, selector) { - let previous = element.previousElementSibling - - while (previous) { - if (previous.matches(selector)) { - return [previous] - } - - previous = previous.previousElementSibling - } - - return [] - }, - - next(element, selector) { - let next = element.nextElementSibling - - while (next) { - if (next.matches(selector)) { - return [next] - } - - next = next.nextElementSibling - } - - return [] - } -} - -export default SelectorEngine diff --git a/build/vendor/bootstrap/js/src/dropdown.js b/build/vendor/bootstrap/js/src/dropdown.js deleted file mode 100644 index bb2d01c..0000000 --- a/build/vendor/bootstrap/js/src/dropdown.js +++ /dev/null @@ -1,544 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): dropdown.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import * as Popper from '@popperjs/core' - -import { - defineJQueryPlugin, - getElementFromSelector, - isDisabled, - isElement, - isVisible, - isRTL, - noop, - typeCheckConfig -} from './util/index' -import Data from './dom/data' -import EventHandler from './dom/event-handler' -import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selector-engine' -import BaseComponent from './base-component' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'dropdown' -const DATA_KEY = 'bs.dropdown' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' - -const ESCAPE_KEY = 'Escape' -const SPACE_KEY = 'Space' -const TAB_KEY = 'Tab' -const ARROW_UP_KEY = 'ArrowUp' -const ARROW_DOWN_KEY = 'ArrowDown' -const RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button - -const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY}`) - -const EVENT_HIDE = `hide${EVENT_KEY}` -const EVENT_HIDDEN = `hidden${EVENT_KEY}` -const EVENT_SHOW = `show${EVENT_KEY}` -const EVENT_SHOWN = `shown${EVENT_KEY}` -const EVENT_CLICK = `click${EVENT_KEY}` -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` -const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}` -const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}` - -const CLASS_NAME_SHOW = 'show' -const CLASS_NAME_DROPUP = 'dropup' -const CLASS_NAME_DROPEND = 'dropend' -const CLASS_NAME_DROPSTART = 'dropstart' -const CLASS_NAME_NAVBAR = 'navbar' - -const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]' -const SELECTOR_MENU = '.dropdown-menu' -const SELECTOR_NAVBAR_NAV = '.navbar-nav' -const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' - -const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start' -const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end' -const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start' -const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end' -const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start' -const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start' - -const Default = { - offset: [0, 2], - boundary: 'clippingParents', - reference: 'toggle', - display: 'dynamic', - popperConfig: null, - autoClose: true -} - -const DefaultType = { - offset: '(array|string|function)', - boundary: '(string|element)', - reference: '(string|element|object)', - display: 'string', - popperConfig: '(null|object|function)', - autoClose: '(boolean|string)' -} - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Dropdown extends BaseComponent { - constructor(element, config) { - super(element) - - this._popper = null - this._config = this._getConfig(config) - this._menu = this._getMenuElement() - this._inNavbar = this._detectNavbar() - - this._addEventListeners() - } - - // Getters - - static get Default() { - return Default - } - - static get DefaultType() { - return DefaultType - } - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - toggle() { - if (isDisabled(this._element)) { - return - } - - const isActive = this._element.classList.contains(CLASS_NAME_SHOW) - - if (isActive) { - this.hide() - return - } - - this.show() - } - - show() { - if (isDisabled(this._element) || this._menu.classList.contains(CLASS_NAME_SHOW)) { - return - } - - const parent = Dropdown.getParentFromElement(this._element) - const relatedTarget = { - relatedTarget: this._element - } - - const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget) - - if (showEvent.defaultPrevented) { - return - } - - // Totally disable Popper for Dropdowns in Navbar - if (this._inNavbar) { - Manipulator.setDataAttribute(this._menu, 'popper', 'none') - } else { - if (typeof Popper === 'undefined') { - throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)') - } - - let referenceElement = this._element - - if (this._config.reference === 'parent') { - referenceElement = parent - } else if (isElement(this._config.reference)) { - referenceElement = this._config.reference - - // Check if it's jQuery element - if (typeof this._config.reference.jquery !== 'undefined') { - referenceElement = this._config.reference[0] - } - } else if (typeof this._config.reference === 'object') { - referenceElement = this._config.reference - } - - const popperConfig = this._getPopperConfig() - const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false) - - this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig) - - if (isDisplayStatic) { - Manipulator.setDataAttribute(this._menu, 'popper', 'static') - } - } - - // If this is a touch-enabled device we add extra - // empty mouseover listeners to the body's immediate children; - // only needed because of broken event delegation on iOS - // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - if ('ontouchstart' in document.documentElement && - !parent.closest(SELECTOR_NAVBAR_NAV)) { - [].concat(...document.body.children) - .forEach(elem => EventHandler.on(elem, 'mouseover', noop)) - } - - this._element.focus() - this._element.setAttribute('aria-expanded', true) - - this._menu.classList.toggle(CLASS_NAME_SHOW) - this._element.classList.toggle(CLASS_NAME_SHOW) - EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget) - } - - hide() { - if (isDisabled(this._element) || !this._menu.classList.contains(CLASS_NAME_SHOW)) { - return - } - - const relatedTarget = { - relatedTarget: this._element - } - - this._completeHide(relatedTarget) - } - - dispose() { - this._menu = null - - if (this._popper) { - this._popper.destroy() - this._popper = null - } - - super.dispose() - } - - update() { - this._inNavbar = this._detectNavbar() - if (this._popper) { - this._popper.update() - } - } - - // Private - - _addEventListeners() { - EventHandler.on(this._element, EVENT_CLICK, event => { - event.preventDefault() - this.toggle() - }) - } - - _completeHide(relatedTarget) { - const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget) - if (hideEvent.defaultPrevented) { - 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) { - [].concat(...document.body.children) - .forEach(elem => EventHandler.off(elem, 'mouseover', noop)) - } - - if (this._popper) { - this._popper.destroy() - } - - this._menu.classList.remove(CLASS_NAME_SHOW) - this._element.classList.remove(CLASS_NAME_SHOW) - this._element.setAttribute('aria-expanded', 'false') - Manipulator.removeDataAttribute(this._menu, 'popper') - EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget) - } - - _getConfig(config) { - config = { - ...this.constructor.Default, - ...Manipulator.getDataAttributes(this._element), - ...config - } - - typeCheckConfig(NAME, config, this.constructor.DefaultType) - - if (typeof config.reference === 'object' && !isElement(config.reference) && - typeof config.reference.getBoundingClientRect !== 'function' - ) { - // Popper virtual elements require a getBoundingClientRect method - throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`) - } - - return config - } - - _getMenuElement() { - return SelectorEngine.next(this._element, SELECTOR_MENU)[0] - } - - _getPlacement() { - const parentDropdown = this._element.parentNode - - if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { - return PLACEMENT_RIGHT - } - - if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { - return PLACEMENT_LEFT - } - - // We need to trim the value because custom properties can also include spaces - const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end' - - if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { - return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP - } - - return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM - } - - _detectNavbar() { - return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null - } - - _getOffset() { - const { offset } = this._config - - if (typeof offset === 'string') { - return offset.split(',').map(val => Number.parseInt(val, 10)) - } - - if (typeof offset === 'function') { - return popperData => offset(popperData, this._element) - } - - return offset - } - - _getPopperConfig() { - const defaultBsPopperConfig = { - placement: this._getPlacement(), - modifiers: [{ - name: 'preventOverflow', - options: { - boundary: this._config.boundary - } - }, - { - name: 'offset', - options: { - offset: this._getOffset() - } - }] - } - - // Disable Popper if we have a static display - if (this._config.display === 'static') { - defaultBsPopperConfig.modifiers = [{ - name: 'applyStyles', - enabled: false - }] - } - - return { - ...defaultBsPopperConfig, - ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) - } - } - - _selectMenuItem(event) { - const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible) - - if (!items.length) { - return - } - - let index = items.indexOf(event.target) - - // Up - if (event.key === ARROW_UP_KEY && index > 0) { - index-- - } - - // Down - if (event.key === ARROW_DOWN_KEY && index < items.length - 1) { - index++ - } - - // index is -1 if the first keydown is an ArrowUp - index = index === -1 ? 0 : index - - items[index].focus() - } - - // Static - - static dropdownInterface(element, config) { - let data = Data.get(element, DATA_KEY) - const _config = typeof config === 'object' ? config : null - - if (!data) { - data = new Dropdown(element, _config) - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError(`No method named "${config}"`) - } - - data[config]() - } - } - - static jQueryInterface(config) { - return this.each(function () { - Dropdown.dropdownInterface(this, config) - }) - } - - static clearMenus(event) { - if (event) { - if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) { - return - } - - if (/input|select|option|textarea|form/i.test(event.target.tagName)) { - return - } - } - - const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE) - - for (let i = 0, len = toggles.length; i < len; i++) { - const context = Data.get(toggles[i], DATA_KEY) - if (!context || context._config.autoClose === false) { - continue - } - - if (!context._element.classList.contains(CLASS_NAME_SHOW)) { - continue - } - - const relatedTarget = { - relatedTarget: context._element - } - - if (event) { - const composedPath = event.composedPath() - const isMenuTarget = composedPath.includes(context._menu) - if ( - composedPath.includes(context._element) || - (context._config.autoClose === 'inside' && !isMenuTarget) || - (context._config.autoClose === 'outside' && isMenuTarget) - ) { - continue - } - - // Tab navigation through the dropdown menu shouldn't close the menu - if (event.type === 'keyup' && event.key === TAB_KEY && context._menu.contains(event.target)) { - continue - } - - if (event.type === 'click') { - relatedTarget.clickEvent = event - } - } - - context._completeHide(relatedTarget) - } - } - - static getParentFromElement(element) { - return getElementFromSelector(element) || element.parentNode - } - - static dataApiKeydownHandler(event) { - // If not input/textarea: - // - And not a key in REGEXP_KEYDOWN => not a dropdown command - // If input/textarea: - // - If space key => not a dropdown command - // - If key is other than escape - // - If key is not up or down => not a dropdown command - // - If trigger inside the menu => not a dropdown command - if (/input|textarea/i.test(event.target.tagName) ? - event.key === SPACE_KEY || (event.key !== ESCAPE_KEY && - ((event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY) || - event.target.closest(SELECTOR_MENU))) : - !REGEXP_KEYDOWN.test(event.key)) { - return - } - - const isActive = this.classList.contains(CLASS_NAME_SHOW) - - if (!isActive && event.key === ESCAPE_KEY) { - return - } - - event.preventDefault() - event.stopPropagation() - - if (isDisabled(this)) { - return - } - - const getToggleButton = () => this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] - - if (event.key === ESCAPE_KEY) { - getToggleButton().focus() - Dropdown.clearMenus() - return - } - - if (!isActive && (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY)) { - getToggleButton().click() - return - } - - if (!isActive || event.key === SPACE_KEY) { - Dropdown.clearMenus() - return - } - - Dropdown.getInstance(getToggleButton())._selectMenuItem(event) - } -} - -/** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler) -EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler) -EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus) -EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus) -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { - event.preventDefault() - Dropdown.dropdownInterface(this) -}) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Dropdown to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Dropdown) - -export default Dropdown diff --git a/build/vendor/bootstrap/js/src/modal.js b/build/vendor/bootstrap/js/src/modal.js deleted file mode 100644 index 773e426..0000000 --- a/build/vendor/bootstrap/js/src/modal.js +++ /dev/null @@ -1,467 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): modal.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { - defineJQueryPlugin, - emulateTransitionEnd, - getElementFromSelector, - getTransitionDurationFromElement, - isRTL, - isVisible, - reflow, - typeCheckConfig -} from './util/index' -import EventHandler from './dom/event-handler' -import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selector-engine' -import { getWidth as getScrollBarWidth, hide as scrollBarHide, reset as scrollBarReset } from './util/scrollbar' -import BaseComponent from './base-component' -import Backdrop from './util/backdrop' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'modal' -const DATA_KEY = 'bs.modal' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' -const ESCAPE_KEY = 'Escape' - -const Default = { - backdrop: true, - keyboard: true, - focus: true -} - -const DefaultType = { - backdrop: '(boolean|string)', - keyboard: 'boolean', - focus: 'boolean' -} - -const EVENT_HIDE = `hide${EVENT_KEY}` -const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}` -const EVENT_HIDDEN = `hidden${EVENT_KEY}` -const EVENT_SHOW = `show${EVENT_KEY}` -const EVENT_SHOWN = `shown${EVENT_KEY}` -const EVENT_FOCUSIN = `focusin${EVENT_KEY}` -const EVENT_RESIZE = `resize${EVENT_KEY}` -const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}` -const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}` -const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}` -const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}` -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` - -const CLASS_NAME_OPEN = 'modal-open' -const CLASS_NAME_FADE = 'fade' -const CLASS_NAME_SHOW = 'show' -const CLASS_NAME_STATIC = 'modal-static' - -const SELECTOR_DIALOG = '.modal-dialog' -const SELECTOR_MODAL_BODY = '.modal-body' -const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]' -const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Modal extends BaseComponent { - constructor(element, config) { - super(element) - - this._config = this._getConfig(config) - this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element) - this._backdrop = this._initializeBackDrop() - this._isShown = false - this._ignoreBackdropClick = false - this._isTransitioning = false - } - - // Getters - - static get Default() { - return Default - } - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget) - } - - show(relatedTarget) { - if (this._isShown || this._isTransitioning) { - return - } - - if (this._isAnimated()) { - this._isTransitioning = true - } - - const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { - relatedTarget - }) - - if (this._isShown || showEvent.defaultPrevented) { - return - } - - this._isShown = true - - scrollBarHide() - - document.body.classList.add(CLASS_NAME_OPEN) - - this._adjustDialog() - - this._setEscapeEvent() - this._setResizeEvent() - - EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event)) - - EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { - EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => { - if (event.target === this._element) { - this._ignoreBackdropClick = true - } - }) - }) - - this._showBackdrop(() => this._showElement(relatedTarget)) - } - - hide(event) { - if (event) { - event.preventDefault() - } - - if (!this._isShown || this._isTransitioning) { - return - } - - const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE) - - if (hideEvent.defaultPrevented) { - return - } - - this._isShown = false - const isAnimated = this._isAnimated() - - if (isAnimated) { - this._isTransitioning = true - } - - this._setEscapeEvent() - this._setResizeEvent() - - EventHandler.off(document, EVENT_FOCUSIN) - - this._element.classList.remove(CLASS_NAME_SHOW) - - EventHandler.off(this._element, EVENT_CLICK_DISMISS) - EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS) - - if (isAnimated) { - const transitionDuration = getTransitionDurationFromElement(this._element) - - EventHandler.one(this._element, 'transitionend', event => this._hideModal(event)) - emulateTransitionEnd(this._element, transitionDuration) - } else { - this._hideModal() - } - } - - dispose() { - [window, this._dialog] - .forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY)) - - super.dispose() - - /** - * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` - * Do not move `document` in `htmlElements` array - * It will remove `EVENT_CLICK_DATA_API` event that should remain - */ - EventHandler.off(document, EVENT_FOCUSIN) - - this._config = null - this._dialog = null - this._backdrop.dispose() - this._backdrop = null - this._isShown = null - this._ignoreBackdropClick = null - this._isTransitioning = null - } - - handleUpdate() { - this._adjustDialog() - } - - // Private - - _initializeBackDrop() { - return new Backdrop({ - isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value - isAnimated: this._isAnimated() - }) - } - - _getConfig(config) { - config = { - ...Default, - ...Manipulator.getDataAttributes(this._element), - ...config - } - typeCheckConfig(NAME, config, DefaultType) - return config - } - - _showElement(relatedTarget) { - const isAnimated = this._isAnimated() - const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog) - - if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { - // Don't move modal's DOM position - document.body.appendChild(this._element) - } - - this._element.style.display = 'block' - this._element.removeAttribute('aria-hidden') - this._element.setAttribute('aria-modal', true) - this._element.setAttribute('role', 'dialog') - this._element.scrollTop = 0 - - if (modalBody) { - modalBody.scrollTop = 0 - } - - if (isAnimated) { - reflow(this._element) - } - - this._element.classList.add(CLASS_NAME_SHOW) - - if (this._config.focus) { - this._enforceFocus() - } - - const transitionComplete = () => { - if (this._config.focus) { - this._element.focus() - } - - this._isTransitioning = false - EventHandler.trigger(this._element, EVENT_SHOWN, { - relatedTarget - }) - } - - if (isAnimated) { - const transitionDuration = getTransitionDurationFromElement(this._dialog) - - EventHandler.one(this._dialog, 'transitionend', transitionComplete) - emulateTransitionEnd(this._dialog, transitionDuration) - } else { - transitionComplete() - } - } - - _enforceFocus() { - EventHandler.off(document, EVENT_FOCUSIN) // guard against infinite focus loop - EventHandler.on(document, EVENT_FOCUSIN, event => { - if (document !== event.target && - this._element !== event.target && - !this._element.contains(event.target)) { - this._element.focus() - } - }) - } - - _setEscapeEvent() { - if (this._isShown) { - EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { - if (this._config.keyboard && event.key === ESCAPE_KEY) { - event.preventDefault() - this.hide() - } else if (!this._config.keyboard && event.key === ESCAPE_KEY) { - this._triggerBackdropTransition() - } - }) - } else { - EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS) - } - } - - _setResizeEvent() { - if (this._isShown) { - EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog()) - } else { - EventHandler.off(window, EVENT_RESIZE) - } - } - - _hideModal() { - this._element.style.display = 'none' - this._element.setAttribute('aria-hidden', true) - this._element.removeAttribute('aria-modal') - this._element.removeAttribute('role') - this._isTransitioning = false - this._backdrop.hide(() => { - document.body.classList.remove(CLASS_NAME_OPEN) - this._resetAdjustments() - scrollBarReset() - EventHandler.trigger(this._element, EVENT_HIDDEN) - }) - } - - _showBackdrop(callback) { - EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => { - if (this._ignoreBackdropClick) { - this._ignoreBackdropClick = false - return - } - - if (event.target !== event.currentTarget) { - return - } - - if (this._config.backdrop === true) { - this.hide() - } else if (this._config.backdrop === 'static') { - this._triggerBackdropTransition() - } - }) - - this._backdrop.show(callback) - } - - _isAnimated() { - return this._element.classList.contains(CLASS_NAME_FADE) - } - - _triggerBackdropTransition() { - const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED) - if (hideEvent.defaultPrevented) { - return - } - - const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight - - if (!isModalOverflowing) { - this._element.style.overflowY = 'hidden' - } - - this._element.classList.add(CLASS_NAME_STATIC) - const modalTransitionDuration = getTransitionDurationFromElement(this._dialog) - EventHandler.off(this._element, 'transitionend') - EventHandler.one(this._element, 'transitionend', () => { - this._element.classList.remove(CLASS_NAME_STATIC) - if (!isModalOverflowing) { - EventHandler.one(this._element, 'transitionend', () => { - this._element.style.overflowY = '' - }) - emulateTransitionEnd(this._element, modalTransitionDuration) - } - }) - emulateTransitionEnd(this._element, modalTransitionDuration) - this._element.focus() - } - - // ---------------------------------------------------------------------- - // the following methods are used to handle overflowing modals - // ---------------------------------------------------------------------- - - _adjustDialog() { - const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight - const scrollbarWidth = getScrollBarWidth() - const isBodyOverflowing = scrollbarWidth > 0 - - if ((!isBodyOverflowing && isModalOverflowing && !isRTL()) || (isBodyOverflowing && !isModalOverflowing && isRTL())) { - this._element.style.paddingLeft = `${scrollbarWidth}px` - } - - if ((isBodyOverflowing && !isModalOverflowing && !isRTL()) || (!isBodyOverflowing && isModalOverflowing && isRTL())) { - this._element.style.paddingRight = `${scrollbarWidth}px` - } - } - - _resetAdjustments() { - this._element.style.paddingLeft = '' - this._element.style.paddingRight = '' - } - - // Static - - static jQueryInterface(config, relatedTarget) { - return this.each(function () { - const data = Modal.getInstance(this) || new Modal(this, typeof config === 'object' ? config : {}) - - if (typeof config !== 'string') { - return - } - - if (typeof data[config] === 'undefined') { - throw new TypeError(`No method named "${config}"`) - } - - data[config](relatedTarget) - }) - } -} - -/** - * ------------------------------------------------------------------------ - * Data Api implementation - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { - const target = getElementFromSelector(this) - - if (['A', 'AREA'].includes(this.tagName)) { - event.preventDefault() - } - - EventHandler.one(target, EVENT_SHOW, showEvent => { - if (showEvent.defaultPrevented) { - // only register focus restorer if modal will actually get shown - return - } - - EventHandler.one(target, EVENT_HIDDEN, () => { - if (isVisible(this)) { - this.focus() - } - }) - }) - - const data = Modal.getInstance(target) || new Modal(target) - - data.toggle(this) -}) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Modal to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Modal) - -export default Modal diff --git a/build/vendor/bootstrap/js/src/offcanvas.js b/build/vendor/bootstrap/js/src/offcanvas.js deleted file mode 100644 index f3459e6..0000000 --- a/build/vendor/bootstrap/js/src/offcanvas.js +++ /dev/null @@ -1,285 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): offcanvas.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { - defineJQueryPlugin, - emulateTransitionEnd, - getElementFromSelector, - getTransitionDurationFromElement, - isDisabled, - isVisible, - typeCheckConfig -} from './util/index' -import { hide as scrollBarHide, reset as scrollBarReset } from './util/scrollbar' -import Data from './dom/data' -import EventHandler from './dom/event-handler' -import BaseComponent from './base-component' -import SelectorEngine from './dom/selector-engine' -import Manipulator from './dom/manipulator' -import Backdrop from './util/backdrop' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'offcanvas' -const DATA_KEY = 'bs.offcanvas' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' -const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` -const ESCAPE_KEY = 'Escape' - -const Default = { - backdrop: true, - keyboard: true, - scroll: false -} - -const DefaultType = { - backdrop: 'boolean', - keyboard: 'boolean', - scroll: 'boolean' -} - -const CLASS_NAME_SHOW = 'show' -const OPEN_SELECTOR = '.offcanvas.show' - -const EVENT_SHOW = `show${EVENT_KEY}` -const EVENT_SHOWN = `shown${EVENT_KEY}` -const EVENT_HIDE = `hide${EVENT_KEY}` -const EVENT_HIDDEN = `hidden${EVENT_KEY}` -const EVENT_FOCUSIN = `focusin${EVENT_KEY}` -const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` -const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}` -const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}` - -const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="offcanvas"]' -const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="offcanvas"]' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Offcanvas extends BaseComponent { - constructor(element, config) { - super(element) - - this._config = this._getConfig(config) - this._isShown = false - this._backdrop = this._initializeBackDrop() - this._addEventListeners() - } - - // Getters - - static get Default() { - return Default - } - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget) - } - - show(relatedTarget) { - if (this._isShown) { - return - } - - const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget }) - - if (showEvent.defaultPrevented) { - return - } - - this._isShown = true - this._element.style.visibility = 'visible' - - this._backdrop.show() - - if (!this._config.scroll) { - scrollBarHide() - this._enforceFocusOnElement(this._element) - } - - this._element.removeAttribute('aria-hidden') - this._element.setAttribute('aria-modal', true) - this._element.setAttribute('role', 'dialog') - this._element.classList.add(CLASS_NAME_SHOW) - - const completeCallBack = () => { - EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget }) - } - - const transitionDuration = getTransitionDurationFromElement(this._element) - EventHandler.one(this._element, 'transitionend', completeCallBack) - emulateTransitionEnd(this._element, transitionDuration) - } - - hide() { - if (!this._isShown) { - return - } - - const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE) - - if (hideEvent.defaultPrevented) { - return - } - - EventHandler.off(document, EVENT_FOCUSIN) - this._element.blur() - this._isShown = false - this._element.classList.remove(CLASS_NAME_SHOW) - this._backdrop.hide() - - const completeCallback = () => { - this._element.setAttribute('aria-hidden', true) - this._element.removeAttribute('aria-modal') - this._element.removeAttribute('role') - this._element.style.visibility = 'hidden' - - if (!this._config.scroll) { - scrollBarReset() - } - - EventHandler.trigger(this._element, EVENT_HIDDEN) - } - - const transitionDuration = getTransitionDurationFromElement(this._element) - EventHandler.one(this._element, 'transitionend', completeCallback) - emulateTransitionEnd(this._element, transitionDuration) - } - - dispose() { - this._backdrop.dispose() - super.dispose() - EventHandler.off(document, EVENT_FOCUSIN) - - this._config = null - this._backdrop = null - } - - // Private - - _getConfig(config) { - config = { - ...Default, - ...Manipulator.getDataAttributes(this._element), - ...(typeof config === 'object' ? config : {}) - } - typeCheckConfig(NAME, config, DefaultType) - return config - } - - _initializeBackDrop() { - return new Backdrop({ - isVisible: this._config.backdrop, - isAnimated: true, - rootElement: this._element.parentNode, - clickCallback: () => this.hide() - }) - } - - _enforceFocusOnElement(element) { - EventHandler.off(document, EVENT_FOCUSIN) // guard against infinite focus loop - EventHandler.on(document, EVENT_FOCUSIN, event => { - if (document !== event.target && - element !== event.target && - !element.contains(event.target)) { - element.focus() - } - }) - element.focus() - } - - _addEventListeners() { - EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide()) - - EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { - if (this._config.keyboard && event.key === ESCAPE_KEY) { - this.hide() - } - }) - } - - // Static - - static jQueryInterface(config) { - return this.each(function () { - const data = Data.get(this, DATA_KEY) || new Offcanvas(this, typeof config === 'object' ? 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 - * ------------------------------------------------------------------------ - */ - -EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { - const target = getElementFromSelector(this) - - if (['A', 'AREA'].includes(this.tagName)) { - event.preventDefault() - } - - if (isDisabled(this)) { - return - } - - EventHandler.one(target, EVENT_HIDDEN, () => { - // focus on trigger when it is closed - if (isVisible(this)) { - this.focus() - } - }) - - // avoid conflict when clicking a toggler of an offcanvas, while another is open - const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR) - if (allReadyOpen && allReadyOpen !== target) { - Offcanvas.getInstance(allReadyOpen).hide() - } - - const data = Data.get(target, DATA_KEY) || new Offcanvas(target) - - data.toggle(this) -}) - -EventHandler.on(window, EVENT_LOAD_DATA_API, () => { - SelectorEngine.find(OPEN_SELECTOR).forEach(el => (Data.get(el, DATA_KEY) || new Offcanvas(el)).show()) -}) - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - */ - -defineJQueryPlugin(NAME, Offcanvas) - -export default Offcanvas diff --git a/build/vendor/bootstrap/js/src/popover.js b/build/vendor/bootstrap/js/src/popover.js deleted file mode 100644 index 58b3623..0000000 --- a/build/vendor/bootstrap/js/src/popover.js +++ /dev/null @@ -1,171 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): popover.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { defineJQueryPlugin } from './util/index' -import Data from './dom/data' -import SelectorEngine from './dom/selector-engine' -import Tooltip from './tooltip' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'popover' -const DATA_KEY = 'bs.popover' -const EVENT_KEY = `.${DATA_KEY}` -const CLASS_PREFIX = 'bs-popover' -const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') - -const Default = { - ...Tooltip.Default, - placement: 'right', - offset: [0, 8], - trigger: 'click', - content: '', - template: '' -} - -const DefaultType = { - ...Tooltip.DefaultType, - content: '(string|element|function)' -} - -const Event = { - HIDE: `hide${EVENT_KEY}`, - HIDDEN: `hidden${EVENT_KEY}`, - SHOW: `show${EVENT_KEY}`, - SHOWN: `shown${EVENT_KEY}`, - INSERTED: `inserted${EVENT_KEY}`, - CLICK: `click${EVENT_KEY}`, - FOCUSIN: `focusin${EVENT_KEY}`, - FOCUSOUT: `focusout${EVENT_KEY}`, - MOUSEENTER: `mouseenter${EVENT_KEY}`, - MOUSELEAVE: `mouseleave${EVENT_KEY}` -} - -const CLASS_NAME_FADE = 'fade' -const CLASS_NAME_SHOW = 'show' - -const SELECTOR_TITLE = '.popover-header' -const SELECTOR_CONTENT = '.popover-body' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class Popover extends Tooltip { - // Getters - - static get Default() { - return Default - } - - static get NAME() { - return NAME - } - - static get DATA_KEY() { - return DATA_KEY - } - - static get Event() { - return Event - } - - static get EVENT_KEY() { - return EVENT_KEY - } - - static get DefaultType() { - return DefaultType - } - - // Overrides - - isWithContent() { - return this.getTitle() || this._getContent() - } - - setContent() { - const tip = this.getTipElement() - - // we use append for html objects to maintain js events - this.setElementContent(SelectorEngine.findOne(SELECTOR_TITLE, tip), this.getTitle()) - let content = this._getContent() - if (typeof content === 'function') { - content = content.call(this._element) - } - - this.setElementContent(SelectorEngine.findOne(SELECTOR_CONTENT, tip), content) - - tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW) - } - - // Private - - _addAttachmentClass(attachment) { - this.getTipElement().classList.add(`${CLASS_PREFIX}-${this.updateAttachment(attachment)}`) - } - - _getContent() { - return this._element.getAttribute('data-bs-content') || this.config.content - } - - _cleanTipClass() { - const tip = this.getTipElement() - const tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX) - if (tabClass !== null && tabClass.length > 0) { - tabClass.map(token => token.trim()) - .forEach(tClass => tip.classList.remove(tClass)) - } - } - - // Static - - static jQueryInterface(config) { - return this.each(function () { - let data = Data.get(this, DATA_KEY) - const _config = typeof config === 'object' ? config : null - - if (!data && /dispose|hide/.test(config)) { - return - } - - if (!data) { - data = new Popover(this, _config) - Data.set(this, DATA_KEY, data) - } - - if (typeof config === 'string') { - if (typeof data[config] === 'undefined') { - throw new TypeError(`No method named "${config}"`) - } - - data[config]() - } - }) - } -} - -/** - * ------------------------------------------------------------------------ - * jQuery - * ------------------------------------------------------------------------ - * add .Popover to jQuery only if jQuery is present - */ - -defineJQueryPlugin(NAME, Popover) - -export default Popover diff --git a/build/vendor/bootstrap/js/src/scrollspy.js b/build/vendor/bootstrap/js/src/scrollspy.js deleted file mode 100644 index 0f59696..0000000 --- a/build/vendor/bootstrap/js/src/scrollspy.js +++ /dev/null @@ -1,316 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0): scrollspy.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { - defineJQueryPlugin, - getSelectorFromElement, - getUID, - isElement, - typeCheckConfig -} from './util/index' -import EventHandler from './dom/event-handler' -import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selector-engine' -import BaseComponent from './base-component' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NAME = 'scrollspy' -const DATA_KEY = 'bs.scrollspy' -const EVENT_KEY = `.${DATA_KEY}` -const DATA_API_KEY = '.data-api' - -const Default = { - offset: 10, - method: 'auto', - target: '' -} - -const DefaultType = { - offset: 'number', - method: 'string', - target: '(string|element)' -} - -const EVENT_ACTIVATE = `activate${EVENT_KEY}` -const EVENT_SCROLL = `scroll${EVENT_KEY}` -const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` - -const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item' -const CLASS_NAME_ACTIVE = 'active' - -const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]' -const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group' -const SELECTOR_NAV_LINKS = '.nav-link' -const SELECTOR_NAV_ITEMS = '.nav-item' -const SELECTOR_LIST_ITEMS = '.list-group-item' -const SELECTOR_DROPDOWN = '.dropdown' -const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle' - -const METHOD_OFFSET = 'offset' -const METHOD_POSITION = 'position' - -/** - * ------------------------------------------------------------------------ - * Class Definition - * ------------------------------------------------------------------------ - */ - -class ScrollSpy extends BaseComponent { - constructor(element, config) { - super(element) - this._scrollElement = this._element.tagName === 'BODY' ? window : this._element - this._config = this._getConfig(config) - this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}` - this._offsets = [] - this._targets = [] - this._activeTarget = null - this._scrollHeight = 0 - - EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process()) - - this.refresh() - this._process() - } - - // Getters - - static get Default() { - return Default - } - - static get DATA_KEY() { - return DATA_KEY - } - - // Public - - refresh() { - const autoMethod = this._scrollElement === this._scrollElement.window ? - METHOD_OFFSET : - METHOD_POSITION - - const offsetMethod = this._config.method === 'auto' ? - autoMethod : - this._config.method - - const offsetBase = offsetMethod === METHOD_POSITION ? - this._getScrollTop() : - 0 - - this._offsets = [] - this._targets = [] - this._scrollHeight = this._getScrollHeight() - - const targets = SelectorEngine.find(this._selector) - - targets.map(element => { - const targetSelector = getSelectorFromElement(element) - const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null - - if (target) { - const targetBCR = target.getBoundingClientRect() - if (targetBCR.width || targetBCR.height) { - return [ - Manipulator[offsetMethod](target).top + offsetBase, - targetSelector - ] - } - } - - return null - }) - .filter(item => item) - .sort((a, b) => a[0] - b[0]) - .forEach(item => { - this._offsets.push(item[0]) - this._targets.push(item[1]) - }) - } - - dispose() { - super.dispose() - EventHandler.off(this._scrollElement, EVENT_KEY) - - this._scrollElement = null - this._config = null - this._selector = null - this._offsets = null - this._targets = null - this._activeTarget = null - this._scrollHeight = null - } - - // Private - - _getConfig(config) { - config = { - ...Default, - ...Manipulator.getDataAttributes(this._element), - ...(typeof config === 'object' && config ? config : {}) - } - - if (typeof config.target !== 'string' && isElement(config.target)) { - let { id } = config.target - if (!id) { - id = getUID(NAME) - config.target.id = id - } - - config.target = `#${id}` - } - - typeCheckConfig(NAME, config, DefaultType) - - return config - } - - _getScrollTop() { - return this._scrollElement === window ? - this._scrollElement.pageYOffset : - this._scrollElement.scrollTop - } - - _getScrollHeight() { - return this._scrollElement.scrollHeight || Math.max( - document.body.scrollHeight, - document.documentElement.scrollHeight - ) - } - - _getOffsetHeight() { - return this._scrollElement === window ? - window.innerHeight : - this._scrollElement.getBoundingClientRect().height - } - - _process() { - const scrollTop = this._getScrollTop() + this._config.offset - const scrollHeight = this._getScrollHeight() - const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight() - - if (this._scrollHeight !== scrollHeight) { - this.refresh() - } - - if (scrollTop >= maxScroll) { - const target = this._targets[this._targets.length - 1] - - if (this._activeTarget !== target) { - this._activate(target) - } - - return - } - - if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { - this._activeTarget = null - this._clear() - return - } - - for (let i = this._offsets.length; i--;) { - const isActiveTarget = this._activeTarget !== this._targets[i] && - scrollTop >= this._offsets[i] && - (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]) - - if (isActiveTarget) { - this._activate(this._targets[i]) - } - } - } - - _activate(target) { - this._activeTarget = target - - this._clear() - - const queries = this._selector.split(',') - .map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`) - - const link = SelectorEngine.findOne(queries.join(',')) - - if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { - SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN)) - .classList.add(CLASS_NAME_ACTIVE) - - link.classList.add(CLASS_NAME_ACTIVE) - } else { - // Set triggered link as active - link.classList.add(CLASS_NAME_ACTIVE) - - SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP) - .forEach(listGroup => { - // Set triggered links parents as active - // With both