From 6bbc428a3de470d969ba2cad1fbfb2e7781e2ef2 Mon Sep 17 00:00:00 2001 From: ErdaradunGaztea <32573962+ErdaradunGaztea@users.noreply.github.com> Date: Fri, 5 Jul 2024 21:12:42 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20turtleto?= =?UTF-8?q?pia/gglgbtq@d157c987ddc625af77c2b00cec108cd22ad7aad0=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .nojekyll | 1 + 404.html | 101 + LICENSE.html | 269 + apple-touch-icon-120x120.png | Bin 0 -> 8865 bytes apple-touch-icon-152x152.png | Bin 0 -> 11529 bytes apple-touch-icon-180x180.png | Bin 0 -> 12981 bytes apple-touch-icon-60x60.png | Bin 0 -> 4210 bytes apple-touch-icon-76x76.png | Bin 0 -> 5317 bytes apple-touch-icon.png | Bin 0 -> 12981 bytes articles/gallery.html | 435 + .../figure-html/abrosexual-1.png | Bin 0 -> 9991 bytes .../figure-html/ace_spectrum-1.png | Bin 0 -> 10653 bytes .../figure-html/acesthetic-1.png | Bin 0 -> 8565 bytes .../gallery_files/figure-html/agender-1.png | Bin 0 -> 8135 bytes .../gallery_files/figure-html/alloace-1.png | Bin 0 -> 7064 bytes .../gallery_files/figure-html/amatopunk-1.png | Bin 0 -> 9197 bytes .../figure-html/analterous-1.png | Bin 0 -> 7785 bytes .../figure-html/androsexual-1.png | Bin 0 -> 9944 bytes .../figure-html/aro_spectrum-1.png | Bin 0 -> 10362 bytes .../gallery_files/figure-html/aroace-1.png | Bin 0 -> 6353 bytes .../gallery_files/figure-html/aroallo-1.png | Bin 0 -> 4997 bytes .../gallery_files/figure-html/aromantic-1.png | Bin 0 -> 7846 bytes .../gallery_files/figure-html/asensual-1.png | Bin 0 -> 7970 bytes .../gallery_files/figure-html/asexual-1.png | Bin 0 -> 7682 bytes articles/gallery_files/figure-html/bear-1.png | Bin 0 -> 5731 bytes .../gallery_files/figure-html/bigender-1.png | Bin 0 -> 8345 bytes .../gallery_files/figure-html/bisexual-1.png | Bin 0 -> 8062 bytes .../gallery_files/figure-html/butch-1.png | Bin 0 -> 5380 bytes .../gallery_files/figure-html/demiboy-1.png | Bin 0 -> 8284 bytes .../gallery_files/figure-html/demigirl-1.png | Bin 0 -> 6833 bytes .../gallery_files/figure-html/femme-1.png | Bin 0 -> 4584 bytes articles/gallery_files/figure-html/gay-1.png | Bin 0 -> 5870 bytes .../gallery_files/figure-html/gay_7-1.png | Bin 0 -> 6704 bytes .../figure-html/genderfluid-1.png | Bin 0 -> 9047 bytes .../figure-html/genderqueer-1.png | Bin 0 -> 7465 bytes .../figure-html/gynesexual-1.png | Bin 0 -> 9885 bytes .../gallery_files/figure-html/helian-1.png | Bin 0 -> 5079 bytes .../gallery_files/figure-html/intersex-1.png | Bin 0 -> 7586 bytes .../gallery_files/figure-html/lesbian-1.png | Bin 0 -> 6775 bytes .../gallery_files/figure-html/lesbian_7-1.png | Bin 0 -> 7780 bytes .../gallery_files/figure-html/lunarian-1.png | Bin 0 -> 5128 bytes .../gallery_files/figure-html/nonbinary-1.png | Bin 0 -> 7802 bytes .../gallery_files/figure-html/otter-1.png | Bin 0 -> 4989 bytes .../gallery_files/figure-html/pansexual-1.png | Bin 0 -> 8440 bytes .../figure-html/philadelphia-1.png | Bin 0 -> 9547 bytes .../gallery_files/figure-html/progress-1.png | Bin 0 -> 8644 bytes .../gallery_files/figure-html/queerhet-1.png | Bin 0 -> 6339 bytes .../gallery_files/figure-html/rainbow-1.png | Bin 0 -> 7679 bytes .../gallery_files/figure-html/solarian-1.png | Bin 0 -> 6392 bytes .../figure-html/stellarian-1.png | Bin 0 -> 6706 bytes .../figure-html/transgender-1.png | Bin 0 -> 8813 bytes articles/index.html | 77 + authors.html | 98 + deps/bootstrap-5.3.1/bootstrap.bundle.min.js | 7 + .../bootstrap.bundle.min.js.map | 1 + deps/bootstrap-5.3.1/bootstrap.min.css | 5 + deps/data-deps.txt | 4 + deps/jquery-3.6.0/jquery-3.6.0.js | 10881 ++++++++++++++++ deps/jquery-3.6.0/jquery-3.6.0.min.js | 2 + deps/jquery-3.6.0/jquery-3.6.0.min.map | 1 + favicon-16x16.png | Bin 0 -> 1095 bytes favicon-32x32.png | Bin 0 -> 2153 bytes favicon.ico | Bin 0 -> 15086 bytes index.html | 254 + link.svg | 12 + logo.svg | 1 + news/index.html | 89 + pkgdown.js | 156 + pkgdown.yml | 10 + reference/Rplot001.png | Bin 0 -> 10151 bytes reference/Rplot002.png | Bin 0 -> 10456 bytes reference/figures/logo.svg | 1 + reference/index.html | 102 + reference/lgbtq-scales-1.png | Bin 0 -> 29025 bytes reference/lgbtq-scales-2.png | Bin 0 -> 29025 bytes reference/lgbtq-scales.html | 129 + reference/palette_lgbtq-1.png | Bin 0 -> 15686 bytes reference/palette_lgbtq-2.png | Bin 0 -> 29025 bytes reference/palette_lgbtq.html | 162 + reference/show_pride.html | 109 + reference/theme_lgbtq-1.png | Bin 0 -> 28841 bytes reference/theme_lgbtq.html | 172 + search.json | 1 + sitemap.xml | 39 + 84 files changed, 13119 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 LICENSE.html create mode 100644 apple-touch-icon-120x120.png create mode 100644 apple-touch-icon-152x152.png create mode 100644 apple-touch-icon-180x180.png create mode 100644 apple-touch-icon-60x60.png create mode 100644 apple-touch-icon-76x76.png create mode 100644 apple-touch-icon.png create mode 100644 articles/gallery.html create mode 100644 articles/gallery_files/figure-html/abrosexual-1.png create mode 100644 articles/gallery_files/figure-html/ace_spectrum-1.png create mode 100644 articles/gallery_files/figure-html/acesthetic-1.png create mode 100644 articles/gallery_files/figure-html/agender-1.png create mode 100644 articles/gallery_files/figure-html/alloace-1.png create mode 100644 articles/gallery_files/figure-html/amatopunk-1.png create mode 100644 articles/gallery_files/figure-html/analterous-1.png create mode 100644 articles/gallery_files/figure-html/androsexual-1.png create mode 100644 articles/gallery_files/figure-html/aro_spectrum-1.png create mode 100644 articles/gallery_files/figure-html/aroace-1.png create mode 100644 articles/gallery_files/figure-html/aroallo-1.png create mode 100644 articles/gallery_files/figure-html/aromantic-1.png create mode 100644 articles/gallery_files/figure-html/asensual-1.png create mode 100644 articles/gallery_files/figure-html/asexual-1.png create mode 100644 articles/gallery_files/figure-html/bear-1.png create mode 100644 articles/gallery_files/figure-html/bigender-1.png create mode 100644 articles/gallery_files/figure-html/bisexual-1.png create mode 100644 articles/gallery_files/figure-html/butch-1.png create mode 100644 articles/gallery_files/figure-html/demiboy-1.png create mode 100644 articles/gallery_files/figure-html/demigirl-1.png create mode 100644 articles/gallery_files/figure-html/femme-1.png create mode 100644 articles/gallery_files/figure-html/gay-1.png create mode 100644 articles/gallery_files/figure-html/gay_7-1.png create mode 100644 articles/gallery_files/figure-html/genderfluid-1.png create mode 100644 articles/gallery_files/figure-html/genderqueer-1.png create mode 100644 articles/gallery_files/figure-html/gynesexual-1.png create mode 100644 articles/gallery_files/figure-html/helian-1.png create mode 100644 articles/gallery_files/figure-html/intersex-1.png create mode 100644 articles/gallery_files/figure-html/lesbian-1.png create mode 100644 articles/gallery_files/figure-html/lesbian_7-1.png create mode 100644 articles/gallery_files/figure-html/lunarian-1.png create mode 100644 articles/gallery_files/figure-html/nonbinary-1.png create mode 100644 articles/gallery_files/figure-html/otter-1.png create mode 100644 articles/gallery_files/figure-html/pansexual-1.png create mode 100644 articles/gallery_files/figure-html/philadelphia-1.png create mode 100644 articles/gallery_files/figure-html/progress-1.png create mode 100644 articles/gallery_files/figure-html/queerhet-1.png create mode 100644 articles/gallery_files/figure-html/rainbow-1.png create mode 100644 articles/gallery_files/figure-html/solarian-1.png create mode 100644 articles/gallery_files/figure-html/stellarian-1.png create mode 100644 articles/gallery_files/figure-html/transgender-1.png create mode 100644 articles/index.html create mode 100644 authors.html create mode 100644 deps/bootstrap-5.3.1/bootstrap.bundle.min.js create mode 100644 deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map create mode 100644 deps/bootstrap-5.3.1/bootstrap.min.css create mode 100644 deps/data-deps.txt create mode 100644 deps/jquery-3.6.0/jquery-3.6.0.js create mode 100644 deps/jquery-3.6.0/jquery-3.6.0.min.js create mode 100644 deps/jquery-3.6.0/jquery-3.6.0.min.map create mode 100644 favicon-16x16.png create mode 100644 favicon-32x32.png create mode 100644 favicon.ico create mode 100644 index.html create mode 100644 link.svg create mode 100644 logo.svg create mode 100644 news/index.html create mode 100644 pkgdown.js create mode 100644 pkgdown.yml create mode 100644 reference/Rplot001.png create mode 100644 reference/Rplot002.png create mode 100644 reference/figures/logo.svg create mode 100644 reference/index.html create mode 100644 reference/lgbtq-scales-1.png create mode 100644 reference/lgbtq-scales-2.png create mode 100644 reference/lgbtq-scales.html create mode 100644 reference/palette_lgbtq-1.png create mode 100644 reference/palette_lgbtq-2.png create mode 100644 reference/palette_lgbtq.html create mode 100644 reference/show_pride.html create mode 100644 reference/theme_lgbtq-1.png create mode 100644 reference/theme_lgbtq.html create mode 100644 search.json create mode 100644 sitemap.xml diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.nojekyll @@ -0,0 +1 @@ + diff --git a/404.html b/404.html new file mode 100644 index 0000000..ec3126a --- /dev/null +++ b/404.html @@ -0,0 +1,101 @@ + + + + + + + +Page not found (404) • gglgbtq + + + + + + + + + + + + + + + + Skip to contents + + +
+
+
+ +Content not found. Please use links in the navbar. + +
+
+ + + +
+ + + + + + + diff --git a/LICENSE.html b/LICENSE.html new file mode 100644 index 0000000..e94d06c --- /dev/null +++ b/LICENSE.html @@ -0,0 +1,269 @@ + +GNU General Public License • gglgbtq + Skip to contents + + +
+
+
+ +
+ +

Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <http://fsf.org/>

+

Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

+
+

Preamble

+

The GNU General Public License is a free, copyleft license for software and other kinds of works.

+

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program–to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

+

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.

+

To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.

+

For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

+

Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.

+

For the developers’ and authors’ protection, the GPL clearly explains that there is no warranty for this free software. For both users’ and authors’ sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.

+

Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users’ freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.

+

Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.

+

The precise terms and conditions for copying, distribution and modification follow.

+
+
+

TERMS AND CONDITIONS

+
+

0. Definitions

+

“This License” refers to version 3 of the GNU General Public License.

+

“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.

+

“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations.

+

To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work.

+

A “covered work” means either the unmodified Program or a work based on the Program.

+

To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.

+

To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.

+

An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.

+
+
+

1. Source Code

+

The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work.

+

A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.

+

The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.

+

The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work’s System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.

+

The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.

+

The Corresponding Source for a work in source code form is that same work.

+
+
+

2. Basic Permissions

+

All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.

+

You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.

+

Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.

+
+
+ +

No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.

+

When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work’s users, your or third parties’ legal rights to forbid circumvention of technological measures.

+
+
+

4. Conveying Verbatim Copies

+

You may convey verbatim copies of the Program’s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.

+

You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.

+
+
+

5. Conveying Modified Source Versions

+

You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

+
  • +a) The work must carry prominent notices stating that you modified it, and giving a relevant date.
  • +
  • +b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”.
  • +
  • +c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.
  • +
  • +d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.
  • +

A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation’s users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.

+
+
+

6. Conveying Non-Source Forms

+

You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:

+
  • +a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.
  • +
  • +b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.
  • +
  • +c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.
  • +
  • +d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.
  • +
  • +e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.
  • +

A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.

+

A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.

+

“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.

+

If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).

+

The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.

+

Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.

+
+
+

7. Additional Terms

+

“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.

+

When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.

+

Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:

+
  • +a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
  • +
  • +b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or
  • +
  • +c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or
  • +
  • +d) Limiting the use for publicity purposes of names of licensors or authors of the material; or
  • +
  • +e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
  • +
  • +f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.
  • +

All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.

+

If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.

+

Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.

+
+
+

8. Termination

+

You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).

+

However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

+

Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

+

Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.

+
+
+

9. Acceptance Not Required for Having Copies

+

You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.

+
+
+

10. Automatic Licensing of Downstream Recipients

+

Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.

+

An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party’s predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.

+

You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.

+
+
+

11. Patents

+

A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor’s “contributor version”.

+

A contributor’s “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.

+

Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor’s essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.

+

In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.

+

If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient’s use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.

+

If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.

+

A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.

+

Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.

+
+
+

12. No Surrender of Others’ Freedom

+

If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.

+
+
+

13. Use with the GNU Affero General Public License

+

Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.

+
+
+

14. Revised Versions of this License

+

The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

+

Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.

+

If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Program.

+

Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.

+
+
+

15. Disclaimer of Warranty

+

THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

+
+
+

16. Limitation of Liability

+

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

+
+
+

17. Interpretation of Sections 15 and 16

+

If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.

+

END OF TERMS AND CONDITIONS

+
+
+
+

How to Apply These Terms to Your New Programs

+

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

+

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found.

+
<one line to give the program's name and a brief idea of what it does.>
+Copyright (C) <year>  <name of author>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+

Also add information on how to contact you by electronic and paper mail.

+

If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:

+
<program>  Copyright (C) <year>  <name of author>
+This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'.
+This is free software, and you are welcome to redistribute it
+under certain conditions; type 'show c' for details.
+

The hypothetical commands show w and show c should show the appropriate parts of the General Public License. Of course, your program’s commands might be different; for a GUI interface, you would use an “about box”.

+

You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>.

+

The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.

+
+
+ +
+ + +
+ + + + + + + diff --git a/apple-touch-icon-120x120.png b/apple-touch-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..7c3e577f0418a857dac0c118d2bd5cc7251b6d98 GIT binary patch literal 8865 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

gQweB_`LGjB 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 literal 0 HcmV?d00001 diff --git a/apple-touch-icon-152x152.png b/apple-touch-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..df095f89d57a16a5a4d629201f084db537c21923 GIT binary patch literal 11529 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 P1>&B9ntYM0Nzi`*lTEu5 literal 0 HcmV?d00001 diff --git a/apple-touch-icon-60x60.png b/apple-touch-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..fc48062e5283f7e491f3cd6fa4456bfc46bb6c7f GIT binary patch literal 4210 zcmZ`+c|26#|GtJ8Ya_CSOk^p`kUd$(I(AB_tc@j0)?q^Su_k0ETYSjYMAk%EM~o%O zR<_A9){re@``-Ti{qei^b?>?Nyw3aHbKcAIJSWc7SeKcBhXDWpW|W?mIoPWFyP&k- zUHN#@2W)7ZHHpeBj&*!~>&E`ZiEHv)h_VE_oj0RRQ;3R?yMKLh}*+JRPC0Kn;$ z+idplL$r?!bhUu9e`jIqn^dre4udk%rdy^vcaaIk^$ng60O#3IS{ipA&ulyh^19QV zbGD}xJZLDKjq8mR>KYEC=i!2c3kfAN!6uSTg~Cj=P?D}S`1p&hqK&T8(-qSat!~zg zAFK+3q~b%9V=BiY?tNB01plHFMe4x;_L@ygBVj|Zj8@E7|)KtKQh z7>)coIyx#iPXpPMAuLG~e5k|Q_Ge~hLK$fwcP%W;OidB1xW(ZMErENkqVW*8mZiJ< zdSp)N32LOyk(HHoX_1(T{r^PVPPS8Z*9D|x*C?9ot>rZcg;$Y)5X&>iG>Do*o-&H z6e=ff9u(9*cuSeAb=I{~kV)xS8Y)Ptu10*DoK(v8JrzQ`Uxf?xJJr5!YT}xloJ8=v zxVO6<*gDbZdAW~B9G;kf!nM>&FqcYp({VUl>ENKT+5P)UkCYQ*qZk<(HK5@Y71ErN zR-%pxPZn~?UEST>mjjpKX&D(EPPO6YfflyfX31GuvFq#ZSp!aW_4VhJ@&;wC$2s>7 z4z4%j6=I^J1D6K#p0kM;Vk=g1 zNmEnP?Ih&$C(qeW@ZQsIjzJ<()7STgyyuKc`~3ECYN?A96mHJO#+Kg0AHwBDZ!l_ zlGm;w4Gb6!g;TG>pek)jQjQ7JY!@$TGcYpNJUjI1A`n=z7xuo+%p~&N^q-qgQq!@u zEhtROPj)n46w{PTTCxyYY`m5R zf0>phEB<^2sz`qP__2CGfD#M83bbH|voP&dMaq4LPAEy>zM=D=$qODI9}l~H`8-mm&W2kC2U85D$TmFr8Qs^X zub5|SEcUh}%|n)p=`tOJYUsAft*E2T&u6Y3wN3*a<+tA?gGam4nJ!@hX<_l=hV!5n z3Po>jZjP@m>m-HY*QzbW8*>z7jWnM;k?8B|Gky4w(P*S4?VE|i{nNeE5*j)DxGU8}HST_`)5(H> zx3@Qx2GW?bb`kMvplS2dkzI}D)_Uzwgmftb9KZG1ZRr9kC8U8@2sb7F=@^}5D6E%4 z1MjjJ(z)8dx>0X;*2)(Km}#nyTs}u1_hEDg5s2$P9GUAOQo+>?S(D$epNNw*>z%i| zUvC0PJ9@ca?Tcd28<#x2x*i&GX+eY-pj3Jcg#|HQr}T4!?LDR1VfKWJ)~lC3);J!S z!624BQTE!W3%0DJ>yy-hYB)E>LO&bcJ>%rdtil(<4X?t0_u}@r17V$v>K$V6mRueL zD8tS~B`f;BxGSSB$&3yD7r-DZ#gj=C%`ubKm1>D5PBU!OEI&@_*|8V}yG{e(CN`ip znba_urvGAqE3CU%<*gOs(VX9*fEoQuaHuLSP76Rmpj6!Ljl!ra0vE!CP=Xl{-C$da zf9F8x^oLm0Bs$e4Dj@5H4xst)^fN;TkMm#a#n4BaSX}@hy5HAhFE3`#^rY^9K=KA{ z>h>F`Aj|%HaFXzgU}A=>IxQnRWUAlvj{;}iX~EW+-|+w|zt7hTNcC|)b?9=gCYcwY z{k+Dj>>T!010z3SOb#0aV9U)cuYJRO0SJ;jXGMqR#R0kAVBa9!869`pb%D7Zik&P^ zj8y=0cJ=UMEjPF8xyB+^^P3T8pO8S9pd?G;&b8eyN3?D(SD|(3R9DVNe54cUhT)is zFAie|&cSI8^rfK|l6EUCP#CZTqvk!8oZ7~k*-^289{SttweSUakn^w_tW6p^x>>6Z zkchIBe1&l^f!^LoDaOdsn6KxcVm!z6c5N$w1;>>yTr^Zv5WbPybP^jrAM6-dq75C7 zOQ8Y+0DLYtlD+?fN8V;sQvTTrRSA2F7HR+K@OKOY5H3DU zyc~56!NmlYUZ?UHw?7Gl9#dP}q~E_iFn)gR9*vqAj&*f)g>T-_kw~QF<>j!S8?a{6~Z*^xU%$i63$ zudJd1dFKv$U{H{>-|C&GD*WHa#(wo@-}utk7eQP^dU{Ibyn3YpZ7(%?Wmh{1LdJ6t zy#&@KklKqI zt-L2FB0|T^%&cc*q-|xz%fP_kwLT%8z;~0Qq@*M^A%O<%-n7b6;03ayalT4ibTn<1 zO)C$`ci?0{`fngZLR5uK@|g%+IGCP+L1*J^$a8Rv%HO$25I*K|J2wwH=eOJJ5b7yH z2*TXKkp`3s&1CbAGpCgK)p{&Up63OWkukDozWt@3?i@y$m7AO1dK}aUv14O*yLx(x zo11xZO6~izq%(guTS?-gqU_hk-j?C?Yx0HZ*Br z!C`?+?sS(&|LTf+{NzdNl>cI1Iv6rUwjuQVXCGe=P_f;6=9~Z*6r`4x9-r;UD)N?< zm9_0}{A}lCe%Rm%UuWw-2dbV7&CV54@>Hq z&vw80T93DLeaw1TvewXQW~D6BoG}Us2R@xr+|tt1NfR~buYSQ{=9Jgs#7iptL)%}! znp!opcx!L^t&P0~V-R0Nb9i#9olxVfNM3=%;eR5|F>bX{pBI3`NexO`Y{i$GH3c~Rh!vs77Drfz9DG0JfYzguM)P9W%j#OhR4>Qc##PFibL zg@YVL%#i5(R$>6gKfs{ZAB&xjJg?dob2%gyEXptMrwqk{jm*+yGKr&^X=ym@Z16!v z$he#Zm;{d=JpvPt*qTsdPMA2s!3@mJFWi0mAPN+6ER}dZhA9t)Pse`@+pfMdli%>a$*yfS<8=jiC}x#SS`H)qdkeLVDtwa!Bz@2<7B zwmK*1%-d4sl5&&Iet+B~@GE+Sfra1hT5m(TE*J+Uxcf{Cw`a>XEtr59=W^c-``waPRpq~a53dyxavICJ zxw+XRQt&JS6m*3kAf*W9ffB5?NYt~Tp~3&Z($ZhWpq$i}iQ)C|_3?qRvkT>^g@!1j z-TBDR;>3yVBc(=~peT`%ktwWLO?Egs3E@@7Ko=Jm%ig_k(M6&<1w)xw=@*W)baX@|B_+#x*Nei&xlcP?*3Fe3*w`eV z9Q{K9g#HTE{R~?WVkpQF*|TtJy6AKcU7^=_%NmG;gankHKJL5hhC)J3eKTG}OIH`Y z@~yA(A9l*yB1#T{2#b$r zaG$8A0#_B@GrwZNzBm+LR24*u;#93HFW=@@c?tuOVL-1;S($v#|07>Tg?Z!8JiqNf zPx0V}pugWREiKLNN1Y1@t#~|(qoZS4d3kuLi>m(0o3wA4pz37-Rbhyr%Tj{?6JVmU zP2=k327*?9$mdXQ@-Zl0%Q>EF_YDl3BlD)Gr+X>#DwotHnp1QwEU;kZG)%frv;^#w zEz7NHgIVz0dw1C^;j)^l@krh0&sl^jKmcWay<}G^zNlpyM6&dhl!&~W*u)A|g$)S- z5ZHxNQLAff2ISl`MnFd_SW;McscdAWTq(;_fJb3Gi|haPh*R0pMxw{2wN$_gzuZJ`-X;YSA2^7G#t}GqMS? z8KkmPvk7R0$#yzW3)bEdAWnS$($(L^+eJqV(<{`M1Xej&F@KP9>EJH_l(w-J9%&cx EKijI($N&HU literal 0 HcmV?d00001 diff --git a/apple-touch-icon-76x76.png b/apple-touch-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..04710b1d8e9fb167491265691a95c8ca74a9aab1 GIT binary patch literal 5317 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 Sy!;p}0qJX-XjN-E#r+R4vch2i literal 0 HcmV?d00001 diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3569818d2782755e02f0bebcd6c9a06ebe20c0c4 GIT binary patch literal 12981 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 O5cd?+ + + + + + + + +Palette gallery • gglgbtq + + + + + + + + + + + + + + + + + Skip to contents + + +

+ + + + +
+
+ + + +
+

The most common flags +

+

There are a few flags and related identities within LGBT+ community +that are more recognizable than the others. Here are the selected ones +that are the most well-known. For other flags, check the other +sections.

+
+palette_lgbtq("rainbow")
+

+

The flag of LGBT+ community, sometimes incorrectly associated with +gay men only. Adopted in 1979 after revisions made to the original +design with eight stripes reduced the number of colors to six. The one +you’ll see most often, since it encompasses everyone in LGBT+ community, +no exceptions.

+
+palette_lgbtq("lesbian")
+

+

Colors derived from the 2018 design with seven stripes, the third +widespread design. “Lesbian” means “homosexual woman” and is one of the +most known terms from the LGBT+ community. Me and my girlfriend can +never remember which side goes on the top when positioning our pins.

+ +

+

Sometimes “gay” is a synonym to “homosexual”, which would include +lesbians, but this palette is based on a flag for MLM, men loving men, +which is the other meaning of “gay”. The flag itself is inspired by the +lesbian flag.

+
+palette_lgbtq("bisexual")
+

+

Originally meant “attracted to both gender”; for gender is now known +to be a spectrum (or perhaps multiple spectra), the meaning was updated +to say “attracted to two or more genders”. “Bisexual” isn’t +synonymical to “attracted to all” anymore, for that there are +“omnisexual” and “pansexual” terms.

+
+palette_lgbtq("transgender")
+

+

A transgender person is somebody whose gender doesn’t match AGAB +(assigned gender at birth). It encompasses both binary and nonbinary +gender identities (in fact, currently all nonbinary people are +technically transgender, since most countries only allow one of the two +binary genders to be assigned at birth). The opposite of “transgender” +is “cisgender”.

+
+palette_lgbtq("asexual")
+

+

“Asexual” means “not experiencing sexual attraction”. This does not +imply anything about romantic or tertiary attraction, as asexual person +may be aromantic or alloromantic (see “alloace”). Asexual people are +often nicknamed “aces”. The opposite of “asexual” is “allosexual”, +i.e. any orientation where a person experiences sexual attraction, +whether bi-, homo-, hetero- or any other.

+
+palette_lgbtq("intersex")
+

+

A person whose sex characteristics (phenotype, chromosomes, hormonal +profile, etc.) don’t align, i.e. not all of them belong to the same +binary sex (male or female). These characteristics don’t have to be +binary, for most sex characteristic are a spectrum. The opposite of +“intersex” is “endosex”/“perisex”/“dyadic” (personally I prefer the +first term).

+
+palette_lgbtq("nonbinary")
+

+

A nonbinary person is somebody whose gender is not one of the two +binary genders, i.e. woman or man. Usually nonbinary identities fall +inside the spectrum between masculinity and femininity, but this need +not be true for any enby (nonbinary person).

+
+
+

Rainbow variants +

+

Although the six-stripe rainbow flag is the most recognizable, there +are other variants, both older and newer. Some try to be more inclusive, +others raise an awareness of some issue. Below are the implemented +ones:

+
+palette_lgbtq("philadelphia")
+

+

A 2017 redesign of the 6-stripe rainbow flag adopted first by the +city of Philadelphia that draws attention to the struggles of people of +color within the LGBT+ community.

+
+palette_lgbtq("progress")
+

+

A 2018 flag that adds a chevron to the 6-stripe rainbow flag. The +chevron contains both black and brown colors added to Philadelphia +rainbow flag, and transgender flag colors (light blue, pink, white).

+
+
+

Sexualities on A-spectrum +

+

A lot of orientations in LGBT+ community belong to the A-spectrum, +whether sexual, romantic or tertiary. Thus, enough flags were spawned to +justify separating these into their own section.

+
+palette_lgbtq("aromantic")
+

+

An aromantic person does not experience romantic attraction towards +anyone.

+
+palette_lgbtq("acesthetic")
+

+

“Acesthetic” (also called “anaesthetic”) is a lack of aesthetic +attraction (one of the tertiary orientations) towards other people.

+
+palette_lgbtq("analterous")
+

+

“Alterous attraction” is a term for the gray area between romantic +and platonic attraction. A person that does not experience it is called +“analterous”.

+
+palette_lgbtq("asensual")
+

+

A person that does not experience sensual attraction, i.e. a desire +for a (possibly intimate) physical contact like cuddling.

+
+palette_lgbtq("ace_spectrum")
+

+

This term encompasses all sexual orientations that are characterized +by a complete or partial lack of sexual attraction, e.g. “asexual”, +“demisexual” or “graysexual”.

+
+palette_lgbtq("aro_spectrum")
+

+

“Aromantic spectrum” (also called “aro spectrum” or “arospec”) is an +umbrella term for all romantic orientations characterized by a complete +or partial lack of romantic attraction, e.g. “aromantic”, +“demiromantic”, “grayromantic”… analogously to “ace spectrum”.

+
+palette_lgbtq("aroace")
+

+

“Aroace” is a term for individuals experiencing neither romantic nor +sexual attration; in other words, “aromantic asexual”.

+
+palette_lgbtq("alloace")
+

+

“Alloace” means “experiencing romantic attraction and not +experiencing sexual attraction”, not specifying the type of romantic +attraction. “Allo” is a shortening of “alloromantic” and “ace” is a +nickname for “asexual”.

+
+palette_lgbtq("aroallo")
+

+

“Aroallo” means “experiencing sexual attraction and not experiencing +romantic one”, regardless of the type of sexual attraction. “Aro” is a +shortening of “aromantic” and “allo” – of “allosexual”.

+
+
+

Other sexualities +

+

Even though the chapter says “sexualities”, romantic and tertiary +orientations belong there as well. Since these sexualities don’t belong +to A-spectrum, their umbrella term would be “allosexual” (and, +analogously, “alloromantic”).

+
+palette_lgbtq("pansexual")
+

+

A pansexual person may be attracted to any person regardless of +target’s gender. This sexuality differs from “omnisexual” in that this +attraction is not influenced by gender, does not depend on gender. Also, +pansexuality’s flag is cooler.

+
+palette_lgbtq("androsexual")
+

+

“Androsexual” is a term for any person, regardless of their gender, +that is attracted to men or masculine-presenting people. Preferable to +the traditional terms like “straight”/“gay”, since it can be easily used +by non-binary people as well.

+
+palette_lgbtq("gynesexual")
+

+

A “gynesexual” person is attracted to women or feminine-presenting +people. This term is superior to “straight [man]” and “lesbian”, since +it does not imply anything about person’s gender and is usable by +non-binary people as well.

+
+palette_lgbtq("abrosexual")
+

+

Abrosexuality is defined by the fluctuations of one’s sexual +orientation, whether constant or occasional. It doesn’t specify where on +the sexuality spectrum these fluctuations occur.

+
+palette_lgbtq("lesbian_7")
+

+

A 7-stripe variant of the lesbian flag.

+
+palette_lgbtq("gay_7")
+

+

A 7-stripe variant of the gay flag.

+
+
+

Genders on fem-masc spectrum +

+

We’ve come to allow a lot of freedom when describing gender, but most +people can describe their gender using terms of “femininity” and +“masculinity”. These are the identities that fit in this space:

+
+palette_lgbtq("demiboy")
+

+

A person that is partially a man. The other part of their gender may +or may not include other genders.

+
+palette_lgbtq("demigirl")
+

+

A person that is partially a woman. The other part of their gender +may or may not include other genders.

+
+
+

Galactian alignment system +

+

Some non-binary people got tired of having to explain their genders +in binary terms, like in the category above. As such, they created a +gender system with names based on celestial bodies that allows to +specify one’s gender alignment (which does not imply one’s actual +gender).

+
+palette_lgbtq("lunarian")
+

+

“Lunarian” means a person of female-aligned identity or whose +expression is feminine-aligned.

+
+palette_lgbtq("solarian")
+

+

A non-binary person whose identity is male-aligned or whose +expression is masculine-aligned.

+
+palette_lgbtq("stellarian")
+

+

A term for a non-binary person of neutral-aligned identity, unrelated +to manhood and womanhood, however still perceived as gendered.

+
+palette_lgbtq("helian")
+

+

A non-binary person whose identity is male-aligned or otherwise +connected to manhood. Different from “solarian” in that their identity +does not need to be masculine-aligned.

+
+
+

Other genders +

+

…and all the other terms related to gender that do not fit in the +fem-masc spectrum:

+
+palette_lgbtq("genderfluid")
+

+

A gender identity which fluctuates over time between feeling +masculine, feminine, androgynous, and other gender descriptors. +Fluctuations may be random or regular.

+
+palette_lgbtq("genderqueer")
+

+

“Genderqueer” is an umbrella for all gender identites that are queer +in one way or another.

+
+palette_lgbtq("agender")
+

+

An agender person is somebody who doesn’t feel connection with any +gender, who can be described as having no gender.

+
+palette_lgbtq("bigender")
+

+

“Bigender” means a gender identity composed of two genders a person +feels strong connection with. They may exist simultaneously or fluctuate +over time. One of the two genders is probably stolen from some agender +person.

+
+
+

Subcultures +

+

While somebody’s sexual orientation isn’t that person’s lifestyle +(even though there are people suggesting otherwise), the terms here +describe the way certain people express and identify themselves in +strong connection with their sexuality. In a way, this is the closest to +“lifestyle” you can get here.

+
+palette_lgbtq("amatopunk")
+

+

Amatopunks challenge the amatonormativity, i.e. the societal +expectations that everybody should desire a monogamous sexual and +romantic relationship, exclusive towards polyamorous, asexual, and +aromantic people (as in, belonging to any of these three groups).

+
+palette_lgbtq("bear")
+

+

Typically “bears” are gay men (or masculine-aligned nonbinary people) +with plethora of body hair and - usually - a sizable overall volume, +whether from being fat, muscular, or stocky.

+
+palette_lgbtq("butch")
+

+

“Butch” is a term most commonly used to describe a lesbian with a +masculine expression. There exists a variant with 5 stripes too, albeit +far less prevalent.

+
+palette_lgbtq("femme")
+

+

“Femme” is a term most commonly used to describe a lesbian with a +feminine expression. There are a lot of different proposed flags yet +none in predominant use, and the one included here was chosen for the +best distinguishability of its colors.

+
+palette_lgbtq("otter")
+

+

Since “bear” triggers a natural association with a high-volume +person, as explained before, the “otter” is its low-volume counterpart; +retaining the other characteristics referring to maleness, gayness, and +hairiness.

+
+
+

Uncategorized +

+

All the terms that do not fit elsewhere.

+
+palette_lgbtq("queerhet")
+

+

Queerhets use this term to signalize that allocishets are not the +only heterosexual people in the existence. There exist people who are +both straight and queer – by being either transgender or A-spec.

+
+
+
+ + + +
+ + + +
+
+ + + + + + + diff --git a/articles/gallery_files/figure-html/abrosexual-1.png b/articles/gallery_files/figure-html/abrosexual-1.png new file mode 100644 index 0000000000000000000000000000000000000000..de13742c3fddd2efe88da136cff2db3bf7ac264e GIT binary patch literal 9991 zcmeHtXIN9|x^^5!nHdF!E`3HvKxrbqW*k6t5ZH+HrevfSBPH}WIw~#18Kg;5uppsG z2>}Vj0zsujq=X(JK!6ZJ3nhW%d)J&_=g0o`{&UWsv$-y=buA!^cfHT^+|PaA&ztrS z2V0Tv!R6cQ=RKle zFr|CY_W|tO+BF#L2iOJcvzOzFSd)oGRKyf~b$ek}`@toT=wBkVzLg&Re)#c;dqeZn z%YCL3Oa?L0?rl@90s)`ulPevoBr&ZzT(|JE=#Y9^pRi|H@HyuY(O$NgQ7AX5a5sgd z_Yhyo*jQVb)@4%|uiB{>+k2RaKBdf46_u5h(9(Bg2_9Br&;kt)9ykhv-Msw$%>yvl z`G06#3)7<`YWzF(l@i7idcL-@}w^mbZrVRzXt=9 z+JwR0JH~s&M~_D^LhyW{6baM>+D!=a&5rhR%qkW!UDioUnyd*Q&)*nU5HUV>ldW^$ z=$FK*GGZB*DxD*uFY%@Il82MroU|aW*6s4;!RtmagSxNf{~bj5Z#j5}EMft>i9YD! z;+knGRb!%k&uL@VSlo-f{%Pp}(3ZhNzuN>`D>d#5nkv z+MGT624&e~5IWp3yC#X)%b=HCU)pr954!LmFRwFpJW@7sYs@UmY(0O0MnZ?xb;{6o z-9L7BBR)Pjx%N?`wnHJ3C=Q;TQC3z4f|j0|dcrQZ!__O?B@~WxtxivqR3q=K(dpHM zsq}+~WvqjPgY_e)%ws2zT_b^|$z^_|l>S;jQqXAqwKfcTpUcsWoFc}}<+%AT4Zc|8 z^VnUt4j%Srjp6$%oXVlUYK)jP9cv0#C^n5rukmRmue7q2eOhBNqDrRL*{b$S=6A1k z=XU<_t)%}#(Zy~ZC;jAIZv#$(=w4QEzA!hjnoZ1 zi!T+rUwo^w7R`MBsI2T*fK=_s1N!fWsLz70S&9A5PW$-rV;p<3U~R$~f!Or3?fh7l zV}fUYdV%oXXl2ekdMDb)l$~9#Utbt&io$ye%CVWP%0xyXlQ6Z)+j-Y}ynczj-mQcE z(dw@Cz%%PL@$cxGQHW4j!HLv$%y?9=dep}R3y;j$p zyHJi?X<_io|KTF-?7Qc+JcbW-Woc+=l&`jJ&!p8+I{lQDlx#Gj5=&7lpMFe1vkZ_s zZ-nQR{@6DD@+hAa)NkZRh#WVRxtM5H+kU>3)2Sec)ZWt=OQLG`H?NTy@mjwhdOsk9 zqRDnCCtcoKY%+@yC5emM$?BxNx$TfKfQ6rE-&^laQ1a?$Xv}oA@vbSQ96uJ(Jbibe zzuY#7yZAi5Eg(KV9uJq6mKGPUyD|3>N?HGfPmc}m(o$;!+>PcR-&0Q4_IWic1wN^q zxLgM%7@dOVM-8qPu+LR{x18A;k0c#6kGnoKP0)6&_LS~YLU}8u>`Z&y1CO{h-fKit zG-EY7Uo1Ao5Az5k{uyz5Yh99PtkpeH%=T2G4g)DGE#3M0cOl9B$pmJ#f(S|6ueUy8 zM75MesIB%RwI`sZrA;^}>b_XV??PD^FE-b?Z`$aXfB)yF$UV8+^bu!AtN~}wQuqhd zSEqj#Dl}ff8`rb1a%66~CD)x2Wk#LX^k_6@G}+~9rnPO2Y2@no`N9z%_)`g-C70&~ zl+;v>TH={L6Go9K2ib2U+gY2!!4_%v^Q z1u<0Vg8cHkFqy{RB6zY{LpZl13Wl0aDyOgf3{@kO>P<>XRz&Zu)y1;LLO38j&N#sL zH>-HNZtEZaNUNiX+kW>3CUOyWs6yB$c1a>nlvf+KQ_!y)JpUlSW%G7E!5^uq$yb+= zK})G5oq?KP{`vD~_m&&iq-12stJCkwoyyOp8KNd*+`JQ6cn`D~qZFN@=~4fa6Pz>XOy6ac zVmmWryFTV>*-2aq(xQl3wHQvBxfsGe)pdCPSD zE3a?Hfs*nEHR^QflEl-ePo2EI6&nI6SyraDIPYChe!gO(lKO&0x`Z!UC1VfD!A(FFfN z`r6z>9s0}T*wonZCS2Pafd|L~bKa~TvfqQDmb+)Uxmn&%pz%F8*^6>tL_}J*mW-Ku zQHJuSfD+7%3YVsDP~dPR>(*iIRE3D9e*E>kW=2V3eTcJ@lXzR=c9u!h{AC>b6|+V+WUykvvwH&vb%(<` z#M5=&MEgQRUDV1%&~TLphUHe}F5bFaZ|8q#yCiWXE!)wuh1}%)+yNsbW`5cUz0aYR z+hUasnlL*{9t_Zrh@RogBX!8tH^S60!)#mS_@DYrnN=ZplyAK5D^|T-EUU|097j!( z6Us8yYzogC=Oy)w1k!sBYyV25lqSzUHVzWBdu-3iU0Hgo_xcGY@aBQ`<6WgY4aRdl z12?{dV8dJ4Vs#{LeJ)UfTElm_u^Zf8(>iz8n0G5Gv<$kcW4nN{`!W*W0TNCu+?|~qp1PC4?BHOlR55&?f#wV z&7ggRgwsIph+D4flHfE@EL+KFHBbTcg>tOJAbO*a_M3EyK(1JSb;p?5==}GawNZqX zqM|beG&M=8cFWQdS6&%rB60J8{CR9iBKe>o#tA>RXR_hHI5Yd#xVO@c4lMnFo?|zc zfA;pF&I@YA4=VhkdJSTfyC+dJrD8KwU&~}inxy29FF~2EZ4Nk6O>ghw!J5dDj^=;5 z-z7#be)cR)D+XN>U+dKrCYQ)=L%G&^$%1~Uo3yhUf(P$;hMXyvJs>)H@Zdq@fW1*C zXas)MDInzn@WlQ5R-$Qsdo!|WTqj$l9Hd?Y*jnSc2hL?ro;>kvb1bz)0u&9fSV0@K zZ7qviX%ioLhW8P7>w*?PACedU`PH|tVIm6*flf=^z!NvM;T9Tg;=z7YjbAID%ap`} zRoeifHAN4iwI?4@G(KJ1B-p13iYt7Ooziu^hU2q?jv#Fza`5Y5=;3X^-*8(Tz@$nB znDb0BT4*Wwoxn!g*F#RcWeT%)jr#W7d)^V@I#NSbclvu->7u#FZ8` z2uVWlfFgC#v2f+W@Z1$YBW+`|-M!77v~2k+Kf#{x1m|HQRYSwo5{3S4+|N6voEAr# zW&dO6i09LX##V76n&8vJ`4YN#_DmplawVQvS2e=0hJrAUW_)+pXDMFa9f0+FG%FRQ=uk1O; zLvyu#{~9qclucw0G;9?b`q#E?{W^Fi{7_D{L$T@Hkhb$_3(zq(l)K1djt?8xu2m%S zR8fmcpaW;B!1-ooWYvM~CQFh`#s`7yo;Vhfuya7*GEZf(KmEc%_*>Qxw&g z21vC_YZJ4kbv}CHvV7y{m!L`;yS(8=fbJ=V?QngV2`_0kP5B*=h4YAGHr8QnoZf3=77n(b^FL{=Ot0QYtqO2$dnavXJ~;MpwVBijtCPbOoUy zoCf%jwN{}|Y3RUXt9#bf6&31D;}NY@yylHQGsODrhqbjX6|{3ANCL^Oiv}Ts>Lu~> z1@hQOJMCWJQES7Ei)-_P!Mc%eZsl8`B9hh@*X7}t!NS`q)TG^OVSh4siZ}Q6n0(r| zS0rClRb?V|h!P|vQ}bNSN?zSraq%4K-D2CxXDq{*sp~;`KCx*Y4V60Ypp9(=sliBD z&p8PLuZDh!O%2MMK3XV3qC}2|;HqZ`r2TNRNMo+1hXnYThj;AgwSHp!#!(QeO*Rd_ zH5ypDF!;iG3N3u+&Yd(*_EZ~0AZR@@DHc59H2nBXVWJ^%dt43o7b>-^^@9Zl3bNiUGtdbiIaDI5@Ry?V6?RWZ*gb_N`mDKv7Bh0||=+`*04cY*8Q4dVTt>F%UxZ zC)o}kL&=;{dm!VBkYqW9Hp?5c@9m8rvVD;kE+|^A{*lSv&{i@dbKFD#FU-tpiF8bJ zgy&12ILxqF{Oe9#!eUuRX@)?LbessQ@XP&KXmF=#^AB2?W#7BCo~~2$)DB zD0=WZ(F>o9H$Pd?@4@$`RTYO&jE{o$ABV$MEhA}7;hFJQep?=DOLR!C-X`k2h9A^> z4Kwj<2(UL_e{D4sV*k)EEl`bkKWYb)s_yII?Pry7XG3PN1=|wEPz{Mm<{P>dWI3MF zt{JDi06f_#6i8)XGh;%?&?!;Vg-6XRubBRQMJ7=BcR4#+NP`9UoEyLRQ2*pPjJyki zWVZa$s%*>0LZ}D_o=CQl^|{PU7CLm~e3J3t{q^L&Sk6NOB<&scGR`3U^H08L{%8?I zew>s9`v)JTfV?nCK%cw8_+nSPA8VS1qCr+%Gm`pUo8Y8r^VboPvDl!ynH8`0Wm+I!IY^!C?7JfhPeJwJ}(|NB5uh&Jmt|!OO>F8j>^_Epj zFa-^Pj3LpR+!HXN*@ZS#c3{^Qoco^01*{`oEMSPOL+*xql%U3EW@gkiG;prWPmisN zv92G7AWl$WUuxOrkPLc?fzvnwI}x}XI#6bl(G27dy;IijqBn0g+cCsjd$JY9w$>VG zHo^nA)zMu6MWh9(>A0mA&m|NxEp}(K*8qo`=Xe(6j#ICl+XbYz2j?@L$UYI$wf9rJ zVYDGc@!LjKW`|_{Ypp?3_dc9>%OZ>$*0#&^`nj_Me|JEu30^-~R2;JsvuM_fZ2J9v=^VOfrTnD16X*rOn zb}Br5^_QeIo0P(&9N?YU>9jqlV7Ic{<2iZN7XxQ%yjyORZ=={#7P^I|zyQk!bfFEa zr2y!4cQbS2wwUG7@dzGPEIG@3{k<_r9^7O@%03tB4}G>l`0ke-aqpsDG`IlKrx(!k z9>>Znm}0~$vkc}70@p)?f8Lk8dEmxi2-7vq(^A2s+PBU0+#W@Xqx&R8warwQU(!|Z z)W*gJLT&40(*70>dv)%&ZY@G)J75e;5OVtNU;A!r@>NXt(WWKmXL>oIrjE@QvQ>eB z^MQUt8)&NpB{#!Ur%ufPSL#BKcS+Lv2RXP@3#)0oEQ--L6aqPf-P*01&#AroLPfz_ zmI_!nKhBqR?3gFv*LI5AeBGZei%Ubuch$$&m4#s(JJ_N3PK3#91vUGE&4j*vZ}bq} z$;sDA#p>4`)~9I`!Y-#4U0eZqT8PwfshZ}QbnEb))oD3YRLuujza()tzvP&*k{7PD zGZqBmfP>l4$oywJ9s5DwWX@1rfF$LZZ_JR3ZsKiBA>?|YCXlvdUZG*QJfIc!gY0(R z%2A^T@8Q~U;5r(wz81m_xdJ(-l5~GuuMx=VHJso6spp2Y;r)A)68N;p+4dstM`jIn zJ)J!d7|{ygXo@j3y%uM7jGM3IHRi`N6UC$Xw#ryx_P$-RDDEMHzdd?%%R;9YrAveJ*RW~aM`v%B0ouewLJ>^!d{+8_d>QzJAJj^VMm}lDCbIra zDizyj#nfrvvs6h*x;U{x72Z%5f^i(7fC0$5pcvn{mpzAEc>%9A_}UG8)}A_Xl(a_~ zqc~UN{P+x;wNLL!!wG-%0F&+S*Wv#z2@acKRMl^ACF-93ila;}z_43r#U0C$nQb9vO}ADxj%B*c21RKQcCf!91t zH3ccg~i0lxDobcZ`o(c`X znN2&6we)B=cQEBmcv@Y*cJ0~`L22R4vR#VDb6wa!1W;;7OG$M^M!Yg~QW4BFFAP)% zn(r>;t8}q&8^+-HoBOR01;5#?cg&ra`pq}uk|5dj`Wu^N`Qn} z{;Qi_A(WL$RlAs_^DDpZ_sffwE^EWHCy{$syE?wSxh=UL2Fe);yawuc^E#fl(%J>g zCrOSGElCf`d&sT2b6ECVr$9>=D7;LY44F-*)ZLUn3 znZ_(hL3?*G|MZW5t6pLSl>o$cZ%c>)CZI+Q5Q-2>CGKyH4{?Km0q7m=6swY?9}IdX zu#ba4SDqQOH=2}!B#$>#e+Y7>`pJ_oWWJ+Td&vT@%OFf8XheX>EQ~e;f=C!d0LJDS z*hj7PQ-SkFDgJ=n4lUhNighmn%-sXi25jaP0Qf-wn($okSS1o~l3l-qz*RSWY);w* zZcZlX6Z)!-CEhHd`;c}3X88B-?uuk6p(fS}3)Uf*>!7Un{h`nRu4M$D6)C}yC1bEP zZM=>OwUSJVo0LmpDY|i)z4i%#@PF>h>#!#XrV9T|3il{JOI_y!3^yQ&drx1Xk zJ?b^_1yXys;DJFW>A{-H%2RxL;PcK<9W134TkRPkO@Ho?38x`Z6Y)%yN*@hxeGPhm z7tPhzRoQ1ew#Jo--ux3uS0ZHyB`(XJ=xnjj;Ni8JMveh;O&5mmoE;7a^8|lpHKE4U zY-$K(UOt%fZ@*#FP~Yw3I|CDXGCYKd>N3ci=3I#={ys0}Y`|zG1kh zt6l|d3viDv;9koE28Erf%m7&sFacWzJ{sogySpwpJm5~2d#mq&A+2>I0rU3l+f0Q5 zprcRHwP^~Tt+C>=EeFy49zlbB^E>`vQ*ztJ_&z z6o~7zaXozzsi{FNL#}Hpp>#xt1v-l+sN?>%gAI@&56c;jk9|@WR+QS1)#A=Gx5CHC zw}K-hi3gIpxifnz2XC^=dr_=Q^bid|4dc~;SCy!&EXUjIO;KGNH;rA9qE8ikA3hf0 zOgWwrG+KF$xH*qoyUnT>d+9fx!eb%8u*c*MjqQ2%?AeJpIwnT+_2>QTG;m^|5IPHB zG#TyeI&I{Jze59aq>jzSfxkxuV885%yYq#}sd&bm8L_Gj@Y%Fg1#!p{VkiR3ACgy@ z4cmY!R>bTkbhsUe1uC;2SPeyftq=@@@sp{}v<_IUExS!^i-syCj-eJubieackPRnX z=$jS#bQ%DHxk31_{y9vtW(08`^;4Mx|uYDM>*TM<|bLnwI0Y~n_}CTO$pRRzDZPozh14ke(11f#H+<;`4)+>MZm&~-yQ(2a3pv1`WB?+a_3BmN5tw+8=0R4eut|ax-!~@N0l+V# zox`TXr=k(V>KWAg>W3H`n|G2QWPV-F< zj?zK*Gqjc{Q`@euJyq;^ zG(%Q99n8^2+TV%xBiPEwy?!{R6j;4-6uFxa^mHhWnGGCA^1V?rR1oC1zSB-sh{^4>xttWxaAkI>+A;qz0w z&4vEspn|c`z^EL+F2^$09)e6LwYq>I;tvw34%m#)Otr7r%(m9IZ6@`2Rw{p=M@ko{_UiIN-~6v5Dc}Bk=TrXM zH2R<4+#wtIhD{jvdFh8bV-E697ERSPKE4Ml9E@jW1w#i|oH-p)e-HRwu|5;ffWLCB zLLr10ap>PVCG*e!@qd2vzj0#YU!7w5KN^KQw?G4|ysP{*IEs=)?STowVE4cK>NL1} f@x#Bm5vbfOL50a%8wvs{q7(tQH0dfT0wPjEHJ~EBNeM_ou>mRqDi8#uOA95^ zOCUkm6zL@pLkOXl1PBsBOajS$@!m7O`{#^%zHi(=-xw!jyklj&NmkZ7*P3%a^Lgg$ zyLSwQg~WtFAds-pt?L#b5Pu5@#HX@P5V*rN^ArFE!G|V>*MSjuu?*0W!0`LyTXumU zkVMSx#g{Pu!vzF71v0vR)#}NoRg&9%s~c_6)90gJUJ-iv$07SAiK};)C9Yp@e=d9K zRrY<_8%B-j^{>x!bD!p(5qh3|>P&OgptkKkwNr}k_M9a=!bwoxOH^;))99X1Zt7#uPYMYeFwVo;1q~|_s!cYpxrftjz0q(*c~tK;XA%N z-v4dS#oe)G-*5MK$ESa8)7e)Z;nbprL_h-f?{?{pvUIdznJ}UPvhtmrC&F$6kBXCnFBwCwM$9m8yLX{Gf|`CfWaDBnW;c zc(;_W8Z4o=fvWW(=PEjAP*9P=?wqwlozF0rpA*F1loQw+Q)E9%X>3|P>WQySOoK$^ z8w(;XWM|c`KXP&LU}i$>F#)gD{Rl-^?qp6gXKSf9b!3B1x4d=hV>d#sWPLpVd9UIP z5?qqg2o)=W)ubVhLyWjw0VcL)q|nUc#)^faW960f+EP4b2cG=?eR)yQ8_(hTR4wQd zQe;)DBxreR4|*|5L{jT>enn5snc#eNU&7~R4s#h-Y$^1+hWdugXf6VQD9Bex@tSO9**8a& z1-Ex9D6YPhw?URFq^XZU@%Ku~CA1YTUc5Nacu7U2Cb$i@gIPb=-cdH(kL6iWiY?!~ zl||K-jTbo+w;Idg2T}0`AX!-sxTReir1Doj!acZyt@6cEpIE+u>o`bFFb>4&8d5$&{lw?VWe&Dzi(xDJT#FyFC z8T&QU-_&}OmWCI1!gf^W$~i&2FNVPR>0ad=t?ezn-N*7lOrHGlAznhCVlHtsPr+lF z<{uiNBrR=VibBrc9V;_A*vwliTqH}W1Sjc9Fmp_p&5_^p8i7mRJolx;YTUkHJ$0LM z$9z#oxShB<`a3=%0_MIH4x9OE2u50cWiZ&L;+w+`D6h~Jp@ed$OKupkvA~m5vKi-U zf*u{m!i!2i3%c_=uZbriKIWIrQdzX^9#OeuRrAc5ytOiE;1sV(tV>NzWqY@Z!d5dh zk~1GPGd0obYmfJ>S9r|?Ig=eE^yqDW`;B5ui8@3|Z-Pq1uz{KG!rj^@TRNjGGUL&a@rnWtNlXk^qd25!Z^ zoQ#-k^df78X`{jAGrAR;UbZCZYl0h<PWzl!^+2`~5F=z_3jkcl8J)!j8+<(v-1d>anvU(w)|wbyZY)JeHd8 zI?}SrIuWyQ0;+C@N%;Hld0f>%+&BxL6*`ucoIJli?px3{IgKnV5{^4d@gn`eD#kM9V%>_VId>SDus0Lz_XX(6qpb7+Cl8zgEB?bnlh3I zR@B(Y$eM=Ht$F-IO5l6t^F+Ys#5qCAxb^hJxui#s5NEf#R+{GTzjH=sqeZk}E3XWh zdXFz&?IYF&Xm2~p0#6KqLrNO<>qr&CnKVoKR$0@bh*%52QsY6iIg6jowi#Mb<5hSN zRCC+Wz1vKmQZ^(#fW2d4W|J_f@kCX!kgEgnYvR-r@qAYvJP%fU*=wo1TzS*<=rQY?ACf+O`dmiTpk^=~N46y5 z6ZXl-oL?S`znq}Oo7Oy)gfu9&QJx4Bivva>&DBu$skdwFAesNvMKRe;p19kJujm?e&(4W4bp>= z7R8m%pZCWz4y2nJ8J(}8wM4X+$B$^}-yVzCCy7%h5ou{i%!|DgavLvG*()4uqRUvH z^}LJ4bVnz@N1;%|DwmRg(~(%nz5B9^aof`q$({@^+>-do;~@kmC!JpGJzx>%IcgiX(cp#Daipn3-KR*DVci<+$#;IF z13LcN^B428vw1+=*gfoSPN757m=BwPABsJOM}kYlW=T>fK{_oeEiE#07NLSa7ws&e zluZxlDh@K=gT{PTRZuVqT<9N89MEyMYrXs-JTfx6!w$Z~KTdCRGUr8v ze4}AcWv0A{Ii$L?C=~?7dx1+_*9KTFuH!)@Q%JP}*Dq$nUX8jmdk|w)^HD6cmXmK2 zLoLjb;Js6JP`_uwwWV5LrWfRO#uu3ycFs5E#K3R%(o@H}?7=59Ez2NPh=)Aenc?tHMgv`U zgEBrD*Z=`M;?vKv@oMi?>t+QT)G##MH$axNoGwQhEXXii-G0EfA~AoqiMaGEDp@sa zLFrBEsH}>Bc4Kzv2JT*)n?=Bfa?G+;Pd#-4lgFOGIWYCMvd_w0P_-JtvaXtnIU$@O z9v&Wz(7Ta6RWo%HkMs0+Q;9l}nXv)`Ab!z=rc6H9-&LPJEW|UKN9zVab*-qgfL|ir z5**Vu`Y!aqQJ5c1#MR@BuMUWHDwSGNoESOUqP-TZxovC_WOak2zcQrLhB~_&G-S3N z2~GK~+dtu%(>5RW?Af!q;FX7?ZD~t%A3mJmHS>7@;#*ax=-Aj|p*~Ij<{RZ?1fW|y z*rqx_Zo6@2UX(mGr5!Wh_^_q3(=Z&y#21B>MoyV+!#;_eT?t%vlnQ6RmU&r?LFOOZ z(NZ2*S1@|U$H!jEFc-UY|D6G=;_q28PChk!huu|oVH%Ie+eB{bIJB)b66b-hCg&

gK1Zp48OOnnHnn=Js~gtUkYdWJU! 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 Yo;bZTw6>E1KZ-hKWNMiAi}S620~2*$4gdfE literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/agender-1.png b/articles/gallery_files/figure-html/agender-1.png new file mode 100644 index 0000000000000000000000000000000000000000..42946fa10fdf54763f452d1502970856ac845d4b GIT binary patch literal 8135 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/alloace-1.png b/articles/gallery_files/figure-html/alloace-1.png new file mode 100644 index 0000000000000000000000000000000000000000..20efba5a893625a8119cab6a45c91993c86c143f GIT binary patch literal 7064 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 E07?k^h5!Hn literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/analterous-1.png b/articles/gallery_files/figure-html/analterous-1.png new file mode 100644 index 0000000000000000000000000000000000000000..69d2acd4d0f511a5d4df23964d46e9fc39225091 GIT binary patch literal 7785 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/androsexual-1.png b/articles/gallery_files/figure-html/androsexual-1.png new file mode 100644 index 0000000000000000000000000000000000000000..624d00a6e16d8bf09dcaae91d6cf13a2364f7214 GIT binary patch literal 9944 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 E0bR|900000 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/aro_spectrum-1.png b/articles/gallery_files/figure-html/aro_spectrum-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f23054188caf961e16960739fec6e751e2311977 GIT binary patch literal 10362 zcmeHtXH-*J8*cm@Wh}@bRcShopnycANeSqPGJt?cCy*!zC>Sub(2_XgD4nQCZ%R=* zh89`~3IwGZ1wxMyia;nKKuAK8dzky@{`u~A*ShQexNCiTt*pJy$tioE{g&r>-W_|( z+D!ED$-^KJNYwlf)7v1>{x%S3pVrR@finUd-vdB*(8JQq6zGA*xz>yYxQ>`4fT`rE4PN_Cc{rTAQ#QiB5?=O8?6T>Ejy?ows$b8+6x-*@-mszuhDsLqhWXmy=Qf}#{0npx1iGU7?+*sYzwC>g#M*~! z?yDo?P>U|#E?lWIxEp=OujxRsuDcDf=q>cIZ`~%TVDE%ucn}TD3eoyMd-lJ7>wo|G z->u1izs~>Duk(+$q-=X!y?XVgaF)Ns5b<^EAt(Co*>{DU7d80EEyP>!PRpL*JG{R{ z*z0v(4^-M#!HBovdi(!_NByVO`<OwCxm<6yqSAhN4gjKOJieM zK9Wwxhb&m*{b=qUY{n$Xc&bUN&WHV4SKK&PO{)S6MaKkw#Vd{ zUwf*^g|W$=s}r0Td3iD`;{+Ur&+XVJvMR${BiU#p#%e7ponGQh1i#%#JgHD%hD$85 zn@ZxaWXMZHWd$xZZ}A8!!n4hv?~#Yb%I-hNkj_F3-!IsFfA8~GS-sGxgcDjC%GTNP ztoc4%k!9NT90M0hxl7H6N4zeja?%kP7GVU#%LRtGQs75LArOI9R+R4E9z&sWLa3h~! zn3trqG+DyNNJ<9w2pJ{d$ec)|;60%!I z;cttc)J9`NfA?>{PWG4%2FDQ=S$y3r{$?MLCccz}cj8)<)Z}M(83>==~!8@qN1E z|A>aLW^0(e$phqd z6S%kuXB1y2kooG>liK;Gh`h9xcZ<^nD$jqNyTqx1N8x|NtUuv6-EjQT^6}%xhH0=~r#os&V!((Owz*j2R}^uX zGy9GHbOGKSmhiP4><0Jv!LJu3Dl+>>H5=K&A$I6!wHKb&8r{KL!@i$3rdHVu#>K@Q zr(W=EeeFj56x_0w>$D@hs;8%-Vr@A6cRD1W;z-+$Nb_G58N8(#2zT@7Q*BdL{`G@1CIUHg51;h zIgx)*$+>bJn(7A@+TECDk8224<(GD$57KOLF65b;};>uZd+Bc2m9Qx>G15+V{gx zX;tdZ?=NyUry#~W1}mY8bf02|ryoPB$zw&5G{pG|_yDOEZMC%*_$s7Yz0(WcK>?-D} zx@*I^Tr9VH(+yUFD4b^{sV|G`3-7Aa!@oO9>X370u+o=?G@V6eBWGh zcA;y=#w2k;$jUp((ADyDtV&{Gx5{=l={QoQLg*$1Is5)D<&E9D`?aIqw)XatYH45` zQpkf(g!SpXs0sAKYp(KmG&#e$Er7KElaHM+3tEYa`&@}Sz4ug0Ww+n zMM{cPqrUz>F2P(Xi+9)ib>`3J)wpXo1JyAUqX9{~d_@W=b}=eC^0D7L6-B;HxeHNw z8}cY`Bp;C#m`4DzZP;qb0-a$uV5uGwwI0j!{PKLVN5>ii!vy;g&?QxR4@WMpVuMYO z%GN>~BjaPzIfC+$fc2}f5x5mXyjgC<#cF73YvY%0DK*cLX_bxy)Ra}r_FxaLtDlHc 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 AnE(I) literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/asensual-1.png b/articles/gallery_files/figure-html/asensual-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9901d9333d41aa7c0d5bad4f5b8ab6c316ed7c GIT binary patch literal 7970 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 Dr~f?< literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/asexual-1.png b/articles/gallery_files/figure-html/asexual-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0a221eff2f0cc2b70d014900e9ed0b4bdf3254c5 GIT binary patch literal 7682 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 EFEN;U3;+NC literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/bear-1.png b/articles/gallery_files/figure-html/bear-1.png new file mode 100644 index 0000000000000000000000000000000000000000..412da6332995812f03adfd536b64879fdd9fa286 GIT binary patch literal 5731 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 z z;-EO-^?BDMEm3FkAcB?aFC*#Mn(M`mM|}Jg=Z5Ppuu{zds|QMtH{fombjE)35fyg2 zQd_742;Tm&^a%napB)7|GKQa2IR0~w=szF03Oet(aK1{|PQsAKi%vQ^mYKIvK^vIZ zl$1I@sAY3M-YH7=dR)A6eq;Z-n*K&N>3oUPdL4dYrq$1Ty|Dl5zqG3UGaLV=xApgd yPw$uf-K_i9KIwW-wX@qE^qD65`2V2`q);9`_dc0xePE+oe9F<)f%yH!U;YPg#7{K< literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/bigender-1.png b/articles/gallery_files/figure-html/bigender-1.png new file mode 100644 index 0000000000000000000000000000000000000000..987aec2f4aa7c79d4db8a8e53f790d2d8b3880fe GIT binary patch literal 8345 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 Cpl$yE literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/butch-1.png b/articles/gallery_files/figure-html/butch-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f785188925a54eb0a9c0b11a5d0b4070f6e5a9ef GIT binary patch literal 5380 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

rHnZk8f@l+ea?PW*VM7@i~ZgT^@Hq zW^=Ix0cy8r(O;--<|o8zQUqq9VS81myJPmTWvJJ;LnsUHLGe>x7%4^aZ^V%|V3f+o z3m>c90e{4o1syZY8Pe|rh1nnU*r#i5Cto7;Hg=7QFu`b>65cL|X(6nh!!E zzR4lNQVg{P`)jTXBd>jPG0AwJ?j7Kq0I5#~CY&=K|H03pVyrenu^>-UPTLNakKHGy zPXco1i2gkNnHf3YG+2^k)6S59B=v zkhfZhItvX`@*(3$^IGqLQv`LP;R(*OBU)sqwvXDi9Bm;!k-!n(e*gFUXkYm1{0M5x z0O-lFc)9+_I63CjfNLT&59KoHPHFq(wZxfK>r9a=gXZc4cCAJ2S8Lz4kqu#33`vIw zjX4ydRo*K%f^ur)@41$eNHuuNt@V?ARnG+1cF_AZPvh@MJpuwhO9wIO>9_l3GB8*{ zt7h<-@R_#11An&4B%(eHA7&#O!N4 zJAnxdEVZNRUX)zB#(Qq*>FFlRGrdK?_U&szvFIL|&V}Y!c_4+cU;B%%3XRL0Vq$ZB z8FCeIaxyCsRITiiQ>5pL1@W1ll=ux4%go}#9Nn9h=U$NC#`snw+8KQuo0yUFm4oxR znn^;zx8>mZ*}rJGg#S82&65E^Uwth}a;eTaIAM!758b`GAhkOR?^-(&Ja(=BogNt) z6xtK69>V%=JJW+5M(6)=yPFoQgcp6*es{FiTQk6EslZ<3Nd2)LK+6ZoMQ^-~OOi4L zw%mOmbNL9r@nGt@-dsFELFC9Bwrocg1_Oz{gImjGqNso}z0SA-I##K*K0{pqgZp&r zf)_&KBidKqpN7;cgD%$J&-D>)T8T-vUk1(iJe?nyXTNi=<9^@hXWLbxjR6tB5SQ)u z#@(4PZjM;vHrE>?_eDa}vIw5uzYOZlRPSZgV(Dlc}Akx4>H*BFd=n zclb@`Qg%Sg{-{+O%UYb+sBK65$La`d8wh>x_zrQ%i6Xamv3=+U)jrni7)IkEtHhoAj5=_x(SOl* zN!K3>{xg>MPW9vOQQ+I0M9W3c6ukJ~-N4`ee>!)Xl`FlZWOx4hQVw3~X~sSn|C_L@ zGT=BCQo)vtHrT3i6t-FDm;ZIY;$OBU|Lu0m|LJ7@=av67UH^xA&eG{P9BwG+5a=7=nTV5+FwAnHCjLAhyVifKWjo zfDB=f(Fz0+hzKOiQNj!%hAAPCVg7`GQ5(GUQTR#Et5cIUPFa=N0_Aa-^frs#&AK^g| zq>#w_@nII|w;)K??uzN9YvK9SnW!gYA?=^(;_Cd$PS)x-u8KTAa`kx6wXc4*>al!2 zajEA+TIhGUtCZn%m96~y53BUgeusH$4}W&oS0!9oRYtXEe$N4dq>z5=HHZg&pki@5b%5sEjm_ww=@ z9UIGt6m7g(_}0{Yv5=f)6;pa|D+e~obh#NTjdXJ>~#ph@UHfie6hXmKF9qN3tOO%0~ND9XIhIL5Q@@wXb$ z%+I>ZMG2u(R%2sh8a_k$;hS$ydwu%zKD}2C)jf$rme`ls(93OO&ZZgdj_a=ck?#4i z>z7)B@&5V;xOU*QbiEHDO-9qZJBVN;<>25@d*jUmX7_1h34TG*B+Vh+6E?3gSbA@3315OSmIW7+`rIGL;#Op(^`%<3$S9wm1r8KwYzt*`_ALFz&G?Kif`31SD~D?6i zsAiBC+`$1G!I<&&_fJVmB1x$w4?We-3jYZTZE{S_i~Gj^@~QOXqbiQ;z36z);Ei?e z!0@OCmqlW3gmuaxiP(viphPhRSqdJ5;TJblS5{VxnE$PrIrk{fa0wQ-XSuybs`(gE z5X)L&4r5}E5KOqyHU!j2skIxr=O}t-%n9GIzmZ2GRa90!vW?wLwSRw<)2ytN+nq}deq(3X=)JwY+1ddvZgK1#I%l5--r3yT zY+lH8_1xa`ATJ^eMu3OWS1n?-!)Qb`MC`eyI0DAc*EcDORwz%J*?!~P6w9_LG>Kk* z$=st-D3lo;HiQ1zqZI!F#YUzt4TLX$V!Cy5^kUdQcvu9u2Lzj7R~S3%BNpALje;W* zd9lK15^N(`Y36PaxQM{8LI+Dk^0}w27vKh~-4xHghfYlg?5>TO62I5QZU`|ocaqri z0;tb!sxhDh>%YGg(JmlcB+!5JJbG^-3vVXn{>1*k+;kvUONGUtDFKHG+>P+_^P4-^ zB4A)KE0%hARCj5%j7e;?e8{L>ghCVC-Q7LiB**HMva&JrV}i7Cbog}i)}TQuImy~5 zxu#_?mpK&HA$j=lVQa;ymp3lE-FYpb5xKqmw3oJ+)0-kANp4%6f=4YB8>c6~vYN>> z$zfT|MnyM=2IOyM)X!C{brkY;bPzxsSdOvk%!coon)*NFV213n%BKQqyw+-3_r}A> zQ96QRO0ryzlF8%^@cJe0F0{`6QvITcy@!XAlzXt9Ri1WLkr%;;F`aGDv=?Ys?>AN< zt$XLX;qJJX0L{+cUb3tp($A2!Tw+G351e@=t?lou3a|T)=2d3%RJLg*bSkrxL?rg+ z_!Pk3BlGmBubWpIT{n%Zosp!fN0PQidIhl?6K$9(5ILF_v07&fBkxLCIp*i)=IVNn zOU=c3AY4}Mpz#FZ>+#1H6HN|2X(wQjq-u>Df8KL`dHoXB1$Wl52B84rQX_`74T8%w zeW@U9He&Fb*Qic*sHmc0c%IKQTLWrC_~+L`Ui7&h`eGiccXh1NYoR|w12x;mbJX=F zax5I5BCB=w7!2X|*$}LdYFA?3)1RS|x31^aoARQf;^A1OlSN2KNZa-YOWyL!AaxKG z!=}*|s;-TyvT|~i50Z)^lWQeN!s|&I0H4h6jGczK> zggwCw-@%a%#TxDLygKNdzDZ`gOUBOl>!U}}WTVcM1rbDwIHD#^+^ORz3KpeS5F706 z7CEewYsgsN>O5v^T)#ApXS~57Dbpx7=}In#n2EboXkyISCX4qXMY8-OjF1R-8Ih%d z)U}Q%YvD41q9@UU(k@>Y@_BO(_Ry@AGM}o#pdmet*aPMn7>xX>)~7HgbaX6$TZP?= z7Sv6D+x`C8WlDw<;&$C^YZ$GWF&kClRD&=u>}YJ%<~g8!snzYe4lZXOF9K`(8sN>$ zCpxgsRLam`g+j*H=g#(KZLG)vaMn7vqX-LOI8~pRK`~q}{6Ge$3UN z)0{lys$5ZA##~K}o6MUb{q`$21F6X-?2}6bNQ$NJx8~>7dAW%jGgIc?%6t=J@A;X2 zdhvoq(17U|z!1B##{8m>lO8;H(7ayvu8wE{)|EVMGtCPEQEBz#ig5>Y1@oVcH(sq( zWA7Mpm=sDaUUBO7fw@16FBGp3)_pR|?ZeHO!CWmgW2Qxj(kLJN{t~@g(so@v_JlV3 z>h0Cha`>92&rpg=P1|{8<;f{jP$~T@0KbLGgik`Hrlp^ihUwz?Tooh*WB0+8~`{pIfg;K&}~xTQ0b@< zx<0-_clVWEG*V5HUy zFKrYVOk^G0-}CsW;*nlv^Y)ecXc0k4$qB(i>CuK;?3b8t=D#nV1#VSOJY|zFt)M^8)&8@tuCAGq zW{`^oP<=ESxBBT#q6N7lW=ntZPZ8MkVkB+0-HZA8Qv`JP`KRx)>=QfDPLiV~37z^05P z4)}>@4P9W3FI3%{)sX@7eZLvBebt>7O@HK}8lK6cF6HI7>$LqwUlh;%(bi_DQdDMJ zh1zYZ&Oal)sb1~Uj=e*de_gnw6j>97Mx z<#IZK14zs{_gAL-yVNbtJNq zRL`#A7Wc!^VS0beNdh7o-yRPM`tl)S_ZF}?LiD1h85Qo^FqEeQLsDP95mWKYOtNlL zo1ARifVG{lP=t@W#=7GCGD0%u!Lsx0z16`+j%sjBObl4bkN*2fII?iLh3zW5FqbWl z3TrTsA8&7MGU0!m{^zWmP?zGZ;o|kEjL?-2&tDh?wKxnnwgCzQM_zs)nyei#>ECj9 zbJ6uZip{`O2XM%PjUjP!I3#IN%Tg&YiI_M3-708IhJ-cBUMZr8jAcrA8b? z3%(kU544FIft`TPr~%=rHckAcd1vaKh@EQ|c_IuNmkbxVa8cxaN6bF9z6*%p2y)48 z$tF9R>do_lSNdCWsJ7Y}mGA4<6vnHfur4#(KaGUsygCC@Syx6#NT9eBrJghasP!q3 zxN2RE=bUj>O=e4!K^?N{a&v%tRfJQFVD_~9SQ&~qDWo*&PswSibfNp%;rTCq{}q7U zA{2SOinbmOUi~!Haw>M@C zkO8g?!67^rUVlhGuq&PqjubhT^!zGo{kMtEC)rwMbsyQpZ9 z#AyS_{gn~5^fc^HNA8yJ>HNpI-FF_Gx{vTPv%>tCcP@DcWP9L%91(()rWo`jg?CM9 z#;j#5PDnBQ_}Z>c%h^)}``as$3k%k;>T3=TM{7D(HA|j<*eX(_*RmO?x<+PPR`>7E zEk!12CV{Ouz1}b4XKa9^fE4tDle{oSjc;A7t*r<0^)zYiva+(C>*KWogsTXIVwT(8 zD@0bdhS#Cl^f?}%t>(_+;A`Ygx=;iS=lj;uZf`VyQCb8FHQ;4Fx1d2SIFjTZ=6>^h zPTTGtMTskoYTt3Rt9J_-bATfOD$x5*V2iFiJjq-U2C%`u8bx!5YVmh-%n1r)%*ZH&%r_z7NSD)w2KZI5z`*%^bc z0V;wv+!_EO*p8<3GWQ5^h|fMx?8j;^Co<`A-h~sLEFn^lZJc&&88;Q{;;w)fmCFw? zxdDym@vgl%WQ_>GEzGBi97StKQ*oq?ZL807J&(LTe|&A{m*nR}*r6oh6KAEKRcr{tFO%x*V8B^gkPA2 z*Lz!vqOet|&uiM`N#tNJc}`0SB~{1C+|(3cT?%LMd22{0F#5xl(><)6wG*BrOX0BA^}1s3?_n@ZqGIHk zUGnOjrGx~ahd%PL%uhTVbZ+pqYXdCCdgvmNNHhlwW&k8B9wH?OiKoS~Sv^cTB~R_W z{U{J};o<$XxsMMYV(|!ghw2cUbszoN$3#*=MJz?ks1?sC#3u1w7V5co#X7F`e848Z z#(ekdR-`}VtNjmMycjYS(A0yhX+M^cVNKg&F*>#uRU?*J?Z4xe@Vir}u#PXGKG(`#1-D%dKwcjnRSBi& zUewSJ+i+Wz80WurJ}28CEbssXL0W%*Kab7>^0z!u?<0@yme9D__gEJYf)Y=;LXjB< zZU6DFMUJT^=>dJt+b~FawLtg009tpKI>qDg^1$)XecvXU0&-GQHWRreB78H*g?#W;0jQxIKMiCf9YtQ*exNz;dd+LoW{Z8O(k0ZZseQ0R;B7PMp5Cqp^fX=RuwBL68MLzs1&v z${4isz6gN_T5|F%;0FN)p&Qz7qPm&gB}@s}?K yf1BigYm)aBwV;h&2H#7%suxB7^Y142xZ-T}%p>wxawwP!T`{vUt^VQqum1&1)VP=c literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/femme-1.png b/articles/gallery_files/figure-html/femme-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d652f1429d7471de969a862e451a6e87f9319a24 GIT binary patch literal 4584 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/gay_7-1.png b/articles/gallery_files/figure-html/gay_7-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d45b9fb84a7a3bb4a68a7f030377de887afef3a3 GIT binary patch literal 6704 zcmeHMcTiLLzCXyW9Z^v%v|V*=fQU3h2`V5e0wU5&6oh~QLPRX!< zx5Pq>bP(xHf)F5t7&>XZ-|@}7d2i<4nLF>V`^TP{kU2TwoL~90?>A4cnHY*~J-8Ku zAhFAr^shsZ=sO4!QQ5o^d?GZx^DB7U=wxK558lDCrdJyV-nMvOvhjf+nJ4f|gfPKz zfuI8&m-Wxz2uNcM2gi5&4o`8~A_%LG%`E0 zU%PBlwHaF|GQ6VKb^Yyed%y42V=l>2Uw#N5zPu|R|NYhRt=aba((evT-W7UJ1gTR* z(5~XMtsy8sjWIF_%+x^RF@Vv`A-+{kJ z&i{Sk?HuWn71y%KTE#Up1$Awm z9dCFv8ou-p{$6wYLXa2~0mySsc81Axrp3wxFRIPV+*z4g6S?%H@|-ASKwJ-hdw~F* zllnbeB>a_nG2QNwtVp=}tDLM`y_t3SL}E-J#*)<<*!Se#Oiy{o;cGcTi7$Rmg>-#X zo`a>yZ@xbZ5Y=xjO3wu9TUT)jk1tDe8B<#|?RA z+4S#mrm?1>Gv>h_kHKMG>E)nc^Y)13Df|7+FBGHp%3C%tNfg=c?(WWNAI5Qc`Kb2~ zHqlCGvQo#=yf1`syE0>+KYy;HE>SJ181Q?+NSJOZewpHMBitQwYxcNr5Y_)nltalD z$)%+w+^EjVr!af16BXD|VM)90bWR+-xOOg*9Ll?>-*A|qy&Ihw>euEY8^-6X4l$6u zIlZL9!YFFgKANbw_Rf_dA5)KkvV5Bbxx1f#$2BWfHcWM9r%HcdlX+h82@@m5xnb+V zlG}~X>zr%IWMorwv-9|;7z7hbUUR+2s$qvIAw&7eoW5Dz$)Y8u?r#}MwV#y^?M6!| z_)(8q&qf-*f%*z7yoL{sn;wwpb?`Ng1KZ%#mWIHsjy<8pnIaGDl5;E{E^#(&({1HM zq4D zih!$S_vYsL8I&Qp^Zl?$nNW%3(h{S5}iesfAZZ z{q}y7oX0)EcXQg@#AWExpU}pa7GHaNX_RyhF~GCCFqyVPn21+qWuRyU7KKh=ugxqh z_A+}(gusPK>Z5&*Nee^D&Yv2Fs(tJ{i$CtrQaEayvZoZ?9-D~5BYKE-``Gm>jyEhU z3@j`xJo?`J?ucKTNK*H-jZaKO$D*q5x}^D!1eTF;&Go^-1pyH zgo1~Pg4xXt?2^N=Q431-RgH|Pk@{fm#ST59j&0O-DRqUTSCgKVRumQ{XfeT+XgOV^ z&urvg`4k=6m%ofuIKh+2=!&PS#Ny&ulyE*VdC7>xFJAriCV?ZdF}x1m&361Y0MVGnlSiQ|$6~{~?^AE0O4dUuuvr z)pu}ka1EWUiiCCUB)~ynVC~y8Bl#g(XjaF^=JAO0neLryM@=(^wwh0{--(L1ctkGs zITO^T`?3j0%^k?qZ)xT3U9Sy%eSPClVay&PXK+-gj%K}lup<(zv+9~Ob#^ip+g22F zR@mH`%{aF0v>22R{NVcpHLxAsbFvLtNM%T=dsrjK%L>LmK4F9iDk%cuWm*Ejia7qq zgS7IRnwr&Sl<>>B=Wh`BW6xfm4(1nVB~0C@Xshpn;d3LK}ZmYJNeEw~@kq zNVE+h3zi3!9`BGzX}?5#jc(6Cph%AOn!too@6BpZ)>>Nz2>8Y9qm|TY1!Xlrpg)NzoX zBl4S)lEBm5m1wsz7nojJRHQ%}U(YWtJ|*NcbZHN_NYKlB9WmuT>fH%ej>&7%?C1k3 z^e4LfF)sqf!~c85+qLd(N_9J7IdQG0+c6~J>5VIPfW1hs9BnH~@M~c^c7*blTbZj7 z5wIb>JpbSoIJ$v6r|>1GA|e1C&qyp(j^cx}tzN9>mkf$7u?96_5tB)iVzxPW;X)?5 zC-&gotJ3$p@$7?8_-lBlT^RDOh&b`ySQ)KJU;ZnDC?^m+N?co0>d=jbKozd0sGdNx zz=}oWX5xbqY1-VW?Bw;=o-PZ8E2Ck$vH{=zY~i|$R=)YRnE6n}yPFiHh9qO&STV^>Ckl?n<9oB%qL!w%MFVtqmd zOjJAn`c41TTWS?+-K(7Og^cX|FfEhImsx|f&t}K=!i)1=1q}Z$EB1(4wU0 zGplR@`@oTc4~-(!3%N{ZU_b~=D0lHGk4@1<^7`A=nfAn83+Y<^v0$-JGdx?{byn7c*}snK8HOrT7Dx>i1z8hN^I1J`u%E>D=scB%HH4J!Lm^R z%LZaT?|gE3bvxfGs@=-LK}M+{htJu!KMX zj`5WJ=Y|Mm{7ioCnUy2tvBJussB$-)rkF%#743#=2UP zRiuV@7OHu@zp)+YiStNZVDeJ45~U8lrzW`P$jP=f%gGAEuuyLQDr@mT?b$Q#D} ztb%s!2?Cz#s=l(}=IEhtk&tI)gOyVNn#d; zbZScSYQUyt1A%U2Bq4lU`7>6OCQR&bva0*_wqAhFNWi@eMd@&&7%&@xgt6mr|UzQA9gPqn*3+G(f4ZuX?=-;!HG8 zEDvHS!$?MpO8Zc@%B&&)ene}k2D)dkDN{T=lmG{|G7vcCLZ`%WKPZdM+RHPM2{_^U zSuG&Xapg&mYps6fGs+x>n-z_sUv(8rtzudAi)#AGOCI=**JDppZ+)DBj zhDmY8l%SyHSsUPJ=RiJs`hJ>7Nqr{k_Z13S`PjvYm|)vn&R=6)(zZDk9w zX}%-DRT z;wtR@tJf}n^s1OF`lltRI;%i#dfH;3j4hR$5p+j;>8m*c1LCFo-4>xgsN&!#OPlR4 zbr$m1Ny=p7R=WpdnPG6KaWO1eW?SVctwz#%4AD&oDJ`j2H7n9@^acJe^Mj4 zypTk$f#RTZwm@nP0G~Ba0Z(b+f`8q5x;3K&WP+-R7j}1liUvTpe1|^tYzI&wvpi50 z8=a~?qV72mUy5|=czIk&NvY!ok=>@njs_(84bA!_h4oNLMTwkKUg(kxw_M;4G3ax( zuW7Hvq*8r{2FfwxaAgc)ig+?@4rJG!gQRaG0pl@A+JSf5Y=I0p4OQVD9oP)*J{&IM zrZ!mVNobV7@6;3LT@4w}F{f8{p&OdRPzO`hy&?x>w2(oLAQKdUe3%h3-*^@%baq{x zwvgLPac%P#t}$o~-SxHlHA6RFF)=Z?6cg9wdrJq;mH^6TF06vUAPc-$q2nI(OtSWz z=o>=?Jnk0!iXyDfCsL#)R$F0__65!)p(V ztLTvd0NDP)a+FX9xN-u;4U)GF3N{-Qr2Y!=(n$EFLS>hxc(}00GVITWSpvS(S?kZP zYhMCZj3f(K*vbz#j8#CoILj<5T^?YHoWlScFH4aSE;U$J%}-bhW-uH=Vj?v%tZp}n zQlZ&HUbFNVS@iN4s8YUj=Z+Iaup9*t0S7sHUUqEcI6)WrSX@qaleG7_to6;o`n7&6 zdWW8Pj1ry`1%zoAO)jiXo&sHiVB(ttD(fKoRf0m^qPOd)2crfZ|8m%Nx_d+e6g_YW znni;kKYDLF+#3Do4Jo7XD?3_yYs<=D9AB^AaCM>RU-zSiyX|_kVWJ|G2xGo7?floq%+2a;rD|`@d0)t&4uxJ$;|>vKss*1b)&mFwrl* IaP$6u0nY$x#sB~S literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/genderfluid-1.png b/articles/gallery_files/figure-html/genderfluid-1.png new file mode 100644 index 0000000000000000000000000000000000000000..32f4102e491686170e19a3e8342b2f26ad688c98 GIT binary patch literal 9047 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 W-coF71O?|pu3fgVsQK;g- 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 wvJEr;+Iq5B%=Z$d;h+ECwq*Tlj6ZlFO*p8zn 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/intersex-1.png b/articles/gallery_files/figure-html/intersex-1.png new file mode 100644 index 0000000000000000000000000000000000000000..43c9c0872b61cc8dfda022c07b4c39e5a1bbdd06 GIT binary patch literal 7586 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/lunarian-1.png b/articles/gallery_files/figure-html/lunarian-1.png new file mode 100644 index 0000000000000000000000000000000000000000..30f6e263cb3c5fe0c3cfd0ba7106bc99ca12862a GIT binary patch literal 5128 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/otter-1.png b/articles/gallery_files/figure-html/otter-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d04f2823f51a9dd4eeeaef298af78ea536e58d1 GIT binary patch literal 4989 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/progress-1.png b/articles/gallery_files/figure-html/progress-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb34926a4cbfe101fc6ffecc7b8b35e10086caad GIT binary patch literal 8644 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 Mw>BgFa{J*w0SO$bm;e9( literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/stellarian-1.png b/articles/gallery_files/figure-html/stellarian-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b29feae60bca641a51467e167994601683f305ba GIT binary patch literal 6706 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 literal 0 HcmV?d00001 diff --git a/articles/gallery_files/figure-html/transgender-1.png b/articles/gallery_files/figure-html/transgender-1.png new file mode 100644 index 0000000000000000000000000000000000000000..0390936b43fac1959da65714efc4a85ef8c0e544 GIT binary patch literal 8813 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 +Articles • gglgbtq + Skip to contents + + +

+
+
+ +
+

All vignettes

+
+ +
Palette gallery
+
+
+
+ + +
+ + + +
+ + + + + + + diff --git a/authors.html b/authors.html new file mode 100644 index 0000000..d8ebbb5 --- /dev/null +++ b/authors.html @@ -0,0 +1,98 @@ + +Authors and Citation • gglgbtq + Skip to contents + + +
+
+
+ +
+

Authors

+ +
  • +

    Laura Bakala. Maintainer, author, copyright holder. +

    +
  • +
+ +
+

Citation

+

Source: DESCRIPTION

+ +

Bakala L (2024). +gglgbtq: Show Pride on 'ggplot2' Plots. +R package version 0.2.0, +https://turtletopia.github.io/gglgbtq/, https://github.com/turtletopia/gglgbtq. +

+
@Manual{,
+  title = {gglgbtq: Show Pride on 'ggplot2' Plots},
+  author = {Laura Bakala},
+  year = {2024},
+  note = {R package version 0.2.0, 
+https://turtletopia.github.io/gglgbtq/},
+  url = {https://github.com/turtletopia/gglgbtq},
+}
+
+
+ + +
+ + + +
+ + + + + + + diff --git a/deps/bootstrap-5.3.1/bootstrap.bundle.min.js b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js new file mode 100644 index 0000000..e8f21f7 --- /dev/null +++ b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=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"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map new file mode 100644 index 0000000..3863da8 --- /dev/null +++ b/deps/bootstrap-5.3.1/bootstrap.bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["elementMap","Map","Data","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","value","_unused","defineProperty","configurable","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","VERSION","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","DATA_API_KEY","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","endCallBack","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_DEEPER_CHILDREN","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","complete","getBoundingClientRect","selected","triggerArray","isOpen","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","isArray","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","handleUpdate","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","Offcanvas","blur","completeCallback","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","uriAttributes","SAFE_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_ACTIVATE","EVENT_CLICK","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LINKS","SELECTOR_LINK_ITEMS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","decodeURI","_activateParents","listGroup","activeNodes","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","HOME_KEY","END_KEY","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/dom/data.js","../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/util/scrollbar.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n const evt = hydrateObj(new Event(event, { bubbles, cancelable: true }), args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement, toType } from './index.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isDisabled } from './index.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport Swipe from './util/swipe.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport Config from './config.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n EventHandler.off(window, EVENT_KEY)\n EventHandler.off(this._dialog, EVENT_KEY)\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\nimport FocusTrap from './util/focustrap.js'\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n this.hide()\n return\n }\n\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n// js-docs-end allow-list\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' +\n '
' +\n '
' +\n '
',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // TODO: remove this check in v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Tooltip from './tooltip.js'\nimport { defineJQueryPlugin } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' +\n '
' +\n '

' +\n '
' +\n '
',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport BaseComponent from './base-component.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both
    and