From b1d6f4ca7bd5405e5e3ae2283e117ec2634d28df Mon Sep 17 00:00:00 2001 From: coretl Date: Wed, 30 Oct 2024 08:51:16 +0000 Subject: [PATCH] deploy: 3f7684c7698839aa005b5104bb761a5470d248af --- 2.4.0/.buildinfo | 4 + 2.4.0/.doctrees/explanations.doctree | Bin 0 -> 3481 bytes .../.doctrees/explanations/decisions.doctree | Bin 0 -> 5286 bytes ...0001-record-architecture-decisions.doctree | Bin 0 -> 5132 bytes .../decisions/0002-make-skeleton.doctree | Bin 0 -> 6203 bytes .../decisions/0003-docs-structure.doctree | Bin 0 -> 8813 bytes .../decisions/0004-why-src.doctree | Bin 0 -> 9940 bytes .../decisions/0005-pyproject-toml.doctree | Bin 0 -> 4803 bytes .../decisions/0006-setuptools-scm.doctree | Bin 0 -> 5460 bytes .../decisions/0007-dev-dependencies.doctree | Bin 0 -> 6532 bytes .../decisions/0008-use-tox.doctree | Bin 0 -> 15992 bytes .../decisions/0009-sphinx-theme.doctree | Bin 0 -> 4885 bytes .../decisions/0010-vscode-settings.doctree | Bin 0 -> 6227 bytes .../decisions/0011-requirements-txt.doctree | Bin 0 -> 5997 bytes .../decisions/0012-containers.doctree | Bin 0 -> 6256 bytes .../decisions/0013-switch-to-copier.doctree | Bin 0 -> 6082 bytes .../decisions/0014-split-ci-yaml.doctree | Bin 0 -> 7233 bytes .../decisions/0015-use-ruff.doctree | Bin 0 -> 4739 bytes .../decisions/0016-convert-to-mkdocs.doctree | Bin 0 -> 6499 bytes .../decisions/0017-use-pyright.doctree | Bin 0 -> 4788 bytes ...rbid-private-member-access-in-prod.doctree | Bin 0 -> 6215 bytes .../0019-autosummary-api-docs.doctree | Bin 0 -> 6061 bytes .../.doctrees/explanations/structure.doctree | Bin 0 -> 8106 bytes .../explanations/why-use-template.doctree | Bin 0 -> 6064 bytes 2.4.0/.doctrees/genindex.doctree | Bin 0 -> 3080 bytes 2.4.0/.doctrees/how-to.doctree | Bin 0 -> 3780 bytes 2.4.0/.doctrees/how-to/build-docs.doctree | Bin 0 -> 6864 bytes .../.doctrees/how-to/check-docs-style.doctree | Bin 0 -> 7511 bytes 2.4.0/.doctrees/how-to/contribute.doctree | Bin 0 -> 12901 bytes 2.4.0/.doctrees/how-to/coverage.doctree | Bin 0 -> 5030 bytes 2.4.0/.doctrees/how-to/dev-install.doctree | Bin 0 -> 11565 bytes 2.4.0/.doctrees/how-to/excalidraw.doctree | Bin 0 -> 29270 bytes 2.4.0/.doctrees/how-to/lint.doctree | Bin 0 -> 8487 bytes .../how-to/lock-requirements.doctree | Bin 0 -> 14533 bytes 2.4.0/.doctrees/how-to/make-release.doctree | Bin 0 -> 6937 bytes 2.4.0/.doctrees/how-to/pypi.doctree | Bin 0 -> 9772 bytes 2.4.0/.doctrees/how-to/readme-images.doctree | Bin 0 -> 17591 bytes 2.4.0/.doctrees/how-to/run-tests.doctree | Bin 0 -> 5087 bytes .../.doctrees/how-to/static-analysis.doctree | Bin 0 -> 4322 bytes 2.4.0/.doctrees/how-to/strict-mode.doctree | Bin 0 -> 6599 bytes .../.doctrees/how-to/update-template.doctree | Bin 0 -> 4471 bytes 2.4.0/.doctrees/index.doctree | Bin 0 -> 32654 bytes 2.4.0/.doctrees/reference.doctree | Bin 0 -> 3514 bytes 2.4.0/.doctrees/reference/standards.doctree | Bin 0 -> 11467 bytes 2.4.0/.doctrees/tutorials.doctree | Bin 0 -> 3480 bytes .../tutorials/adopt-existing.doctree | Bin 0 -> 11911 bytes 2.4.0/.doctrees/tutorials/create-new.doctree | Bin 0 -> 9733 bytes .../.doctrees/tutorials/installation.doctree | Bin 0 -> 9716 bytes ...93c858f07a863e5211798a0734e53dcd52c3c2.svg | 57 ++ ...e4922068220c188f3d592b12f2049ea04875de.svg | 41 + ...0d73b1177bd3d81dea5149fc243ea8b20edd25.svg | 40 + 2.4.0/_sources/explanations.md.txt | 10 + 2.4.0/_sources/explanations/decisions.md.txt | 12 + .../0001-record-architecture-decisions.md.txt | 18 + .../decisions/0002-make-skeleton.md.txt | 21 + .../decisions/0003-docs-structure.md.txt | 37 + .../decisions/0004-why-src.md.txt | 43 + .../decisions/0005-pyproject-toml.md.txt | 19 + .../decisions/0006-setuptools-scm.md.txt | 23 + .../decisions/0007-dev-dependencies.md.txt | 32 + .../decisions/0008-use-tox.md.txt | 140 +++ .../decisions/0009-sphinx-theme.md.txt | 19 + .../decisions/0010-vscode-settings.md.txt | 26 + .../decisions/0011-requirements-txt.md.txt | 27 + .../decisions/0012-containers.md.txt | 29 + .../decisions/0013-switch-to-copier.md.txt | 19 + .../decisions/0014-split-ci-yaml.md.txt | 26 + .../decisions/0015-use-ruff.md.txt | 19 + .../decisions/0016-convert-to-mkdocs.md.txt | 26 + .../decisions/0017-use-pyright.md.txt | 19 + ...orbid-private-member-access-in-prod.md.txt | 20 + .../0019-autosummary-api-docs.md.txt | 23 + 2.4.0/_sources/explanations/structure.md.txt | 38 + .../explanations/why-use-template.md.txt | 9 + 2.4.0/_sources/genindex.md.txt | 3 + 2.4.0/_sources/how-to.md.txt | 11 + 2.4.0/_sources/how-to/build-docs.md.txt | 39 + 2.4.0/_sources/how-to/check-docs-style.md.txt | 42 + 2.4.0/_sources/how-to/contribute.md.txt | 2 + 2.4.0/_sources/how-to/coverage.md.txt | 8 + 2.4.0/_sources/how-to/dev-install.md.txt | 53 + 2.4.0/_sources/how-to/excalidraw.md.txt | 19 + 2.4.0/_sources/how-to/lint.md.txt | 34 + .../_sources/how-to/lock-requirements.md.txt | 49 + 2.4.0/_sources/how-to/make-release.md.txt | 18 + 2.4.0/_sources/how-to/pypi.md.txt | 24 + 2.4.0/_sources/how-to/readme-images.md.txt | 110 +++ 2.4.0/_sources/how-to/run-tests.md.txt | 20 + 2.4.0/_sources/how-to/static-analysis.md.txt | 7 + 2.4.0/_sources/how-to/strict-mode.md.txt | 17 + 2.4.0/_sources/how-to/update-template.md.txt | 17 + 2.4.0/_sources/index.md.txt | 56 ++ 2.4.0/_sources/reference.md.txt | 12 + 2.4.0/_sources/reference/standards.rst.txt | 64 ++ 2.4.0/_sources/tutorials.md.txt | 11 + .../_sources/tutorials/adopt-existing.md.txt | 48 + 2.4.0/_sources/tutorials/create-new.md.txt | 40 + 2.4.0/_sources/tutorials/installation.md.txt | 48 + 2.4.0/_sphinx_design_static/design-tabs.js | 101 ++ .../sphinx-design.min.css | 1 + 2.4.0/_static/basic.css | 914 ++++++++++++++++++ 2.4.0/_static/check-solid.svg | 4 + 2.4.0/_static/clipboard.min.js | 7 + 2.4.0/_static/copy-button.svg | 5 + 2.4.0/_static/copybutton.css | 94 ++ 2.4.0/_static/copybutton.js | 248 +++++ 2.4.0/_static/copybutton_funcs.js | 73 ++ 2.4.0/_static/design-tabs.js | 101 ++ 2.4.0/_static/dls-logo.svg | 11 + 2.4.0/_static/doctools.js | 149 +++ 2.4.0/_static/documentation_options.js | 13 + 2.4.0/_static/file.png | Bin 0 -> 286 bytes 2.4.0/_static/graphviz.css | 12 + 2.4.0/_static/language_data.js | 192 ++++ 2.4.0/_static/minus.png | Bin 0 -> 90 bytes 2.4.0/_static/plus.png | Bin 0 -> 90 bytes 2.4.0/_static/pygments.css | 152 +++ 2.4.0/_static/scripts/bootstrap.js | 3 + .../_static/scripts/bootstrap.js.LICENSE.txt | 5 + 2.4.0/_static/scripts/bootstrap.js.map | 1 + 2.4.0/_static/scripts/fontawesome.js | 3 + .../scripts/fontawesome.js.LICENSE.txt | 5 + 2.4.0/_static/scripts/fontawesome.js.map | 1 + 2.4.0/_static/scripts/pydata-sphinx-theme.js | 2 + .../scripts/pydata-sphinx-theme.js.map | 1 + 2.4.0/_static/searchtools.js | 632 ++++++++++++ 2.4.0/_static/sphinx-design.min.css | 1 + 2.4.0/_static/sphinx_highlight.js | 154 +++ 2.4.0/_static/styles/pydata-sphinx-theme.css | 32 + .../styles/pydata-sphinx-theme.css.map | 1 + 2.4.0/_static/styles/theme.css | 2 + .../fontawesome/webfonts/fa-brands-400.ttf | Bin 0 -> 209128 bytes .../fontawesome/webfonts/fa-brands-400.woff2 | Bin 0 -> 117852 bytes .../fontawesome/webfonts/fa-regular-400.ttf | Bin 0 -> 67860 bytes .../fontawesome/webfonts/fa-regular-400.woff2 | Bin 0 -> 25392 bytes .../fontawesome/webfonts/fa-solid-900.ttf | Bin 0 -> 420332 bytes .../fontawesome/webfonts/fa-solid-900.woff2 | Bin 0 -> 156400 bytes 2.4.0/_static/webpack-macros.html | 24 + 2.4.0/explanations.html | 561 +++++++++++ 2.4.0/explanations/decisions.html | 581 +++++++++++ .../0001-record-architecture-decisions.html | 591 +++++++++++ .../decisions/0002-make-skeleton.html | 592 ++++++++++++ .../decisions/0003-docs-structure.html | 603 ++++++++++++ .../explanations/decisions/0004-why-src.html | 608 ++++++++++++ .../decisions/0005-pyproject-toml.html | 591 +++++++++++ .../decisions/0006-setuptools-scm.html | 594 ++++++++++++ .../decisions/0007-dev-dependencies.html | 599 ++++++++++++ .../explanations/decisions/0008-use-tox.html | 696 +++++++++++++ .../decisions/0009-sphinx-theme.html | 591 +++++++++++ .../decisions/0010-vscode-settings.html | 599 ++++++++++++ .../decisions/0011-requirements-txt.html | 598 ++++++++++++ .../decisions/0012-containers.html | 600 ++++++++++++ .../decisions/0013-switch-to-copier.html | 591 +++++++++++ .../decisions/0014-split-ci-yaml.html | 601 ++++++++++++ .../explanations/decisions/0015-use-ruff.html | 591 +++++++++++ .../decisions/0016-convert-to-mkdocs.html | 598 ++++++++++++ .../decisions/0017-use-pyright.html | 591 +++++++++++ ...-forbid-private-member-access-in-prod.html | 592 ++++++++++++ .../decisions/0019-autosummary-api-docs.html | 593 ++++++++++++ 2.4.0/explanations/structure.html | 611 ++++++++++++ 2.4.0/explanations/why-use-template.html | 560 +++++++++++ 2.4.0/genindex.html | 455 +++++++++ 2.4.0/how-to.html | 564 +++++++++++ 2.4.0/how-to/build-docs.html | 587 +++++++++++ 2.4.0/how-to/check-docs-style.html | 599 ++++++++++++ 2.4.0/how-to/contribute.html | 596 ++++++++++++ 2.4.0/how-to/coverage.html | 564 +++++++++++ 2.4.0/how-to/dev-install.html | 607 ++++++++++++ 2.4.0/how-to/excalidraw.html | 573 +++++++++++ 2.4.0/how-to/lint.html | 590 +++++++++++ 2.4.0/how-to/lock-requirements.html | 605 ++++++++++++ 2.4.0/how-to/make-release.html | 560 +++++++++++ 2.4.0/how-to/pypi.html | 585 +++++++++++ 2.4.0/how-to/readme-images.html | 647 +++++++++++++ 2.4.0/how-to/run-tests.html | 556 +++++++++++ 2.4.0/how-to/static-analysis.html | 551 +++++++++++ 2.4.0/how-to/strict-mode.html | 574 +++++++++++ 2.4.0/how-to/update-template.html | 557 +++++++++++ 2.4.0/index.html | 618 ++++++++++++ 2.4.0/objects.inv | Bin 0 -> 1524 bytes 2.4.0/reference.html | 540 +++++++++++ 2.4.0/reference/standards.html | 602 ++++++++++++ 2.4.0/search.html | 466 +++++++++ 2.4.0/searchindex.js | 1 + 2.4.0/tutorials.html | 540 +++++++++++ 2.4.0/tutorials/adopt-existing.html | 593 ++++++++++++ 2.4.0/tutorials/create-new.html | 587 +++++++++++ 2.4.0/tutorials/installation.html | 594 ++++++++++++ switcher.json | 4 + 189 files changed, 32540 insertions(+) create mode 100644 2.4.0/.buildinfo create mode 100644 2.4.0/.doctrees/explanations.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0001-record-architecture-decisions.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0002-make-skeleton.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0003-docs-structure.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0004-why-src.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0005-pyproject-toml.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0006-setuptools-scm.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0007-dev-dependencies.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0008-use-tox.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0009-sphinx-theme.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0010-vscode-settings.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0011-requirements-txt.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0012-containers.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0013-switch-to-copier.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0014-split-ci-yaml.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0015-use-ruff.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0016-convert-to-mkdocs.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0017-use-pyright.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0018-forbid-private-member-access-in-prod.doctree create mode 100644 2.4.0/.doctrees/explanations/decisions/0019-autosummary-api-docs.doctree create mode 100644 2.4.0/.doctrees/explanations/structure.doctree create mode 100644 2.4.0/.doctrees/explanations/why-use-template.doctree create mode 100644 2.4.0/.doctrees/genindex.doctree create mode 100644 2.4.0/.doctrees/how-to.doctree create mode 100644 2.4.0/.doctrees/how-to/build-docs.doctree create mode 100644 2.4.0/.doctrees/how-to/check-docs-style.doctree create mode 100644 2.4.0/.doctrees/how-to/contribute.doctree create mode 100644 2.4.0/.doctrees/how-to/coverage.doctree create mode 100644 2.4.0/.doctrees/how-to/dev-install.doctree create mode 100644 2.4.0/.doctrees/how-to/excalidraw.doctree create mode 100644 2.4.0/.doctrees/how-to/lint.doctree create mode 100644 2.4.0/.doctrees/how-to/lock-requirements.doctree create mode 100644 2.4.0/.doctrees/how-to/make-release.doctree create mode 100644 2.4.0/.doctrees/how-to/pypi.doctree create mode 100644 2.4.0/.doctrees/how-to/readme-images.doctree create mode 100644 2.4.0/.doctrees/how-to/run-tests.doctree create mode 100644 2.4.0/.doctrees/how-to/static-analysis.doctree create mode 100644 2.4.0/.doctrees/how-to/strict-mode.doctree create mode 100644 2.4.0/.doctrees/how-to/update-template.doctree create mode 100644 2.4.0/.doctrees/index.doctree create mode 100644 2.4.0/.doctrees/reference.doctree create mode 100644 2.4.0/.doctrees/reference/standards.doctree create mode 100644 2.4.0/.doctrees/tutorials.doctree create mode 100644 2.4.0/.doctrees/tutorials/adopt-existing.doctree create mode 100644 2.4.0/.doctrees/tutorials/create-new.doctree create mode 100644 2.4.0/.doctrees/tutorials/installation.doctree create mode 100644 2.4.0/_images/graphviz-8493c858f07a863e5211798a0734e53dcd52c3c2.svg create mode 100644 2.4.0/_images/graphviz-c7e4922068220c188f3d592b12f2049ea04875de.svg create mode 100644 2.4.0/_images/graphviz-e10d73b1177bd3d81dea5149fc243ea8b20edd25.svg create mode 100644 2.4.0/_sources/explanations.md.txt create mode 100644 2.4.0/_sources/explanations/decisions.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0001-record-architecture-decisions.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0002-make-skeleton.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0003-docs-structure.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0004-why-src.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0005-pyproject-toml.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0006-setuptools-scm.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0007-dev-dependencies.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0008-use-tox.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0009-sphinx-theme.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0010-vscode-settings.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0011-requirements-txt.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0012-containers.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0013-switch-to-copier.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0014-split-ci-yaml.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0015-use-ruff.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0016-convert-to-mkdocs.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0017-use-pyright.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0018-forbid-private-member-access-in-prod.md.txt create mode 100644 2.4.0/_sources/explanations/decisions/0019-autosummary-api-docs.md.txt create mode 100644 2.4.0/_sources/explanations/structure.md.txt create mode 100644 2.4.0/_sources/explanations/why-use-template.md.txt create mode 100644 2.4.0/_sources/genindex.md.txt create mode 100644 2.4.0/_sources/how-to.md.txt create mode 100644 2.4.0/_sources/how-to/build-docs.md.txt create mode 100644 2.4.0/_sources/how-to/check-docs-style.md.txt create mode 100644 2.4.0/_sources/how-to/contribute.md.txt create mode 100644 2.4.0/_sources/how-to/coverage.md.txt create mode 100644 2.4.0/_sources/how-to/dev-install.md.txt create mode 100644 2.4.0/_sources/how-to/excalidraw.md.txt create mode 100644 2.4.0/_sources/how-to/lint.md.txt create mode 100644 2.4.0/_sources/how-to/lock-requirements.md.txt create mode 100644 2.4.0/_sources/how-to/make-release.md.txt create mode 100644 2.4.0/_sources/how-to/pypi.md.txt create mode 100644 2.4.0/_sources/how-to/readme-images.md.txt create mode 100644 2.4.0/_sources/how-to/run-tests.md.txt create mode 100644 2.4.0/_sources/how-to/static-analysis.md.txt create mode 100644 2.4.0/_sources/how-to/strict-mode.md.txt create mode 100644 2.4.0/_sources/how-to/update-template.md.txt create mode 100644 2.4.0/_sources/index.md.txt create mode 100644 2.4.0/_sources/reference.md.txt create mode 100644 2.4.0/_sources/reference/standards.rst.txt create mode 100644 2.4.0/_sources/tutorials.md.txt create mode 100644 2.4.0/_sources/tutorials/adopt-existing.md.txt create mode 100644 2.4.0/_sources/tutorials/create-new.md.txt create mode 100644 2.4.0/_sources/tutorials/installation.md.txt create mode 100644 2.4.0/_sphinx_design_static/design-tabs.js create mode 100644 2.4.0/_sphinx_design_static/sphinx-design.min.css create mode 100644 2.4.0/_static/basic.css create mode 100644 2.4.0/_static/check-solid.svg create mode 100644 2.4.0/_static/clipboard.min.js create mode 100644 2.4.0/_static/copy-button.svg create mode 100644 2.4.0/_static/copybutton.css create mode 100644 2.4.0/_static/copybutton.js create mode 100644 2.4.0/_static/copybutton_funcs.js create mode 100644 2.4.0/_static/design-tabs.js create mode 100644 2.4.0/_static/dls-logo.svg create mode 100644 2.4.0/_static/doctools.js create mode 100644 2.4.0/_static/documentation_options.js create mode 100644 2.4.0/_static/file.png create mode 100644 2.4.0/_static/graphviz.css create mode 100644 2.4.0/_static/language_data.js create mode 100644 2.4.0/_static/minus.png create mode 100644 2.4.0/_static/plus.png create mode 100644 2.4.0/_static/pygments.css create mode 100644 2.4.0/_static/scripts/bootstrap.js create mode 100644 2.4.0/_static/scripts/bootstrap.js.LICENSE.txt create mode 100644 2.4.0/_static/scripts/bootstrap.js.map create mode 100644 2.4.0/_static/scripts/fontawesome.js create mode 100644 2.4.0/_static/scripts/fontawesome.js.LICENSE.txt create mode 100644 2.4.0/_static/scripts/fontawesome.js.map create mode 100644 2.4.0/_static/scripts/pydata-sphinx-theme.js create mode 100644 2.4.0/_static/scripts/pydata-sphinx-theme.js.map create mode 100644 2.4.0/_static/searchtools.js create mode 100644 2.4.0/_static/sphinx-design.min.css create mode 100644 2.4.0/_static/sphinx_highlight.js create mode 100644 2.4.0/_static/styles/pydata-sphinx-theme.css create mode 100644 2.4.0/_static/styles/pydata-sphinx-theme.css.map create mode 100644 2.4.0/_static/styles/theme.css create mode 100644 2.4.0/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf create mode 100644 2.4.0/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 create mode 100644 2.4.0/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf create mode 100644 2.4.0/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 create mode 100644 2.4.0/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf create mode 100644 2.4.0/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 create mode 100644 2.4.0/_static/webpack-macros.html create mode 100644 2.4.0/explanations.html create mode 100644 2.4.0/explanations/decisions.html create mode 100644 2.4.0/explanations/decisions/0001-record-architecture-decisions.html create mode 100644 2.4.0/explanations/decisions/0002-make-skeleton.html create mode 100644 2.4.0/explanations/decisions/0003-docs-structure.html create mode 100644 2.4.0/explanations/decisions/0004-why-src.html create mode 100644 2.4.0/explanations/decisions/0005-pyproject-toml.html create mode 100644 2.4.0/explanations/decisions/0006-setuptools-scm.html create mode 100644 2.4.0/explanations/decisions/0007-dev-dependencies.html create mode 100644 2.4.0/explanations/decisions/0008-use-tox.html create mode 100644 2.4.0/explanations/decisions/0009-sphinx-theme.html create mode 100644 2.4.0/explanations/decisions/0010-vscode-settings.html create mode 100644 2.4.0/explanations/decisions/0011-requirements-txt.html create mode 100644 2.4.0/explanations/decisions/0012-containers.html create mode 100644 2.4.0/explanations/decisions/0013-switch-to-copier.html create mode 100644 2.4.0/explanations/decisions/0014-split-ci-yaml.html create mode 100644 2.4.0/explanations/decisions/0015-use-ruff.html create mode 100644 2.4.0/explanations/decisions/0016-convert-to-mkdocs.html create mode 100644 2.4.0/explanations/decisions/0017-use-pyright.html create mode 100644 2.4.0/explanations/decisions/0018-forbid-private-member-access-in-prod.html create mode 100644 2.4.0/explanations/decisions/0019-autosummary-api-docs.html create mode 100644 2.4.0/explanations/structure.html create mode 100644 2.4.0/explanations/why-use-template.html create mode 100644 2.4.0/genindex.html create mode 100644 2.4.0/how-to.html create mode 100644 2.4.0/how-to/build-docs.html create mode 100644 2.4.0/how-to/check-docs-style.html create mode 100644 2.4.0/how-to/contribute.html create mode 100644 2.4.0/how-to/coverage.html create mode 100644 2.4.0/how-to/dev-install.html create mode 100644 2.4.0/how-to/excalidraw.html create mode 100644 2.4.0/how-to/lint.html create mode 100644 2.4.0/how-to/lock-requirements.html create mode 100644 2.4.0/how-to/make-release.html create mode 100644 2.4.0/how-to/pypi.html create mode 100644 2.4.0/how-to/readme-images.html create mode 100644 2.4.0/how-to/run-tests.html create mode 100644 2.4.0/how-to/static-analysis.html create mode 100644 2.4.0/how-to/strict-mode.html create mode 100644 2.4.0/how-to/update-template.html create mode 100644 2.4.0/index.html create mode 100644 2.4.0/objects.inv create mode 100644 2.4.0/reference.html create mode 100644 2.4.0/reference/standards.html create mode 100644 2.4.0/search.html create mode 100644 2.4.0/searchindex.js create mode 100644 2.4.0/tutorials.html create mode 100644 2.4.0/tutorials/adopt-existing.html create mode 100644 2.4.0/tutorials/create-new.html create mode 100644 2.4.0/tutorials/installation.html diff --git a/2.4.0/.buildinfo b/2.4.0/.buildinfo new file mode 100644 index 00000000..bbb6f45b --- /dev/null +++ b/2.4.0/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file records the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 0d61b07eb4cfcc7fcef189985e1a39b4 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/2.4.0/.doctrees/explanations.doctree b/2.4.0/.doctrees/explanations.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0562f48aae27aeef90f31caf87a2ae5a25ec96db GIT binary patch literal 3481 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0002-make-skeleton.doctree b/2.4.0/.doctrees/explanations/decisions/0002-make-skeleton.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6d6f84fa22e9edcf8490c3901ed82bdc53cdd7e5 GIT binary patch literal 6203 zcmd^D&5s;M758R6yF2^6c5EzchmN9PTX<&H28Ae6#8)n0d66K3Lu6Vt-8ECS+uhaf zs8()&2VQ`>Nmj zb-jAp`~B{fbMBwr(y5Ti;gE%4qC&0kBVC#6iHdiU7@_n4;- zc*KoLyo{$xOQW)*f?mXX=ilXr6wrTC|F9?{UP>9_Glkf(eZNUaEZU_ik3D-nk_j*N z@-efk%$Q7$bA$XT-$fZ}%56D_nAQ;Dx|guHyjltKw7nU#;2`4@(#h?zVN-fkh%NET zy#;aIJ{$=Z^HG*33C~84Rdz5+kBm^sAW*5~*}(8PjhNx5i4nXW@k8h&jLND zSG&8rcLygWDjKe})73<=fSj@*LTpxvC(~PB}TlDRB;PEZ*?(W^YgWWd+=QaFZ$L|Jyw@?M~4KYCWP!+d3v8lF3)=7 zO=SSKGA~xws3YlAYqb+{y>kDiTFXCBiJ^9=QfThm45nw#fa=w+G6+x9>mT=7a^$6% z+DB7s5BX%qn`A2XG+^x=$RzaC#H&F(^xhR*b1&o*G*_uJW?BY#Gs^>$XZ*GorG(e&;R4e z7cC(2E+B{&Kv^6N2}ZA3Ui9pGw=OljW`(WE_q!%frvtkLS9vB2``Q_*@7UuBAh}jS z(ghACyKEPRr{&XjT-|5$TvS^-3GlxIu!KOsEiU0`2s$i2A31o(%&P zkJzC4bTk{3!9-<)Y6nz*Rz|mO!!aRwiZ%n94>(UEE7yT&CVJ^w+MT)A>;R#(t+J!WS%8Ly|kyg1Q_W zNq+l9E7^i-rXVfSPovg4h6+^e3m7D72)Dh_mCZFrjm|SP$2xXEnm^3x`_=3kXN7G( zU!HAUsMV=SE><=D;zX0YQG+bupi|}rk@R8}=Gbunkes1)h?`lcQrf83+mISMFZz0$ z$v@AY3GGWS&1TYB8GO<^^=nsWUOu-%b!n;<>KOd08$wvy<(&zxHBX}+DRvoVMsdy` z<|j8nES5`gdQUY|ow#jZHW^DaCMqm}4~Cg$T$fW_&nUy9;@&yCTI*mAxOXn6rC+d{ zL7vgf=r!8}}(T*skJcEmO)MRM6{TVHZY)T`NQI;r9RvtJQ6uMY!8AD)4FQq^Ag_ zhnO)a+Y1wzNtEH8htKQ=P2))(`-dRjxOiqa!KX6y!Ok?}YZ$y*N-%pniBFqyzn*;I zuX>>xh4<__tyyOLh_>a$y_f8&U{Q11vpf7yqKaUGa0-&&=S|zW*_=I%T(rL2Np&=!wOKSfhp`(S^18Y zp0k4UgSjVjCicI-aPFMlEbX>2)Nfy#eK7a3-KHFXJuOh82sssY19ST{XH$-fhq!+U zrzZAd#sigwe#lcG2W})_vuBskmJ_6jipa1AgjlkhEH}z;MfN2LxNU@aocawUQCKIy zIK;DrMPzWxNgUW|^;=P@c^)eNFeX54<8(o3?swmGC<%=J2qz6CWVifKYMRQBNEPLB z-709ibtI$F9Io$RbfZ%9ClZ4k9iUvMD>%^{TUGQXPsmz`C11nwQgeH6!R}DM0XfMO zK#XK8O>uwwhTTkg>Nj%>C9_Tv%$MA!*05LV?<&N4SZ*?gDx0FCE|I1S0GfV1uHq;Q z^1;#o+PdLuh-_$yo?}wz_X#`X5xH+5Jtkp5uEi68>5RbR2KJE>~&x= z_M7Hx67Y3O2syUf`Y18%&=+zlBK&~g^N}Lxuj?55djDaLuGT2jMR#A``jHA)Rod$q zLJ$uYzU((t*_9A)ALJ=q&>@{Wd8=sP80b-fOeVlU#S0gRD0DuaQ%iwRlaY@Zop{$py;B_s0;|!aM}o#yyC_D*q~+Y2+fmnWKZ`gtPw{rBPS zxuO0R4{}8i8RCv9_- z0yBuh=^qPrEIv6FpC3EL<6OK-kDQftSa};(Lh+gS)R_=p3ARZp-%0ogmG z(pPOQP*DVkBL{r$aoPt2L;exU^kMN65Eq7jP#{jHHF~vl*l_-gc&!n;=2??T5al7Y g_mui(6&rSiEef@tI|H?=t_5|JW6$%X$j8Hf0o7d_(*OVf literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0003-docs-structure.doctree b/2.4.0/.doctrees/explanations/decisions/0003-docs-structure.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1c4f8a43d1fd75333e8d2e9317cd7af458ed82ff GIT binary patch literal 8813 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0005-pyproject-toml.doctree b/2.4.0/.doctrees/explanations/decisions/0005-pyproject-toml.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0a1ab142eef5de37c5cd5fe7284e907fbee4255a GIT binary patch literal 4803 zcmb_g&2AjW5hg_~$>l#OOK~F6Ss`#NBi>y~i2%Wff*A3Q2oH9WgB^L$JJY*8sf$8e%uBxxUs;=gr zI)DA=-a`K8wsk7Pqn@}e8a?ugXV&z%(Ky+QlgeKyxDR=wvp!a*td+B+qJw0d zILO3Zu_5k>B|8FQT_C|Gilw5B^3I1a`F`)w!K0t|4<7a(J}Cgcjit7-kL+@}1K3(-MY3ZE5ub-{+~}K#3T2$2Ee++R^;hDA1K@YrIAVY%Aho6-F&d3$3-5 z%hk!f2CbFf$iz?{lp)mPCW6WQ5fEP8GJ@a=ULPEB9`snRB3(}=y;H#z?-|)kt?3y- zxk`-gl?mJPWik#YR^@yhR9^lcc533Y^T$Ugv_2hQ>x5R|Y>s7fL@m+G8C5XNaYm~j zmRVYb-w2v0{xW|QbV{3L6kl99rKeXbW{>G!%2n@|!kARQKOCk!)q~=s22xFE+&_5y z@X7F3xr+~w3qQJko2>ErZ*8xs!l3+t5D9LB>V^;sJMi5u@y!FYqlP6__RdzgYC(A*%>rDS)$upHYRhJbRh{e{#M(geYyP<< zyz7EFEo{*G_k3s(07S6e5`eF-5bTE^bKYahgnq<(xHwO!D2(KDUZ?kKG#Y>YGrvES zwzsDJY2mwpv~5smFrJmq;9Lb*;@sMB&uTt%m1fPh)RaJBwkct4LQoOMjh|n6O9gYiq! zk`%p-Th-i{Fqxo@+pYVuv7(Zf1esg@1B)zJRHdz3me!!CXGdcD$aNOwU(yjw_k#B+&v8XDnMy&CM53(Ds0$ZaT| zN@cu=Kj(n+hFcRXs)rr7%g;ifnBUcvQpa@yKC%;-+d5?`0gBL2oW+oIaU4FUkjTF< z0cIW&QU=h2al`@&rqQh%1}`x$2wDZ5PP5cIo81WNv?EW@d}y z{l$d^w^i)h_)x9BH$5@4*zHgZ;GPzMC_+q`+eD{1v24PDc!2Q@^!4tR;=WXY7w{C! zfte7rIdaRzRZob7K}86$?6#OS(rZNSMhLoX1~yK;nvwuE7ldG=N?1f2Zs(Gm>~#8# zDAn8s(mTUb;K=QuAC{VX?Ugx8eB(VwZ(LAz+Y3U?MiB)<4G9*mRH=fr+dwcH$&u$B z<~B<;ZyZJl4lVy3`hpS7QTULXJfYnJ9QisPK=tr&(d|;cfjP+pM2x~XG}&)=-f>&F zW4-!zq+m8kGGg$ZQp3G@-6fg1+oYL008OuYCE&3|_x9TdzW|%fF>Q+83hF&CnRzkb)3p`7F9DI>)KskpHt50kS6ZDMC z--cxwxCDEoA0}gPpsWjfR4B9^&8USjaW|5zNJe_*on)X)JmLW|_#7Sx&JAqb_Mvs+ z@tB2?hX*g!-Q4Tl^2rLWM&qKUUAiTnJjV&X8J}y@fRj@-%-^>cZf|-{qvm86cH~xz z`h$cAcf%wIkxj-kOieiI8JM<C+dk`>y-JtZJAP z=Bpx(-s{Gr$5nGhpT+$v?jAowsnD-@xm`8XzS)jH#WK3s5Xo-iQ5+`ugZcQ6n6BSf ziwBiueAR~I>kPkQziUiew>K4e@dAG(O2?nT+$&v;Fk$I9#?|t?QKaYo3q1EpSbRSa z-;3`A6Q79-@lt#x{w2N@-&ofr4RfA?CG`0H{!*|@ad9cWx)k4DT5+F*-{JB7nRtq2 z0hWCsz7bzrx7p67+}NfcA}8s%;Y}f-qFLz`v}j8TJ&*<27ms9Ab1+wZV@6nOcc*sj zR#x*xdsF-4{sUi8&2G=`RnDLdK}pZ~NO#w|FQW)VMhv*r@dyP^A^#H4yv#mAdBT4l zQ0VYq6OD{44Azx>O1xf+^AuSR6F;&6CGmu^V-3x;EMAl7Oz=Mlx0WZGjx0Kx7nvOm F{tIn;BCh}d literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0006-setuptools-scm.doctree b/2.4.0/.doctrees/explanations/decisions/0006-setuptools-scm.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c4e45a0e5322f575464114c6920e39a9a150b66a GIT binary patch literal 5460 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 QV|-BhDUzPYSvu(bAD4-N00000 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0008-use-tox.doctree b/2.4.0/.doctrees/explanations/decisions/0008-use-tox.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f069e84fa0d6952697ddb9fd4d61f35efa817f4e GIT binary patch literal 15992 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0009-sphinx-theme.doctree b/2.4.0/.doctrees/explanations/decisions/0009-sphinx-theme.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7dabb29d45c0d49f35221e03eb1d70446084a751 GIT binary patch literal 4885 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0011-requirements-txt.doctree b/2.4.0/.doctrees/explanations/decisions/0011-requirements-txt.doctree new file mode 100644 index 0000000000000000000000000000000000000000..243dba733b466cad7ee33e57bd24b968119a382c GIT binary patch literal 5997 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 dhwDjQ4pX2C0|=~)V@AVbabD9=WN{{qNQ%jf_A literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0012-containers.doctree b/2.4.0/.doctrees/explanations/decisions/0012-containers.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f5f6e8ba8bf4b8fe76508675f7800257eb5b9fee GIT binary patch literal 6256 zcmb_gTW=gm6}FR%?eX2YDb=+$boS+SmR!U`>cl?aKn0)s(ZpO#ilcg<9dySsY3 zs(q1I2_7QZ+7d6@ydm+9kN}AnF8=_201`ihSH9Et8DH>fZE39PQ&p$V`Od9Q{j&2L zes3oKvuipQGCJxp-;b2fb!HcQ<)tByO!is!&abjhvd6ZYutTlV#N(Nr!3s~vz)yIT zeU#Z%T5e>Zd*%Ll%{?PkRBsm@F(>9f${vfZ?HFkS-kP$vpFHh3KhfOrRAiWpc%m~} zjm5Wq%#TQlbJx7e3fbmj21!gNHf-0eMHe^iTq*IMy%m6MwwDf=U1Y{2a*!HmN}Ao2 zz9uc^y?|*ABF3GFg~e#WPvhoez`Xs04{1$m=M5XtR3_HM!`)f2Wuv}OA@3(?1ReT^ zD%tPH$401V+f%XR$+qEP95BN#B13rH=SNr*F#=HceeOw}k9KyRJO!T$pu6^DvVl`7Fvrfkt@qx zg4X;Cn41EiRH6QEG#Fi71H!9YYT%#2>+8>hKpi?hKj49i5rPhjd?(d3GRiS*pF7My zVDP^Ychs;Iti4LUFT|tKDZRQ*WR;~!omy6zr*I+s8nd)WQ+BDKxq@95UY1c=Dc%qo zEq;AhUK1y3j5|*5BsoFjBH%RGGNjLeI>6na zC_dN8vVrVBZOdPd00rQk60(0^6|!nW3E9O)v2#TvXLfcwzZU$y1^C&F_Kg?cF7g#h z3&1=Zv{ZWHbb#m=TszWG(2j(c^rWhb%@b7HiUw_uT1C`Ay*SgnWh4 zccE*@S(F#lB43lD0ZSuK=a{k zUwI31^Z%u`x+fIx+B+seFc#(BMU;*bu8W?qV-)InwmV}Nt2JmOP{7DPXYHz&Ce(4d zb$_{BQHnm(E|j+hG}9Y(cRa+6!QfVq*}0#xAcd3F?e!dP8gXi}J+ZcDyCaVNkr|a_ z`0&xd;dT+m_*hDmG7yyyjiKeJ1P2)IH;`&h78ex^x)uN9*_mwHy3g(w}!oE)Q> z9)eAz3~x=I*cIy9qcn7nQ1HU+#I9;I%CYOIknTAe4DS~d9`Kyv(jCdI`evM0ZYUe+ zJ-eLnSS7gNQCE@e-mr^;1@&jgZtx=s6!YGxTGX)}pAXUzj$1usNrdc&6$xh{C|#Jt zlKomfy%&ws8AEoH7fVhwE8+cu@uO-}5 ziSJHan)d7*;%^8wfr#`ghY)jim8C|x4awe+aJLmd4P&= zdF&!eIHHu2IXsal0|wbCH0(WLOst>v`ylIH@krBC$p{g3msaKiV5M8V*x<IjFRBHhBTK-*px`Fao3GJ3A@J!^v z@I|}<?9r7g(CkT;NiPyizTATxP~Poj(moPz741WUo?2WgrE8Jv`24( zYq;+Foi(Li6G^^jwt2f5ma< ziuzAXq-2g^wcXB96$7-N;OUi!#rW~~`&c^uF8&E7elAYLtFc3rE&BH%{dJc-aH zuYjBdg>q}PuJE2VrC0}_LXd_771XYpFTFEGtXFp@ICiU3^G&xW_@hk1t&#NZPV*{f za9cs<&)t?v+>)p8x{^P{qxR$N5bg~6XTa-K_CsVbJQyP%;-On3aEk-$0x&^ds>yjI kEy>6WQlDadL_vhd4%DbJozn%(F6Qy5gLFj5rGwu80CbENeE_nPC zct&}FN+r(<8js=EpYv0)q6kIffzcA>KRz+R7J!i$4^!0a+J zCX<8QV7IipIT>o&$zl*Ots%tse8S@LYbngrrZHf_QO1WfCbx@*ji{>-8{+=cS#i&r zzECmmXL*wFtbd}iqkej3gi5;QzPg6TX~Yb_Obp|7pPyn(!pMobAM!wI_qDgT|FEl_ zr@BT}EB4~B5O>6?xGU!J0bJIBFW4w!sc3t7^9htb_CDPE@KJYfzq|iY>EUhrc1Pt@ zEZV0<#k~V@pZq4i1!sx(a4z4*?|u9}!0!PZA-*fRZ~%si-IgsYC3>3U->e08;hAA3 z*R>IKvr+xMtE(p8&sVBHuH4WYYg+n#5b)G+c!?mjZ5u(O?cnO#Xrqgh+W6Qrz+1U5 zR{N+WX?bh8WpaIT|H4~~KTwIGK&ZAbZZ|s^U3~}SuTHgtaN1v=6tgok&jt6=j2}yt zYY)K!%$i;A(-O%KyQxgO`iMu|sN}_tFecTH`~8tLA|Lbu75AS=7ON!up&SYG%+W># z_sO{ryc34?y^N>IGlCf}V2L;2-VkxaLysk)m!~0stG$?KBZy=Iibykc2#V33$qmlB~2uomrP@N>&WSqsIn`D?%czO7HB9tc> z6bB}E3!t}R3OCQdFJ!EiMrCKa9;`p%QAGcPEc97vC4_<}9vxV-cn zad@%02o)09%19oAnJA_QTpLdfy@4{q!>u2M z8tecHaF;zX6i>iHoX7{4I}saAtCN9UY9-*iitfN86#r7kG=ZflxGa>zp(Y(Pv1COo zQe_h~jN}zFHe_*~w$-ABKehcOelfl!7usppwym3uqyN&LczM8!-`V?hq+jg3aWrpK zXW>kuXtrQVH4~6-*Enwis4bg{pc=wgh@e%Z4Vu5qiTTH= z)}*l6&)=_hz;z^TRj2pWTak49Gwz*8+=>Y=Z`%OjW4OD`>x+({&O((^hD)G@eVT54 z1c%gy;-$_nYDgo_lozXG7ea=v`VwB_5U5$=zoowMEfYi7IkG<*-x&n_<*(V0m@oY0dArhU-YCPO;^~ZCuE!u#e>#&B&Svd;kY`lb`QtKfwU(6SoL$n~5MWTZ zZV|d%Av(7Yy4;l7m#sigwe#lcG2Wli>b3iv? zGQ>9F5gFEi5DRvlOwQ86@lo2+E zSB`D^f)dR$7n?kx)j}Nk3SNA0RAuw&tlgq`19FlPfEdYGn&L;BAK3Mjr~bISpv|n3 zWWZoMg@%2%&ITaXy|U!!sceLZx=kaU0T}7msSIA1An(4v_Xz%6&xXO&@+4`N|4zL; zf|n6wk9gLT+zg!#5JF#=ID)c{VFN@F(zxR3lD!8^#{M`s#~bi;5 z!bVia7I;8X1pQSVGX&bp98s;|sGF``HvLEita9x=WN@$t2Vce;yzE?v*++Q_74&ZA z9>XdcI0t%EAd?|5Q1QYIA_|=kriRIwup22>1|z*}9Tk8~Jm4WB_zV^Z&JA?j4lwG- z=P{F!j~71TU1#-H^+pG*M#GZR&g~pej&XwT#%J0z&T&vhMU4l&*Y?I_p9bd?uk(Rj zD)|Qi5A4b$l!zwd8-}7CdTOl+yX`Q;G`iZbm#xO8SSIe3@KB?BoGj1o z*Q)U~R{Yz`6ko93C8~3KV`A^+v*U$+I(!Lr7n=GTbmVj(!+N@_!s(6k72Y^WSbpyu zE@J56b^Ifk___E({6Tyv{wBT=U+1<%ZJR8yrvz`R8!ZXT^^} zR(N;??a@mR;~xeP&v{kg GmF=IMto54! literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0014-split-ci-yaml.doctree b/2.4.0/.doctrees/explanations/decisions/0014-split-ci-yaml.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3b4624da568a05b45b5a7ac165d2693e2eb67cd0 GIT binary patch literal 7233 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0015-use-ruff.doctree b/2.4.0/.doctrees/explanations/decisions/0015-use-ruff.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ba8e3b5000a9d6e132e3b63ce6462683c43a88a GIT binary patch literal 4739 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 BU*`Y- literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0017-use-pyright.doctree b/2.4.0/.doctrees/explanations/decisions/0017-use-pyright.doctree new file mode 100644 index 0000000000000000000000000000000000000000..dea178f2d667af6adcd5a55ead492f49e6616778 GIT binary patch literal 4788 zcmd5=+iE1o8J1QaNu$wuy&J=>oHoJnn(WMImt7nT28Z|}iHHcc-CW_AT90>-0I(j@yV zv%BuN=8+nd_cs&`G#5#Iopsnc+xRTI$GWzoxsGUS%kDjRXW;!&Q7@fIK4Cg@M{)9% zkLiUI;rfB+Ss~SWN+1I+9N4a33(eN-dMWFveI?=v%}&jT*e#;9wlcQIUO!o7M^+4(i0M$8B%yLR74m$T z&NLHAKM*OWvae~JMnuz>ks-Vq(hHnPh%=oUhBV+R|2jT?@J`<-+Ar-hh{KHCVcYC3 zTQegVstYrai6kj&n|1#K@O#&Lc>M5D|M+45!Q;ZNx9#O7}T6Le-#8Y)f858K)P)kLc{HJd2UY8jd^agwhW+F=tU|UwJ0rXZM8(MJof|E z+W56dw1a=CLcMM@m@Kb>vsbs&AiQR;$A2i|&g04(6Q!y2G$V-@&(hg_k0hZN5FIe8 zyjV!;Q7MH~gG#dh@phw!SzZt4iQc>(El+F&rOg^wv`7oSsLZj1FE&3YL$Ol1Av9Y2 zZFw!6H+D)bzPRR%=YOK!lt+<=i1)bmMl&y@V`3tG-$U;5B-Ml$&hdzXdpwc4jNy%i z^ymdwnkN%4mEsIZSb0-M;j=PxcoY5!Zb1{@qw?WI(t5%tuRBb>bv)l*8b$*8BNqIUWJ|4^gd zf0ozIdF$r9b}eshBeolxHXd7~FLqj zR(Rm$HL`9(*nRt|mLySV0N@QDu{n`c6-`J-3r(WzWW{b(XHd9KR*WmLt9Caq(zQ5# z-Oy}Tl%lb*n~G`|^61+R>PBoVT`Ek%%&vbzBEX<-4D7lvIyE{wWqYT#JE3S;h!!%# zB1Gh)n#Cy=Jt>5SsC3LPGP^p=Y_AZ(2j6oX*eaJsMp*4=5%{i2a=Q?v1DWM4vxj3m zlL$>)o0oRSHHe9c{RmF3Y}T%2O@TDr^17G3JQ&APVs?R=2wjx_>~vR&h6B0 zOPUI){fIuLFy{@s#Yj{yJN5vn5mwA=b#(Z+jW)KheCw4?{z_(#7Iqe% zIP0yhtk~V+-A0D$_TBl7h0Au|=>Y601`|clDYH9hGbe^jC@dageFKfWy(wuRWax)9 z1#-ZK12(629g#PNny?5DD?qSyyGx7~enYZ1IN-JunmF}qNW!o=fdh>)A(4AS zciwMEsiGzn{zdEnwU1_4DC)Ow<|qlY{}hdJ0ogr2R}#t zcyy;c=8t&<<9w^d9KXip5HTES2^^L4TGBN33&v_}EMSQ5bT zMZCevxe0Om+@xUP=Ei&&EYrXh&?5q#jDdkNFC4l=q0DIE7>^xxBSDH_bTi(02FS!C z8X|&ckbqID!Q)ndQ|CU736FeKMwfSUsSnB-6)0EQA62b|`z%T>yK{DeRH0rlx!G%s+Li6>x47mC8#Fm+ zB#L>GPs?Y&!*)GitsYmL@l`Ya^UD~&;JufyHui8%^J4sVqxv=B&wc}TFBJ7tY#8T` zadq9UyDA3LKEtf|g9#_KmS!cS6rnpu`Qo-(N9u#V)Vd zS6A%YE5qJ!#P2YCf6m^+wGh|7VBfH>jooQSQ_gHB;D|}*ZU|6NT+*!06|iViigN%9 zqAwnasK#J^^wkAoeY!jMVz=U&Upkz7AN3D-MK-&&_*S`tHUud>$D^xVy+A|}fD9c_ z)G>qtr=Wic(>%{UM0&!19+2qpFB64`EEv|AeU99#$$5zMcoIY=bU{3E(XoYYT%Zwg VL6(o^b}J7w6&Z9k&oVO_{1>AH9s~dY literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0018-forbid-private-member-access-in-prod.doctree b/2.4.0/.doctrees/explanations/decisions/0018-forbid-private-member-access-in-prod.doctree new file mode 100644 index 0000000000000000000000000000000000000000..55ba8f9e05eb9b2561b7d6a69c4df992b9e226f3 GIT binary patch literal 6215 zcmds5OK%*<5hg_~$>p2W!vZ8KV+4vRgu6>A3ZfV>5JQ52fEHm`L6VCy>YeG`ZgOUN zG~L6;K|pdaKmr}WfF?QQam&%lZ^$vf!GHk+{slSamaluByVf#H4EPWM6n3h+tE#KN zudAzm)B62SZcN#KdR4}ZN5@^_`;qXe%=El3yfmbd%3fu6f1AC`wsbooM^dDTM>9Qz z86M+-pU^0KmgyBUUGYG6i}iDodWwsvTFzQ*md!oOwpd%Y6juRl4Cx=-d)Re85J{i= z&PNG9B#JsuXxOKT^SO6v%nNbIAmw!%=jhp|Ql25XHce63UUR1`` zb=$2r&t~*&vFAN~Ip7h^_R>Dl3q+}e_fv&fnb^#5Uz#|~c>$3ULi}z;B+P%!`)OQ% z^oe(n(1Dqg>N!P*W+-E;?Dp<7+tjB$CPLav(kP-y??@yEz4$~i5p_HfbDDG%4dVa- znk0tvvPX|GCnDwuWY4D_m-g4r&b^17fsJz~&g0w(ZJayA#<{~I3<$p)`Wd^)me?&e zllBqiHsV8u35i+r+}0k$k$0W@JNF-Sc7D{^xt|}(b^Y~$BG6FUGfLU!9=mN~$-aXC zvbS-R-^Je@{Jn#}y9f^ZKIbu^-@Zvi#@oE=4@WWvwC;b33iE=y<#yp^o;vxPM4s;|0JE0DZJQB+k>;T%k&PSFvj);O2 z#}`weIZzI|he5)x~5^wx+S{y}uy#T48U{_7rhG>kn zC2=mm+WE)DZC=v07Sy}=Lo>qXU$KU_E5$Bejq_H&{v~yeco2YEhJQ}Z35!}l)_E=y z?>TUrAlr-N#6d;`mlP<2F(gMN8>8C}kOA_H;mUyUVA~QX4UjR-%UT>#Pzhuc z1Lt`pUXbTbLPNqM2tLRjkRRyb1%Q0 z{)-J?z~Rd#CgrK-AJu8@FXAQhO})PIrg&E-*hnC2JWnD(8I=Ms^#Z+w98|-!Cc(IT zj0hzH3nDZW_VQ=Y`L#n{qoG_ujaJ*VC0@RKGKR;p0hW)sh6>3R12Z`}CPSvG+t{|g zs_;IP`K!>i4^UK;wr*=Fp>WslPU(em4xaS8Q>iIFruB-KCZ;NMs~T{rl;pLbo|jaa z1cZ`#y{dr+iAnvDpXu3OkN_{eDw*h6WVJX|*&bWn)9oQejYp6C>8@qVJnu=dS;muq^18OC%$;WP4+rnP4peT0t^io1&ktjEyhZNzw zq!$%4LT1ylH>QS(Lonin@C(nB0r!BPQbY8sZ6itk#A^eSuL5~92*%^vHuK=*DJZ+ z+J|!Wt&~6Evksyby#-Mb$nC1>pz1bGY zb@K~GBuz{)hO;r+d>r{AnoZT`?zCPvd;@Z#A%Gb0kgM#;+B4i zml((%(4@<$8dw{+5PD370gSa3>4QbSV%hGz-UKE?w<2e?0awNbA!m9`o>vYV(5~~r;1hVjC{?g=&BLq% z*SswP7tO^4_pbGNy=V^ttHB_@)6Vn^jSg{wH^LLC>fl(Y;*pPD;;G&k9h10oveUG$ z=kxmqga>wclouqfBFT{AK0`BZ9oqmF6`GX5nQz)}rf;{3{+jQJG*TV&3s1SWertRx zk8<;6CzQ4HrH4N*-v{Prp1Rr1{lDOtYQ{HhGUo@Dq9`X-o8^~T7~^N!^kqqP4=n0uqEpJ5<1$1y0E>sgb<5Zae$ zj~ZeAdux9OQ};Xgj}i83_9^=v`+|MGzh$I%td_Q!txjSf242|tXN;V&PtVvFXLjOQ z%HB3ZR?8B!yaz2l`<%V9D%h8)UT(6?IGCZ{cWA_zcD>;cIhZ9Cu> z@>dAcC)vliw$Q7^1&HpmG~G3W|BdR#9}zEBVoRMx9(h6P8*&fLss$8K0uK~JKHJRH Q3zmQ~Nb%x%nW6FZZ#)wiZU6uP literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/decisions/0019-autosummary-api-docs.doctree b/2.4.0/.doctrees/explanations/decisions/0019-autosummary-api-docs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..24dd1885d2a24cb0a366f578091fcce07bf683c1 GIT binary patch literal 6061 zcmd^D&5Inz72nlrc6auBB}+0$a@q;DB%;|_2_GVZAtt^Ak;No(Zgx}CT{Bgh?yh!M zm3H?aa0me{sY{a1A;$!RA%8*sgn+@2zaWrn4hCNgKIQlNdq&!L>_aeQ*@3QCAFtkf zzxP!i_5S#mYfHtS+tsO%$;kl=!$gH#=WabzfsJ`$@;~Hvew9DXZ@YfRj_ku}f=X<$W$nxtI|BBnKn`0gbvF2B}8o3?`y3#J(#(;Dm6 z44cqYE_TH$50}MFcQOm( zQnVh1JdnEhIy}7hV9?RzfTeOk8xGxFJ^T2#V}OA8eAbRCKMe_YN4p>D@oP z|Hk0(!QkFusrRey`H4!gICMydiknB`71Evf9uy{Cg|&Ww-)s2Y!tV~0A$}+ZPy&{U zyPdmimMCjsvR4z_>Msm4wleQ@qk z&*|&mj|BGun~_g>Well(wFn*sGQEs{Xl2H=cd9Hob;>k+n(!H`&_>(~F^g#N1WRP% zjaBAx76?z4DJ@rQqOCfrYbYuM5zfJ3x1o}I6dv0 z*J$|Zx46N-KKj$w+@V;p$Sqo({_dOUbaz&#o#?$5RB^Tq-yPCi{H{aj0`YtOohpyl z0jDLjQv7vsDJX*PS5kaJ+mQI%jQ4xu79#K=F5B7q>uzcKI(~X-;g)kDIp!=u%r#!D zwDIm&K8CsL`XcbWg1o zlxJaXfPpgdT-5e%*NGMpIklrm27b)r5zmTvUVb8|ggm?B*_04kwJEhM{|i>FhW@#@ zhREXAW;N8Y_!c5ZYnRsQ^Yl5(*D9|p-#PI6@Z6bt->5;^IW?7k2V6z3HRtP{UJJcK z*=wbZf5{>X;5QBIsIW*OZd>EP>m`LpyrB4$ zfc?7T1ixxS)q)wIj2Bi;k1e`>o`^f}4^AST7l}@?qTQeT~XrLv&Z_G~mJj+z(3zXy$&tL(%YG87= zTWY>@O0PI2cQ@x|=8kxLYk6tO?Ud)Xcc^#Yn4Os0?Dj|oU{4FEh`NK^ZKLd;ShNGs zc!==@ykEG>Xg?5V{E(+W4%kS*=E$wWPsb1w8j)cQ2(jvRsCDsMlDi-Qx9t$MkKaHN ziY*9eRCt!4LBTP*1*HHxS-&Nvn%hwMCoutP4_&>|-0$uzP!bsb2|9dJKz7#;rKWrd zL8@D>)vf}!+k!AuD;Iu;L$|AC{#YXM(!<47`T`Tpv%)udk$pp$d=n2nFclpRe_VF^ zG7$rD)c<@i*aRyhS!(PrZv@0q(aJEswI@@IDB*30+b#vQej%}3MAj^Jxr&uP%!{6gErkfX{<%TuB8pg-xF@C{$=diZ!(v0lo zOX3Ul^f&~&7hd%VCM+3bTyJ-)l*gdlr+Bs`V)=brd?mgVOne|d7Jn9>ioc65#OK!a zX@xmWffIVZ`|3=vGx716`1DMCac0G#v4SmJFNNK11GY$c2+^ l$|Q(vNNzkK|JXnWpvng))F$ZA+(zMQI}vK?D_fFnS#k@<_KIj`Z4&ZfFbOCZBeH~8*pNhNdb(?-YPP4l z-CZs1LQI^4!3zZjy9K%B5XjvmB!T3A2;^)q7;+Ez638XLSJl0cWL}1{%vnXFFlg~U+b3;K?fXGxbY029no2Kb4_VwduD`0DKtjDBP;-aW3uGW+EredCNdC- zaijqh+9Gmlu6>vp5cj?N2blzp56gN9CseS$k?er`9r-L|8O`A9Qc=%Y-$sZ%HINq}YIIp*jWiZMCS!tHsGd zAuBcueF4Z1&CG!R&3kjFaRnin4Wo1dELOYvMF#nZ$;wbdE$Po;rLG+ zwGwzjoP8wFJYXKS1#fWRfxl4jjyFgV1>)2M3?jQoyt{8UO#WYqcb@p&**!rkxPGE1 zp04RuQkd%*`);2|wLi3{<;(`%npxwS_x8@Q&EMtuu_XGdk@+MfT5D@xHEiPVpMf@; zwQIC#<-md4qI!0}vjb{WxdF(QGoSVEW=hk}2!m*cZ<@4Un$**?Nt#Y_8puC^1ZU5eXSat?{nUx}+^JDLrE9Or$IiB~jOXX) z=Gq#4HGm&?8?jG<`D-WGc24+TF+OZ;J$2(~dfDvIf&V17)be?aIX6HVFgvo?_ZhBO z(4K)S%l(m%yc}4%H17?<#@}juf0p!?Hj!(!gT7IZoZ`**?xx95jLKY-p-BVLDn(MJ zW#PS+vGL)9`dTr=W+)|#R;(9+~59@OP z%dKKFtxlcf-0Iw@)!B3ExD4foN0CKGQ#uCHp%ALEIL&Y%X*8_Shd5pzYA7i&Zf>IV zS1i?8|BG{3PpEt0i1jVhtxdV!VQw=C?LM1UC4IhD?#Zp~h|x}2e>)AG0H(vrOY;!!QTYIRV?F_V5QaNwCe98o!_ zOJ96}62+0vt>pS^EC~iUF&7eHFT`0mhz|;w2sjdSStMlI@ab%wovD90x2Z4HrvABE zkW(|I@gJ$*&3ks(@0(%cKjCpE#dU;z)>sYp>8cSJIw(gYEOJA>Q+hc2{$5XKci2;P z)%BN`Yy1AzD0=D`Yo8tF>~s8^-OSaJK}MzKdsO!se@b&XA33Z$8EUB}mt$|kuOqy* zq;b4$3A$zk_3U2JvwMY;Tz5ITogA5|-UI9&)tcrxTY2l%@zdptm7A&Q)kN7Qt3+VFC6xf? z)kaw6R7>@n%ITVIF%?vGv8dxtrM4)2)OFxtj%)=L6C{pr2XTqgsinSJN=uoQvfAaF zs9KB|Dx(2$7cUV?z##Y}!^SAl1kS4_@P>-`gBrG{C&jAN%f)HfWt-Rhv|f>-US3+H!Un?y2Ym& zoo_3`n6DmCmxy=OTF$aGN1UTgw7Pdet?(djUOQ@w?F)Dj;j1icr;h4qMq|2-M?p>- zF?!@In4qPL

#>MEZ#YKJ!_Etp&X*)h*?)_nlrL@cjJrN1x?+n)@6jgcvynU;x`f zl!Z2p=UY-bT1usE%zT*BT|zM|EtuaPsZkP2|Dh=Kb^}>{ zBnsM?U`VayvZV@Ww+3ShY|5H<5V~G>^L3GyE*7rR6DBEGuDNLfeuO1o#f1x&iiCrY z^JTcL zlNghAWiSAXBFU?J7u5}5a^g4SYz**=j1Y3DE)@qTv+w&{jChQH;CC@j3HocrBmmLg zEy3ynj(SSJn^#}g&(I9l-UvA^L_#dQ;TycHU5L?pWriu}+DhL=)nVWe=t)D741s|< zE?lNSQIvz3Zel{%jnlx8kuH<=DnMp3U=bL6fC@Zk40Tj>B}A`1pP@<{`?z4ExU03^ zs;|g^)p%%P+M!xt$wR>88LAFD=V+)3f(NXCbCCQC<}Gfwb`yBG1J>1&O2)1wb#CF^Gf|} z(hYunoFP~g$K3H8ovOXJjS~!`tqrzpIh`gr^3pPoQ+&30lA3?bPK~E#;`dLQ_!xO7 zOkJwWQ?{F%zGM9~o?yCTRsAJCl(Zm2J6u-}>00qU6y2%OJa3N|&~-eAAO11_h=0yM z8^4MyXxyWpcj)In{rsDL{zX3@(T}2^FX`u>_$gJFBvKt;uc(%J$Ui>hpC4*zhg#C1 zmU5^i9O}_1^524GX8JWu{|5hzKh|^eFU-VLpD+_s5@jZ)lck<`Oc`3K*4rf37Ovw8 z!DJe6foY*wZTlHCwp%E`=vI(^GDzbF`nvJynZ~AfcS>T{&Z-Apo|2Dk7c@Z-y)rAS z{(|fWJBg+NZJDbf?nl8NFa^29@?D|_+CRbieNg=vQ4v?Ih_AR3E)WRJgw2LB)x6p? lYi6#BB#g_5V#kPL)JjBqUcEg~LZ?|=m|38(ck`({| literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/explanations/why-use-template.doctree b/2.4.0/.doctrees/explanations/why-use-template.doctree new file mode 100644 index 0000000000000000000000000000000000000000..afaec52495a52bbe059d4fe34eb846308b23b845 GIT binary patch literal 6064 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to.doctree b/2.4.0/.doctrees/how-to.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4f461b5c87c30ee90888c4eeb02658093b4a837a GIT binary patch literal 3780 zcmbtXOK&5`5tddaB}yVGX&+u-R~s3I<2CFN_uzvOI0%p&5?~R+FbpFIY)^V-n(SWA zOpp5^k%t9h0~_oDee>jxmzAFB;_xFE}cKn|m ztBUb*c}cRY6d6^uJ;+3A3R>#=r~0EG>X-FXJCNjB2_sWl+Z|}6jOUr8W&Le!M^0Vy zTwON%_Z3Yw7iG7d^;ns6ruOdS9IwD*j|2B zhlu(Wfqz}IQ#**efZ3kyH*rqwJ2@|DJv9ljheT`16Qkk4ooA0{%Ei8)=0qt7@!l&* z5#A0mQ{8+dBwa{4b2`TEYch9BH5;=h&v)6molcl2=tP>bq;hgC0c&YW9d7v&U@DB*?-5rzCSpDz=`n&%cla8BR%lp){?cWEHvp z7jvJ%i{A&qqid`wsz2-sXrsvi*=v zTrUuU!@H|{I<;p(Jjv))#7m_~p4We?r}ngwCkCL7+;w>IyNx(yG+lTxvb+Lz*Y~8t zd2qn;;&Ho2Tv1%yrY>FL#(0KO^14TjE>Nny;9)Be@F(f_hD++oFobirSuMzdVl}5k z1@o<)YE^M>=U$^JDai^N@dAMa8z=3GDFI8>Sboq*kr99@A|=UJiiaI-&J<3W>Zkxi zcpvQ^Q)Pg5hjFY?d(6u;HyNGrJfxm|!M^t@smavS?7-KJ3PVGTK zmKm)ytDodXf4|uVs~tB`i>^^`D4LpV$NQW&idX>bQ-4V()25N(Ej4(Z-b&b4gX;ww@M%cF0Gg-0|dbD+zpQ4;0m!mvgj&(~jF`5=f^gQrrKU{kFYBZt^32DgL~n%YM}g39rd_?l}LxBL%(&4#8SOzp9x zm5@5l=@msf@7O~|^6s-|PwA2)izphSTBV-tWi&B!#6P+wvP2f4fkG@G8Q{uN>W<{% z<0WzygP27It=bNZo<*NUisSw9=3-2x6f$O{%yQroF!0q_+i}SJnw6fnQrq*bl`RwO zA9fUs-UQHYeZ0A_wbP!s0|0o6AwM||gchBXa&EvfNH_Sw-a)O}yOO3tW-$sIuz?%L z!&BP_W6p3!q=RQI8d%?sh|wax5!pK&SQ}=hsNxQf$f_5BF{uPiIfG*_@zvn2{zg@uln{o~m=Dgs#{^QAqc2v_et?rG7P;K&&pqq;VZ^ zWEnF)XE`2SV>}ZM_s6OrsIu=3N?IXNcl~$xjB|mO2{FdA^ORv0N^$X_*pOwPLhN3c z3NG9n>Kj1A0q7Qx@NxzWG^B9mSVEa(OU-vk_#&Ya-Q2jS0U30b4CRZSuNb8oKJKT` zTEw&Tp}nztw7kL%J}g#B-z3LFmHQU=+MaE$DG*Nm+9dWM zkPoUI*yUx0Q2~Osr{O)1O-Gqhfg2fbQ26W{8-#MH? z{u2)Ws{Ru6f}blOD*TL6e&$5zXB{(dh>tq4hxk!5*P#gK4&8^DYaR{Hy0OR}`a)5; M!C3OLHp%7x0Fltz)c^nh literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/build-docs.doctree b/2.4.0/.doctrees/how-to/build-docs.doctree new file mode 100644 index 0000000000000000000000000000000000000000..f892d09547be08ebe5abcb2331e90c7ce8ed244c GIT binary patch literal 6864 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/contribute.doctree b/2.4.0/.doctrees/how-to/contribute.doctree new file mode 100644 index 0000000000000000000000000000000000000000..765432e9ebd972a71964b01665098776853a7c92 GIT binary patch literal 12901 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 Z*yoZX%K@L_KeWoc{a5zy5P~ z#{aoZlM9)h_gEZfD(0qi%dv`zlxMd5qI}~YC^I|=(q(dZNghi?xhdaSzuKV2_BsU5p2M}Q?A*F zm$VC;?mXe=WX*T-eqL6#F6IoD*-~t~PB?Z&%)7AZ{$d9@TJ%oq^yypXZ9dRmT)eDX42(TV0m;wjvcWg}WD#in@qa8B&GKlO!5d0!V< z#&!Qp>63nbVTH=Nk;*04UCYxvVV2)ShVce6&bn6hn~?O_s$PAu&j?6G3Zka z#NLs387GNIEG5zcHc2}UOSL~0l6G;dm47WUziNwN;-^4?cm=R~6~EW;dmX2XB^KOTJDiP$)5M9lhqpEJ?H_br69cBa;NKai zZYxd=Qdb+dn_95d5Zvx><5*@Rz^?(#6Lo^(;P+8t?b<)U8qo*$(HADIZ51l>-F=k@3V} zs5EKP0oeC_)*7oclFJ6nfD4sZa~qJzI5<9d{OE&&$Df2x9v^;ibWG-tZ5l}{iUG_@ zNi)mjUm2Bb(>BR)YjG^5Ur9Bv-18idlla3QD^{&!vF)=IlVo}CR^e>0bW14{$o;Kt z=J!{P;Um6=Q)b(ew!R?|8L&|j-S_FT6R>h!X&27|hAlGY-sxpA1bx*Cdidjpx_~DFOX?S>y*MctLS+@}tnp(VY+|aExl&Z0F%T4Vn-S)UW9cqyk zK%<#(jT0bKBU`%7D)KEU3tmd;_O7g45h4EPHY%YL1DdT5rWda4bX(*AfM*2alfa?U zttTuS6&N`X?ilZLXg}OtjSg1FVa#*D25KZQbL18yl?~w|!Xe`Z4Pw!4u)?ZvLUMBw zSX+;aG!MskL{vRN0*X3g2?^Zv6pwT|`UxpFyognZejHp|{5)5NhwYsnB9RS!$Kmn1 z8OGAEK|+qyRxUMpf}C4}GX}T1PdW%)uh~LsLrqY&w*m~V<xs337!gWt_JM=nG4f?{S36ym# z8z6;ZE6T%Vw+BF`;W#tL4umErgj~8UbCFqg9t!k+3H5&^=14`jUo$DwHvCJ0lr{*| zUH@LahKY(;9ooG}U{;H8@Kv%Q%07hHeNyC5L8G*vkLwz63G}E)WxPQ1w|bi-QzViVJg>ez zTpOjQZ$jO*roM-Tf{tU@Yaq~8(DT>$`0%BO3b)=)7B6c(l1Mo^O~|h(R1+J%>eSnmiVs*oa-{>6j3MS(U${aX zb9bgBb{egI)6SH9+--m(iq*ZVvg#GI7^v7DZgelLMk-0FJivv$bU>3D=wBcTpO=3` z^}*K`)G>SxGDx^e;ka;5kypoL>__V$vnVNI%Fz*le}&pR%yyJRN7OaB6`w~YDMl1I H3}^obHa2sp literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/dev-install.doctree b/2.4.0/.doctrees/how-to/dev-install.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0ffdaac03b01499295857a7257a96bae12f9abd4 GIT binary patch literal 11565 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/excalidraw.doctree b/2.4.0/.doctrees/how-to/excalidraw.doctree new file mode 100644 index 0000000000000000000000000000000000000000..824d5461e68d19ec3242bdd2f82ab16bced1880f GIT binary patch literal 29270 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 g2pQZ`uO}8olMHw%Pg*`8_co**=D@ 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 JS!UhNe*i+h9by0g literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/lock-requirements.doctree b/2.4.0/.doctrees/how-to/lock-requirements.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b341b0d4ff15eaa7e322597b87a0951907010c15 GIT binary patch literal 14533 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/make-release.doctree b/2.4.0/.doctrees/how-to/make-release.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3fccb338d8310904e17fc637b2f8530e783b0205 GIT binary patch literal 6937 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/readme-images.doctree b/2.4.0/.doctrees/how-to/readme-images.doctree new file mode 100644 index 0000000000000000000000000000000000000000..668d3085a02c31a9190140fcdfe31e6bdb23468c GIT binary patch literal 17591 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 JX=z8p{{o!`nu!1a literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/static-analysis.doctree b/2.4.0/.doctrees/how-to/static-analysis.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e842b4c8aa830bce6f825d23fc4f965174c7f17b GIT binary patch literal 4322 zcmd5ELods+vB=D<#3Giw@_>-FepnC!twN`!yJo85?yjaT zu?MjdJggK;^$;n||KVToYq)%;db;NlJA^kZjofwW)Twj%&ZYj+`P)AZ*TSDaFr|>i z)qtgGp;B%tzm=-Q<-D-f>+1Bc)wk6n-_z{UD5n!%`89APLT0JvMfJ4u`^0W#W(KqK zUBeSARnZ<79kD68Ppe0w=Q~!~j4y2Y)303-8Oy9pB37_$YNUyrk;Nn`r&>;gjg*e^ zX*sP(2xQ#-4ZkAg{+FZQRkbCXC4=6!5=Xulw}y%hzd5t-+~3V)!K-sOVt$)htL4a9 z_=WtiAyY#(caw}610udV1t-`u`3>k4L5?v zda#;JG%Lk|=YRK;^|iHM*N(T-lFz-50Hmtm(WSH^`eqh|r;miSrFk+O<}%UBsIeVP zz~Dv$si0&C)hWg58w%E({qpj1K$L#QipfCf$!V1Gk{2oB5UC=vf=7m1i-?;@7SXeE zT59ziAR1VeXU_)FuWXbEo?MtH=$Z1dEF?jU*z34OW0`RiG*-?=_CRA0sh7!S7T2 zKEv-6z}&Uen@hp?RMkwTlZ`20MkF4 z(OXhri%O1T6SS=^ss?kJt$gn)&z_i)Q8U{rH8)(p-~n5I3fO;m)|nU2xxM}rMWDY@ zY5Sp3^=C=jSGpf?&zfWmhu*Qfu_klLliPKh2&uS1=t4WX)%9)j5|91+RE;WYFZ~`3BZbT3tFh8~_0sPfbo4S# zR8Av~fxwSy3eR|;#MJfTrorRB*@0QdKli(umrC0><1aYedB<-HmbJ@{KjK#sUPNPc zreW&%PRd7ag6sA#nWo+Z4$WB(N)O>kIGIHH$pSu$(HB$-F2L2i^uhAR%1M7n1^{?Qz&}~Y zuDvGx;O-RJb_Wxqe^2v7=`?O;fJ6c_=YBI$#TYii9WrguAU6Fzb5_N3lD{K?wY}8k zW!&NsUJV2ZC~C}*B=8_m0@5k;b5d!zOI3_20IoxRRVu^d#ghRdiH%=KBWt`K#HloF zlyMj`)3V#-336^1#u&^mA?YA=Z^jmfp@fFS`}BoNP-{YB@`9wLi1!XgYs9Huo~`>M zN;bfzm;i;D%%!cqI{eJFZ-W<{ssKGugA%Xc%sb3|ELj<%w>ev3$6!}+i|!9)nF)Wp5d~dWh10eYDIOn z}JZ>|yH6X6*@3lWP)55Z=xE;?b%-@P|ziV=aEc>HFN*g%py|AvAF&YWOyhpA* zNd$)51c9%U4PFi|#OVuHR@dQy5?&p%8gLEts6-ZHU|?1hj;Tr*H(FtnIa&wqVs$3c z!{DLpRCI&ZN3+Keu$qnQf_CjUc<}-e{4k#y zJ9kciY8Y!_?eX%SLBXkBx{=?iix09L*p)>pkxe$XOiwt98QgIMGk`^lCm9+5nqFP} z5AecB6Xgoqr!PbAs1H_IXH#`s!7=9{+u^3x>)*I&sjdBsIxNgM znyZt`BD}A}zuQT2{qyEde6?2|-ge~;!fv|M`Qs&n>!%t$>)y~={PQLapC3R2M;O3jCeBZcyj%32@=*7sM4Eq8B8Vz0S196DZ-j}8XVp(Nc~l{MSJAc49ZKtwJ Yw^QmMvtmoLk>3v4Vlp=&&*4S-ANm-NqyPW_ literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/strict-mode.doctree b/2.4.0/.doctrees/how-to/strict-mode.doctree new file mode 100644 index 0000000000000000000000000000000000000000..be1c85a58c399d3b93586d44ec2e11ce190b2621 GIT binary patch literal 6599 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/how-to/update-template.doctree b/2.4.0/.doctrees/how-to/update-template.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ee12e9fb91ed2fa9dbf528d030ae877ef4a9082a GIT binary patch literal 4471 zcmdT{%WfpM6_rNQl3LGc*)uWV(WH#P85>b|dl4jofh3D;5(tr#V33_tU{|r4bhF4Z zACel#0Lj9@2q55vE5DLeek_kg4vSsY56gzN3L>B(7I{hD$2s?2{-yUfG1zMU{HduJ zm$xI5=Tha=)P6r#nJcNZ^;h+Wf308FANal|H%2*~(b{i8B4b?Sn#%gq+Mfh*%Y_*& z_U{>*S*~Qao%Pr*+xxWsfc1UPax3V{k{|tA-6U2euF8p}VPqLi1jfcDmX=i*CdO)) zS*K|oPQpQtU(ws3;e+>oQAeA0D*_8_%?7@ob|$kOzq_#X%0Cud()!9xh(93KYCdt$ zs`1DU&rPs?FB8NVOk&)Vq>Q8e+*Qku3CU)f7D2}OJxiuxsb;6_#pO0T_kS8QRnoC` zQc^v>QF=D6=9Vcr%v8mx9=1;SrfDc|aK_Ehs&VvUw`El3HG7vGvFB{ZP2jdZtR_=U zDz+AbSMa)qnn}ipoKn+m-u}Mcd;L_A>0H}cClv1vEY_!BGQRa*=*I8XVGgdo`ypp$Jm2b=Wkk$ zy5Wvrnr~6a?+f_Hktv9K>ny8{#Y@u+G5Sb^Ws>B?l`D)na;As+2#N{-B zFXp4DU`-0b3?UB$dqt-kxcn@5O4OvfNQQC)>;|B0hC;rYeuar|6kQ# z!tnPGgJFLIhRaBP-n!U;-ZUYIXmDA}rr_~Rl_j?q335nS(=;i`JelAh)!33LSqPrl z;A>(NNfG>l--f6ZTpMgGI6{t{C4y;L8-)MC%}f8K5A)yQhW~!iF<~&}HpzKWB*S6G zXg2Hkde2Hn)$%)1m0ht<*zZCzY5913FCSliA~RGVMnNjXCqxk;p!o$tHN*EJh8+RE zv;5Lye}0(92J0T9U8eM-nDB>f!dFA+J&a|uOaH@V*(7alZFWAS;F8sBd=QIPlZ|(R zE#H>DyHd(7{M)E6(m+3S1}PHJ6lpS+(wt=S9vz4>;6+6B1{V7G+C06MgAE5;S zh06*bhgvBMRVgq~`|WY<52Fex?wvv4VDag+z}K-=SsF@xScNJ*=&a|pKPzyIRF0y`i(z9sCbozEP;&%2fiC;Pym{lG_XEx+YQ{e*s$n7uKbavmC`m9 z^qRt*kNg26qWkRm0lnq$q9xXuR;cHDIi0vEt~H7U{cVJOZY6M zGE+IEQ1qNFhCdq`j`8#L#guBTbc$9Y7gQqxLDdX}@-%vW<&<7?O6|`#RyK}c|L`aA z(4_+H*5~UB8$11zU;uz;82lre8hzXrakx82&3=SV*1x4`rgWa>v;u5!4F_hf{BB6h zuo3Ryd5Z?N>raTYDqT+bM;ur?&Rtoh9UkG;W`YBXS`rZsJZ)wgq=(Qirz%5Tu2S?8 zka|LID`jZ9y0d{uX47kKc*N^znsY-Yg2Ir6mU}Hvz_}wBW5A4tbU5^QA(j?g#76a5 z7~v9hEDbTK45#IY_aRz-#3_DWZu>zX8(<@+K%w9$W%X~Ly!0m(tx`|~^$fW)7;_Y6 zCg@qxzzhElv$irHkH?rcquAJvl%9f4PlIHm03_44wFxa0t%mP^^kew*L>Jk{@nL3p z{14mX!CVsXI-`2TsV$m2kPXJnmI9acEt!BqIV$JnzCQ;b%d}%=XFwXexI6#E%%vr_ zDdSTn@B?@s3l(sGWJ&^-eeOVM14q5pe8i|wb}hkw?rRDB*KS#>Y5xjE7B&o)x|CctPd)bUu0`4YsJ#%Q_P)=K zwzszKz4D&J?z`0avo&kut1-N}zos+$=Y1M}b_fkz@PE?Rd}}>a4KHd<>s~N!*03(`5~8?aCxBNG~oLn59MQ#X+vY=4;rc% M;n0}8uH9txU$bDr-~a#s literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/index.doctree b/2.4.0/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..badc7fc9f9592ad0bb6417026ac0c330896e989f GIT binary patch literal 32654 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 D9kty8 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/tutorials.doctree b/2.4.0/.doctrees/tutorials.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a3b5ab502ae648b50eb70d492b3980e79fa5915b GIT binary patch literal 3480 zcmb_fOK)5?6mFW%B$H&4CVfz;O-Y3ct?0~v!~!89B)Y5^K~=FsSDt%4V-sKd;zu)C zRDuPlk<1FS;g9k72k&-{WJS*LOajeBb%?=l+%QpFc1K<8nSESteCR zP4L^9N?lH+4ZnoPKZIA|k?(18W|Y$@4gLx=QpQE5sSMu)zaP~t7iL(W-!e3{T*>x0 z>##1{`X)SLJ>Rk13c9rAdoP?-niF9{RD#a67jzztFK_)ADo?rvfn6Keq3y9LOwc5^HvG|yf^i-&1WD*2P%_h`V9UvR+9vB{s`Lq$#u5Q5NcRbm*@-`V5Xy`X+OC-aOJ zmW5{F_udiqY+tTF|6fFzSuK1m@cZ`za9J)K`$wf>t zt)G`Ez5lF(w0^c;1AkCwaBv1t6;ubZUY1Xray0k232p1RoJ`Ubbyc`j;hm~W$_j5* zn0_-P+TLYPkbF&~sSuqMTFo>yRquAJ0@kZM)H-EaTnv4~@25^jW=L8d*lQ#eANXxU zZ7dcj?y%*osaDcbV9s~HCc>d`E$MZYvxT!^%nruBH>2ot0;U2&dKplGj>-#s>}sVf zTt(gI!EcO$->qCoVD}UXJN2j20$+WUA&J})ci~DW*6=*|qbaVD%F?CH*S;UQ6c|Y6 zX!kt4_WK4XE)uj#WN3p6?^Y5jXemj~xMfMhZ?IP%s0nZE_cSe(wuzuGDbjh>?=T|T z&yGI?sF6iWtTT;L$9FP1aWk0PKOX9<<5%3@>qp0m@z z#{G*%kAMMUOKtE6Rpys&>6Etwf4sJ{b_M&*?^l;D9B7W-TisYY z>95BC06fExAAx{^?+YSl4n&G{XZXH~9`!dgO_k0PG&EoXGm%rqzMCpJMT|%X&l)ta zuHPqM_+%mSS2?iO&s<(4Egq58QosR4E#pf#_6Mb;?1otSg{UypWh$BH5lz?WyikTF z%O^{Sq&9iU4X^NekYwDDiHL#JUT!sgf}Yz$FpyI`UA6ZCc%n+>p$GoVoLoZIll_4oXKL5l<}0xFYfnXtVmnGpCM`@-L0))wZI z(FkHQtX|Tg(lfNvt*BW#0L`R%RxyP@K6v=SN66>Co~CQpN6F&)cbn_cxg_HCll_7=X-^wlmuR5>rHkT=?teTv{?u7@skLAHaJ}sEGSL zljFrrzH?}4gGAjZzpKwgC_K^-WBfQy86Nr+g|C_oSuRtE)2FV0i8x=C#9wm&UI|FJ zoB{(iDI7(XFmAG@#`B0>p-9zjLc8#rRK5gE?&RmjE|OD1m6uQ3Yk#!5XFxdNwVU|uihR)Rz%G{=M>p97 zv&oEt%#e;lgaIt#p^Z4hV_K2_0S2rr#c*H;afMN_=igda<+3v0FgWY@s~>*Yj5~2z zO)Gfj{xX-0DE>cI$nw6$!{Nf0oXc{yWPetJGAwR<&=|z3wfE1Z_Aa^UGKA1;PIqo`YI2hl8Z>Cqf*l tD}ya7uZVYBaS89;dX_^2&LXmRviNY+92-X>zf(4e5e_5CtKcTXe*s}1X`KK7 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/tutorials/adopt-existing.doctree b/2.4.0/.doctrees/tutorials/adopt-existing.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b25d3df2e43b42b04450e6db42bab7fc8ae96032 GIT binary patch literal 11911 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/tutorials/create-new.doctree b/2.4.0/.doctrees/tutorials/create-new.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b7381d3c0bb9003ecbbe4fc89efffed55bf21a4f GIT binary patch literal 9733 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 literal 0 HcmV?d00001 diff --git a/2.4.0/.doctrees/tutorials/installation.doctree b/2.4.0/.doctrees/tutorials/installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8b21abf784892c417c4f859a3fe6c6e2ccf4a7e0 GIT binary patch literal 9716 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 + + + + + +rearranged + +cluster_0 + +tox -p + + +cluster_1 + +pre-commit + + +cluster_2 + +flake8 + + + +pytest + +pytest + + + +mypy + +mypy + + + +sphinx-build + +sphinx-build + + + +black + +black + + + +flake8-isort + +flake8-isort + + + diff --git a/2.4.0/_images/graphviz-c7e4922068220c188f3d592b12f2049ea04875de.svg b/2.4.0/_images/graphviz-c7e4922068220c188f3d592b12f2049ea04875de.svg new file mode 100644 index 00000000..ec67b809 --- /dev/null +++ b/2.4.0/_images/graphviz-c7e4922068220c188f3d592b12f2049ea04875de.svg @@ -0,0 +1,41 @@ + + + + + + +rearranged + +cluster_1 + +flake8 + + + +pytest + +pytest + + + +black + +black + + + +mypy + +mypy + + + +flake8-isort + +flake8-isort + + + diff --git a/2.4.0/_images/graphviz-e10d73b1177bd3d81dea5149fc243ea8b20edd25.svg b/2.4.0/_images/graphviz-e10d73b1177bd3d81dea5149fc243ea8b20edd25.svg new file mode 100644 index 00000000..624cae2e --- /dev/null +++ b/2.4.0/_images/graphviz-e10d73b1177bd3d81dea5149fc243ea8b20edd25.svg @@ -0,0 +1,40 @@ + + + + + + +initial + +cluster_0 + +pytest + + +cluster_1 + +pytest-flake8 + + + +pytest-black + +pytest-black + + + +pytest-mypy + +pytest-mypy + + + +flake8-isort + +flake8-isort + + + diff --git a/2.4.0/_sources/explanations.md.txt b/2.4.0/_sources/explanations.md.txt new file mode 100644 index 00000000..73ab289b --- /dev/null +++ b/2.4.0/_sources/explanations.md.txt @@ -0,0 +1,10 @@ +# Explanations + +Explanations of how it works and why it works that way. + +```{toctree} +:maxdepth: 1 +:glob: + +explanations/* +``` diff --git a/2.4.0/_sources/explanations/decisions.md.txt b/2.4.0/_sources/explanations/decisions.md.txt new file mode 100644 index 00000000..0533b98d --- /dev/null +++ b/2.4.0/_sources/explanations/decisions.md.txt @@ -0,0 +1,12 @@ +# Architectural Decision Records + +Architectural decisions are made throughout a project's lifetime. As a way of keeping track of these decisions, we record these decisions in Architecture Decision Records (ADRs) listed below. + +```{toctree} +:glob: true +:maxdepth: 1 + +decisions/* +``` + +For more information on ADRs see this [blog by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). diff --git a/2.4.0/_sources/explanations/decisions/0001-record-architecture-decisions.md.txt b/2.4.0/_sources/explanations/decisions/0001-record-architecture-decisions.md.txt new file mode 100644 index 00000000..44d234ef --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0001-record-architecture-decisions.md.txt @@ -0,0 +1,18 @@ +# 1. Record architecture decisions + +## Status + +Accepted + +## Context + +We need to record the architectural decisions made on this project. + +## Decision + +We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). + +## Consequences + +See Michael Nygard's article, linked above. To create new ADRs we will copy and +paste from existing ones. diff --git a/2.4.0/_sources/explanations/decisions/0002-make-skeleton.md.txt b/2.4.0/_sources/explanations/decisions/0002-make-skeleton.md.txt new file mode 100644 index 00000000..02805f88 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0002-make-skeleton.md.txt @@ -0,0 +1,21 @@ +# 2. Make a skeleton repository + +Date: 2022-06-18 + +## Status + +Accepted + +## Context + +Many projects start from some kind of template. These define some basic structure, customized with project specific variables, that developers can add their code into. One example of this is [cookiecutter](https://cookiecutter.readthedocs.io). + +The problem with this approach is that it is difficult to apply changes to the template into projects that have been cut from it. Individual changes have to be copy/pasted into the code, leading to partially applied fixes and missed updates. + +## Decision + +We will use a skeleton structure as defined in [Jaraco's blog](https://blog.jaraco.com/a-project-skeleton-for-python-projects/), using git to keep the downstream projects up to date. + +## Consequences + +We will need a cli module to ease the adoption of this diff --git a/2.4.0/_sources/explanations/decisions/0003-docs-structure.md.txt b/2.4.0/_sources/explanations/decisions/0003-docs-structure.md.txt new file mode 100644 index 00000000..2cf0976c --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0003-docs-structure.md.txt @@ -0,0 +1,37 @@ +(documentation-structure)= + +# 3. Standard documentation structure + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +Skeleton based project's documentation requires organizing. + +## Decision + +Use the approach proposed by David Laing. + +> {material-regular}`format_quote;2em` +> +> The Grand Unified Theory of Documentation +> +>

-David Laing

+ +There is a secret that needs to be understood in order to write good software +documentation: there isn't one thing called *documentation*, there are four. + +They are: *tutorials*, *how-to guides*, *technical reference* and *explanation*. +They represent four different purposes or functions, and require four different +approaches to their creation. Understanding the implications of this will help +improve most documentation - often immensely. + +[More information on this topic.](https://documentation.divio.com) + +## Consequences + +See article linked above. diff --git a/2.4.0/_sources/explanations/decisions/0004-why-src.md.txt b/2.4.0/_sources/explanations/decisions/0004-why-src.md.txt new file mode 100644 index 00000000..e4485930 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0004-why-src.md.txt @@ -0,0 +1,43 @@ +(src)= + +# 4. Use a source directory + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +We need to decide how to structure the source code in skeleton based projects. + +## Decision + +As per [Hynek's article] and summarized below. + +The main advantage is that the source directory cannot shadow installed packages +as it would if it was in the root of the repository. This means that if you +install the package, then run the tests, they will run against the installed +package and not the source directory, testing for packaging bugs. + +A secondary advantage is symmetry, sources go in `src/`, tests go in +`tests\`, docs go in `docs`. + +This is tested in CI in the following way: + +- `wheel` job creates a wheel, then installs it in an isolated environment and + runs the cli. This checks `install_requirements` are sufficient to run the + cli. +- `test` job with `lock: true` does an [editable install] of the + package. This is the mode that is used at development time, as modifications + to sources can be tested without reinstalling. +- `test` job with `lock: false` does a regular install, which + checks that all files needed for the tests are packaged with the distribution. + +## Consequences + +See the article linked above. + +[editable install]: https://pip.pypa.io/en/stable/cli/pip_install/#editable-installs +[hynek's article]: https://hynek.me/articles/testing-packaging/ diff --git a/2.4.0/_sources/explanations/decisions/0005-pyproject-toml.md.txt b/2.4.0/_sources/explanations/decisions/0005-pyproject-toml.md.txt new file mode 100644 index 00000000..bad000da --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0005-pyproject-toml.md.txt @@ -0,0 +1,19 @@ +# 5. Use pyproject.toml + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +Need a decision on where to put the python project configuration. + +## Decision + +Use pyproject.toml as per + +## Consequences + +See article linked above. diff --git a/2.4.0/_sources/explanations/decisions/0006-setuptools-scm.md.txt b/2.4.0/_sources/explanations/decisions/0006-setuptools-scm.md.txt new file mode 100644 index 00000000..ac934e5c --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0006-setuptools-scm.md.txt @@ -0,0 +1,23 @@ +# 6. Use setuptools_scm + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +We require a mechanism for generating version numbers in python. + +## Decision + +Generate the version number from git tags using setuptools scm. + +See + +## Consequences + +Versions are generated automatically from git tags. This means you can +can verify if you are running a released version of the code as +setup tools scm adds a suffix to untagged commits. diff --git a/2.4.0/_sources/explanations/decisions/0007-dev-dependencies.md.txt b/2.4.0/_sources/explanations/decisions/0007-dev-dependencies.md.txt new file mode 100644 index 00000000..2a8cff4e --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0007-dev-dependencies.md.txt @@ -0,0 +1,32 @@ +# 7. Installing developer environment + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +We need to provide a way to setup a developer environment for a skeleton based +project. + +## Decision + +Use optional dependencies in pyproject.toml. + +PEP 621 provides a mechanism for adding optional dependencies in pyproject.toml +. + +We supply a list of developer dependencies under the title "dev". These +developer dependencies enable building and testing the project and +its documentation. + +## Consequences + +Any developer can update their virtual environment in order to work on +a skeleton based project with the command: + +`` `bash +pip install -e .[dev] +` `` diff --git a/2.4.0/_sources/explanations/decisions/0008-use-tox.md.txt b/2.4.0/_sources/explanations/decisions/0008-use-tox.md.txt new file mode 100644 index 00000000..3172aa1f --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0008-use-tox.md.txt @@ -0,0 +1,140 @@ +# 8. Use tox and pre-commit + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +We require an easy way to locally run the same checks as CI. This provides a +rapid inner-loop developer experience. + +## Decision + +Use tox and pre-commit. + +tox is an automation tool that we use to run all checks in parallel, +see . + +pre-commit provides a hook into git commit which runs some of the checks +against the changes you are about to commit. + +## Decision detail + +There are a number of things that CI needs to run: + +- pytest +- black +- mypy +- flake8 +- isort +- build documentation + +The initial approach this module took was to integrate everything +under pytest that had a plugin, and isort under flake8: + +```{eval-rst} +.. digraph:: initial + + bgcolor=transparent + graph [fontname="Lato" fontsize=10 style=filled fillcolor="#8BC4E9"] + node [fontname="Lato" fontsize=10 shape=box style=filled fillcolor="#8BC4E9"] + + subgraph cluster_0 { + label = "pytest" + "pytest-black" + "pytest-mypy" + subgraph cluster_1 { + label = "pytest-flake8" + "flake8-isort" + } + } +``` + +This had the advantage that a `pytest tests` run in CI would catch and +report all test failures, but made each run take longer than it needed to. Also, +flake8 states that it [does not have a public, stable, Python API](https://flake8.pycqa.org/en/latest/user/python-api.html) so did not +recommend the approach taken by pytest-flake8. + +To address this, the tree was rearranged: + +```{eval-rst} +.. digraph:: rearranged + + bgcolor=transparent + graph [fontname="Lato" fontsize=10 style=filled fillcolor="#8BC4E9"] + node [fontname="Lato" fontsize=10 shape=box style=filled fillcolor="#8BC4E9"] + + pytest + black + mypy + subgraph cluster_1 { + label = "flake8" + "flake8-isort" + } +``` + +If using VSCode, this will still run black, flake8 and mypy on file save, but +for those using other editors and for CI another solution was needed. Enter +[pre-commit](https://pre-commit.com/). This allows hooks to be run at `git +commit` time on just the files that have changed, as well as on all tracked +files by CI. All that is needed is a one time install of the git commit hook: + +``` +$ pre-commit install +``` + +Finally tox was added to run all of the CI checks including +the documentation build. mypy was moved out of the pre-commit and into tox +because it was quite long running and +therefore intrusive. tox can be invoked to run all the checks in +parallel with: + +``` +$ tox -p +``` + +The graph now looks like: + +```{eval-rst} +.. digraph:: rearranged + + bgcolor=transparent + graph [fontname="Lato" fontsize=10 style=filled fillcolor="#8BC4E9"] + node [fontname="Lato" fontsize=10 shape=box style=filled fillcolor="#8BC4E9"] + + subgraph cluster_0 + { + label = "tox -p" + pytest + mypy + "sphinx-build" + subgraph cluster_1 { + label = "pre-commit" + black + subgraph cluster_2 { + label = "flake8" + "flake8-isort" + } + } + } +``` + +Now the workflow looks like this: + +- Save file, VSCode runs black, flake8 and mypy on it +- Run 'tox -p' and fix issues until it succeeds +- Commit files and pre-commit runs black and flake8 on them (if the + developer had not run tox then this catches some of the most common issues) +- Push to remote and CI runs black, flake8, mypy once on all files + (using tox), then pytest multiple times in a test matrix + +## Consequences + +Running `tox -p` before pushing to GitHub verifies that the CI will *most +likely* succeed. + +Committing changes to git will run all of the non-time critical checks and +help avoid some of the most common mistakes. diff --git a/2.4.0/_sources/explanations/decisions/0009-sphinx-theme.md.txt b/2.4.0/_sources/explanations/decisions/0009-sphinx-theme.md.txt new file mode 100644 index 00000000..54aea6d8 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0009-sphinx-theme.md.txt @@ -0,0 +1,19 @@ +# 9. Sphinx theme + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +Documentation requires a theme as well as a structure. + +## Decision + +Use the pydata theme defined here + +## Consequences + +The documentation looks nice and has good navigation features. diff --git a/2.4.0/_sources/explanations/decisions/0010-vscode-settings.md.txt b/2.4.0/_sources/explanations/decisions/0010-vscode-settings.md.txt new file mode 100644 index 00000000..c21124ac --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0010-vscode-settings.md.txt @@ -0,0 +1,26 @@ +# 10. Include vscode settings + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +For vscode users a couple of settings are required for neat integration with +the IDE. + +## Decision + +Include a .vscode folder in the repo with some json files that enable: + +- recommended extension for best experience +- launcher to make debugging of python code override the coverage settings +- settings to make code verification match the tools in CI +- a task to launch the tox tests from the IDE + +## Consequences + +Users of vscode should find that their development environment just works. +Users of other editors will be unaffected. diff --git a/2.4.0/_sources/explanations/decisions/0011-requirements-txt.md.txt b/2.4.0/_sources/explanations/decisions/0011-requirements-txt.md.txt new file mode 100644 index 00000000..318c8301 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0011-requirements-txt.md.txt @@ -0,0 +1,27 @@ +# 11. Pinning requirements + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +Require the ability to pin requirements for a guaranteed rebuild. +By default CI builds against the latest version of all dependencies, but we +need a mechanism for overriding this behaviour with a lock file +when there are issues. + +## Decision + +Have every release generate requirements.txt files using pip freeze and +publish them as release assets. + +Request that the user download the asset and commit it into the repo in order +to lock dependencies for the next CI build. + +## Consequences + +There is less overhead in managing lock files. Incoming issues with dependencies +will be highlighted early but can be worked around quickly if needed. diff --git a/2.4.0/_sources/explanations/decisions/0012-containers.md.txt b/2.4.0/_sources/explanations/decisions/0012-containers.md.txt new file mode 100644 index 00000000..9facedd8 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0012-containers.md.txt @@ -0,0 +1,29 @@ +# 12. Use containers + +Date: 2023-01-18 + +## Status + +Accepted + +## Context + +Allow developers and users to take advantage of containers. + +## Decision + +Provide a single Dockerfile that can build two kinds of container: + +- a minimal runtime container that can be used to execute the application in + isolation without setting up a virtual environment or installing system + dependencies +- a devcontainer for working on the project with the same isolation as above + +CI builds the runtime container and publishes it to ghcr.io. + +A .devcontainer folder provides the means to build and launch the developer +container using vscode. + +## Consequences + +We can label projects as cloud native. diff --git a/2.4.0/_sources/explanations/decisions/0013-switch-to-copier.md.txt b/2.4.0/_sources/explanations/decisions/0013-switch-to-copier.md.txt new file mode 100644 index 00000000..55a68636 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0013-switch-to-copier.md.txt @@ -0,0 +1,19 @@ +# 13. Switch to copier + +Date: 2024-01-18 + +## Status + +Accepted + +## Context + +The previous attempt, [python3-pip-skeleton](https://github.com/DiamondLightSource/python3-pip-skeleton) was a repo that can be forked and updates merged into projects tracking it. This was initially encouraging, but led to downstream confusion on who had actually contributed to the repository, as well as messy merges when text that contained the project name (like documentation) was changed upstream. + +## Decision + +Use [copier](https://copier.readthedocs.io/) which gives the best of both worlds, a templating engine to expand the template, then an update mechanism to apply diffs of the updated template to the project. + +## Consequences + +We will need to create and document an adoption process for existing skeleton projects to move to this copier template diff --git a/2.4.0/_sources/explanations/decisions/0014-split-ci-yaml.md.txt b/2.4.0/_sources/explanations/decisions/0014-split-ci-yaml.md.txt new file mode 100644 index 00000000..b0843f1e --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0014-split-ci-yaml.md.txt @@ -0,0 +1,26 @@ +# 14. Split up CI YAML + +Date: 2024-01-31 + +## Status + +Accepted + +## Context + +The existing monolithic CI had some problems: + +- We want some parts to be optional, which required templated CI which then couldn't be easily tested +- We wanted to reuse some parts of the CI in the template repo +- It was long and hard to read +- It was split into multiple top level jobs + +## Decision + +Break it into multiple [reusable workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows) that are called from: +- A single `ci` workflow that runs on push, and tests, builds, and adds artifacts to releases +- A single `periodic` workflow that runs once a week and checks links aren't broken + +## Consequences + +We can reuse workflows in the template repo diff --git a/2.4.0/_sources/explanations/decisions/0015-use-ruff.md.txt b/2.4.0/_sources/explanations/decisions/0015-use-ruff.md.txt new file mode 100644 index 00000000..023f4bff --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0015-use-ruff.md.txt @@ -0,0 +1,19 @@ +# 15. Use ruff + +Date: 2024-02-15 + +## Status + +Accepted + +## Context + +Ruff is faster than flake8 and black, has mostly compatible output, and is gaining popularity. + +## Decision + +We will switch to using ruff for linting and formatting. + +## Consequences + +We may have to consider pinning ruff in the future if its output changes regularly. diff --git a/2.4.0/_sources/explanations/decisions/0016-convert-to-mkdocs.md.txt b/2.4.0/_sources/explanations/decisions/0016-convert-to-mkdocs.md.txt new file mode 100644 index 00000000..7e1a2f01 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0016-convert-to-mkdocs.md.txt @@ -0,0 +1,26 @@ +# 16. Convert to mkdocs + +Date: 2024-02-15 + +## Status + +Rejected + +## Context + +Markdown is nicer to write, we have to write using mkdocs for the developer portal and backstage likes it, should we switch to using it? + +It can mostly replace sphinx, but there are a few places it falls down: + +- The API docs (mkdocstrings) have some paid for features that we already use in sphinx +- The plugin landscape is vast, but not well maintained +- The scientific python community (i.e. numpy, scipy, matplotlib, bluesky) uses sphinx exclusively +- There are custom directives like the ipython one that we would struggle to replace + +## Decision + +We will stick with sphinx for now, but use MyST so we can write markdown with it. + +## Consequences + +We will keep an eye on mkdocs. diff --git a/2.4.0/_sources/explanations/decisions/0017-use-pyright.md.txt b/2.4.0/_sources/explanations/decisions/0017-use-pyright.md.txt new file mode 100644 index 00000000..dc8cbef9 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0017-use-pyright.md.txt @@ -0,0 +1,19 @@ +# 17. Use pyright + +Date: 2024-02-15 + +## Status + +Accepted + +## Context + +Pyright is faster than mypy, and catches more errors. + +## Decision + +We will use it by default, but retain mypy as an option for existing projects where pyright gives too many errors to quickly migrate. + +## Consequences + +We will add a new question to let people switch between the two. diff --git a/2.4.0/_sources/explanations/decisions/0018-forbid-private-member-access-in-prod.md.txt b/2.4.0/_sources/explanations/decisions/0018-forbid-private-member-access-in-prod.md.txt new file mode 100644 index 00000000..274f48a3 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0018-forbid-private-member-access-in-prod.md.txt @@ -0,0 +1,20 @@ +# 18. Forbid Private Member Access in Production Code + +Date: 2024-07-02 + +## Status + +Accepted + +## Context + +Most programming languages forbid access to private member variables at compile time to guarantee encapsulation. Python only does this by convention. Ruff now provides a rule (SLF001) that forbids it. +See https://github.com/DiamondLightSource/python-copier-template/issues/154 for further discussion. + +## Decision + +We will enable SLF001 for the `src` directory but not the `tests` directory, as we want to keep production code clean without raising the barrier to entry for writing tests. + +## Consequences + +Any private member access in `src` will cause CI to fail, the ultimate override of `noqa` remains available. diff --git a/2.4.0/_sources/explanations/decisions/0019-autosummary-api-docs.md.txt b/2.4.0/_sources/explanations/decisions/0019-autosummary-api-docs.md.txt new file mode 100644 index 00000000..9f8721f1 --- /dev/null +++ b/2.4.0/_sources/explanations/decisions/0019-autosummary-api-docs.md.txt @@ -0,0 +1,23 @@ +# 19. Use autosummary to create API docs + +Date: 2024-09-10 + +## Status + +Accepted + +## Context + +The current sphinx API documentation requires you to paste automodule directives in for each subpackage. This is counter intuitive and also places all the docs on one page. People saw a blank page and assumed API generation was broken. + +Using autosummary would give a nicer summary, but requires pasting custom templates in which makes sphinx-autobuild keep reloading forever. + +Using autodoc2 would allow md docstrings, but doesn't work with pydantic, and doesn't support google or numpy docstrings. + +## Decision + +Decided to use autosummary, with one page per subpackage. This means at most 2 reloads of sphinx-autobuild before it settles, which is reasonable. + +## Consequences + +Try to push a bit of the custom template (generating public_members in member order) up to sphinx. diff --git a/2.4.0/_sources/explanations/structure.md.txt b/2.4.0/_sources/explanations/structure.md.txt new file mode 100644 index 00000000..01717ec4 --- /dev/null +++ b/2.4.0/_sources/explanations/structure.md.txt @@ -0,0 +1,38 @@ +# Template Project Structure + +The template has the following folders at the root level. + +## src + +This folder contains the source code for the project. Typically this contains a single folder with the package name for the project and the folder contains python modules files. + +See [](src) for details. + +## tests + +This folder holds all of the tests that will be run by pytest, both locally and in CI. + +See [](using-pytest) + +## docs + +This folder contains the source for sphinx documentation. + +See [](documentation-structure) for details. + +## .github + +Configuration for the Continuous Integration Workflow on github + +## VSCode specific folders + +### .devcontainer + +Configuration for running the developer container for this project in VSCode. + +### .vscode + +VSCode settings for this project: + +- enable static analysis in the editor +- enables python debugging. diff --git a/2.4.0/_sources/explanations/why-use-template.md.txt b/2.4.0/_sources/explanations/why-use-template.md.txt new file mode 100644 index 00000000..80d4c439 --- /dev/null +++ b/2.4.0/_sources/explanations/why-use-template.md.txt @@ -0,0 +1,9 @@ +# Why Use a Copier Template? + +Many projects start from some kind of template. These define some basic structure, customized with project specific variables, that developers can add their code into. One example of this is [cookiecutter](https://cookiecutter.readthedocs.io). + +The problem with this approach is that it is difficult to apply changes to the template into projects that have been cut from it. Individual changes have to be copy/pasted into the code, leading to partially applied fixes and missed updates. + +A previous attempt, [python3-pip-skeleton](https://github.com/DiamondLightSource/python3-pip-skeleton), took a different approach, being a repo that can be forked and updates merged into projects tracking it. This was initially encouraging, but led to downstream confusion on who had actually contributed to the repository, as well as messy merges when text that contained the project name (like documentation) was changed upstream. + +This template now makes use of [copier](https://copier.readthedocs.io/) which gives the best of both worlds, a templating engine to expand the template, then an update mechanism to apply diffs of the updated template to the project. diff --git a/2.4.0/_sources/genindex.md.txt b/2.4.0/_sources/genindex.md.txt new file mode 100644 index 00000000..73f1191b --- /dev/null +++ b/2.4.0/_sources/genindex.md.txt @@ -0,0 +1,3 @@ +# Index + + diff --git a/2.4.0/_sources/how-to.md.txt b/2.4.0/_sources/how-to.md.txt new file mode 100644 index 00000000..27c9aca2 --- /dev/null +++ b/2.4.0/_sources/how-to.md.txt @@ -0,0 +1,11 @@ +# How-to Guides + +Practical step-by-step guides for the more experienced user. + +```{toctree} +:maxdepth: 1 +:glob: + +how-to/dev-install +how-to/* +``` diff --git a/2.4.0/_sources/how-to/build-docs.md.txt b/2.4.0/_sources/how-to/build-docs.md.txt new file mode 100644 index 00000000..f557337f --- /dev/null +++ b/2.4.0/_sources/how-to/build-docs.md.txt @@ -0,0 +1,39 @@ +# Build the docs using sphinx + +You can build the [sphinx](https://www.sphinx-doc.org) based docs from the project directory by running: + +``` +$ tox -e docs +``` + +This will build the static docs on the `docs` directory, which includes API docs that pull in docstrings from the code. + +:::{seealso} +[](documentation_standards) +::: + +The docs will be built into the `build/html` directory, and can be opened locally with a web browse: + +``` +$ firefox build/html/index.html +``` + +## Autobuild + +You can also run an autobuild process, which will watch your `docs` directory for changes and rebuild whenever it sees changes, reloading any browsers watching the pages: + +``` +$ tox -e docs autobuild +``` + +You can view the pages at localhost: + +``` +$ firefox http://localhost:8000 +``` + +If you are making changes to source code too, you can tell it to watch changes in this directory too: + +``` +$ tox -e docs autobuild -- --watch src +``` diff --git a/2.4.0/_sources/how-to/check-docs-style.md.txt b/2.4.0/_sources/how-to/check-docs-style.md.txt new file mode 100644 index 00000000..095a20b3 --- /dev/null +++ b/2.4.0/_sources/how-to/check-docs-style.md.txt @@ -0,0 +1,42 @@ +# Check docs for style + +Ruff has the ability to check that you have: + +- Documented all public modules, classes, methods and functions +- Written your docstrings according to a particular style +- Not missed parameters from method and function docstrings + +This is not turned on by default, as it is not able to [distinguish between a missing docstring, and one that is inherited from a parent class](https://github.com/astral-sh/ruff/issues/9149) + +## Enabling docstring checking + +There are a number of competing docstring styles, ruff supports numpy, google and pep257. If you would like to check for the google docstring style, you can configure in ``pyproject.toml`` by: + +- Turning on the checker + +```toml +[tool.ruff.lint] +extend-select = [ + # ... + "D", # pydocstyle - https://docs.astral.sh/ruff/rules/#pydocstyle-d + # ... +] +``` + +- Selecting a convention + +```toml +[tool.ruff.lint.pydocstyle] +convention = "google" +``` + +- Ignoring docstring checking in tests + +```toml +[tool.ruff.lint.per-file-ignores] +"tests/**/*" = [ + # ... + "D", # Don't check docstrings in tests + # ... +] +``` diff --git a/2.4.0/_sources/how-to/contribute.md.txt b/2.4.0/_sources/how-to/contribute.md.txt new file mode 100644 index 00000000..6e419797 --- /dev/null +++ b/2.4.0/_sources/how-to/contribute.md.txt @@ -0,0 +1,2 @@ +```{include} ../../.github/CONTRIBUTING.md +``` diff --git a/2.4.0/_sources/how-to/coverage.md.txt b/2.4.0/_sources/how-to/coverage.md.txt new file mode 100644 index 00000000..161ffc2c --- /dev/null +++ b/2.4.0/_sources/how-to/coverage.md.txt @@ -0,0 +1,8 @@ + +# How to check code coverage + +Code coverage is reported to the command line and to a `cov.xml` file by the command `tox -e tests`. The file is uploaded to the Codecov service in CI. + +## Adding a Codecov Token + +If the repo is not hosted in DiamondLightSource, then you need to visit `https://app.codecov.io/account/gh//org-upload-token` to generate a token for your org, and store it as a secret named `CODECOV_TOKEN` in `https://github.com/organizations//settings/secrets/actions` diff --git a/2.4.0/_sources/how-to/dev-install.md.txt b/2.4.0/_sources/how-to/dev-install.md.txt new file mode 100644 index 00000000..ea191829 --- /dev/null +++ b/2.4.0/_sources/how-to/dev-install.md.txt @@ -0,0 +1,53 @@ +# Setup Developer Environment + +These instructions will take you through the minimal steps required to get a dev environment setup, so you can run the tests locally. + +## Clone the repository + +First clone the repository locally using [Git](https://git-scm.com/downloads). There is a link on the GitHub interface to allow you to do this. SSH is recommended if you have setup a key. Enter the directory that it is cloned into to continue. + +## Install dependencies + +You can choose to either develop on the host machine using a `venv` (which requires python 3.10 or later) or to run in a container under [VSCode](https://code.visualstudio.com/) + + +::::{tab-set} + +:::{tab-item} Local virtualenv +``` +python3 -m venv venv +source venv/bin/activate +pip install -e '.[dev]' +``` +::: + +:::{tab-item} VSCode devcontainer + +Ensure you have the [vscode devcontainer extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) installed. + +If you are at DLS, then first [setup podman and its fix for devcontainer features](https://dev-portal.diamond.ac.uk/guide/containers/tutorials/podman/#enable-use-of-vscode-features) and then follow [these instructions](https://dev-portal.diamond.ac.uk/guide/containers/tutorials/devcontainer/) for setting up devcontainers on a DLS workstation. + +``` +code . +``` + +Click on 'Reopen in Container' when prompted on startup or, if vscode is already running, open the command menu with CTRL+SHIFT+P, search for and run 'Reopen in Container'. +Open a new terminal +::: + +:::: + +## Build and test + +Now you have a development environment you can run the tests in a terminal: + +``` +tox -p +``` + +This will run in parallel the following checks: + +- [](./build-docs) +- [](./run-tests) +- [](./static-analysis) +- [](./lint) diff --git a/2.4.0/_sources/how-to/excalidraw.md.txt b/2.4.0/_sources/how-to/excalidraw.md.txt new file mode 100644 index 00000000..294de960 --- /dev/null +++ b/2.4.0/_sources/how-to/excalidraw.md.txt @@ -0,0 +1,19 @@ +# How to embed Excalidraw diagrams + +Start off by creating your diagram in + +```{raw} html +:file: ../images/excalidraw-example.svg +``` + +Click 'Save as image' and make sure the 'Embed scene' checkbox is enabled. this is required for loading your image back into Excalidraw should you wish to make changes later on. Name your file and export to SVG, saving it inside `docs/images`. + +Add the following to embed it inside your documentation: + + ```{raw} html + :file: ../images/my-diagram.excalidraw.svg + ``` + +It is preferred to use the above convention over the image directive in order to retain the font used by Excalidraw. + +Rebuild the docs and open the resulting html inside a browser. diff --git a/2.4.0/_sources/how-to/lint.md.txt b/2.4.0/_sources/how-to/lint.md.txt new file mode 100644 index 00000000..3a706436 --- /dev/null +++ b/2.4.0/_sources/how-to/lint.md.txt @@ -0,0 +1,34 @@ +# Run linting using pre-commit + +Code linting is handled by [ruff](https://docs.astral.sh/ruff) run under [pre-commit](https://pre-commit.com/). + +## Running pre-commit + +You can run the above checks on all files with this command: + +``` +$ tox -e pre-commit +``` + +Or you can install a pre-commit hook that will run each time you do a `git commit` on just the files that have changed: + +``` +$ pre-commit install +``` + +It is also possible to [automatically enable pre-commit on cloned repositories](https://pre-commit.com/#automatically-enabling-pre-commit-on-repositories). This will result in pre-commits being enabled on every repo your user clones from now on. + +## Fixing issues + +The typical workflow is: + +- Make a code change +- `git add` it +- Try to commit +- Pre-commit will run, and ruff will try and fix any issues it finds +- If anything changes it will be left in your working copy +- Review and commit the results + +## VSCode support + +The `.vscode/settings.json` will run ruff formatters on save, but will not try to auto-fix as that does things like removing unused imports which is too intrusive while editing. diff --git a/2.4.0/_sources/how-to/lock-requirements.md.txt b/2.4.0/_sources/how-to/lock-requirements.md.txt new file mode 100644 index 00000000..1e72899f --- /dev/null +++ b/2.4.0/_sources/how-to/lock-requirements.md.txt @@ -0,0 +1,49 @@ +# Lock requirements + +## Introduction + +By design this project only defines dependencies in one place, i.e. in the `requires` table in `pyproject.toml`. + +In the `requires` table it is possible to pin versions of some dependencies as needed. For library projects it is best to leave pinning to a minimum so that your library can be used by the widest range of applications. + +When CI builds the project it will use the latest compatible set of dependencies available (after applying your pins and any dependencies' pins). + +This approach means that there is a possibility that a future build may break because an updated release of a dependency has made a breaking change. + +The correct way to fix such an issue is to work out the minimum pinning in `requires` that will resolve the problem. However this can be quite hard to do and may be time consuming when simply trying to release a minor update. + +For this reason we provide a mechanism for locking all dependencies to the same version as a previous successful release. This is a quick fix that should guarantee a successful CI build. + +## Finding the lock files + +Every release of the project will have a set of requirements files published as release assets. + +For example take a look at the release page for python-copier-template [here](https://github.com/DiamondLightSource/python-copier-template/releases/tag/1.1.0) + +There is a single `dev-requirements.txt` file showing as an asset on the release. This has been created using `pip freeze --exclude-editable` on a successful test run using the same version of python as the devcontainer, and will contain a full list of the dependencies and sub-dependencies with pinned versions. You can download this file by clicking on it. + +## Applying the lock file + +To apply a lockfile: + +- copy the requirements file you have downloaded to the root of your repository +- commit it into the repo +- push the changes + +The CI looks for a `dev-requirements.txt` in the root and will pass it to pip as a constraint when installing the dev environment. If a package is required to be installed by `pyproject.toml` then `pip` will use the version specified in `dev-requirements.txt`. + +## Updating the lockfile + +1. Open the repo in a devcontainer +1. Delete dev-requirements.txt +1. Restart your dev container +1. Check the tests run +1. Then run `pip freeze --exclude-editable > dev-requirements.txt` +1. Check the new file into Git +1. Push and merge the changes + +## Removing dependency locking from CI + +Once the reasons for locking the build have been resolved it is a good idea to go back to an unlocked build. This is because you get an early indication of any incoming problems. + +To restore unlocked builds in CI simply remove `dev-requirements.txt` from the root of the repo and push. diff --git a/2.4.0/_sources/how-to/make-release.md.txt b/2.4.0/_sources/how-to/make-release.md.txt new file mode 100644 index 00000000..dd7cbbfc --- /dev/null +++ b/2.4.0/_sources/how-to/make-release.md.txt @@ -0,0 +1,18 @@ +# Make a release + +To make a new release, please follow this checklist: + +- Ensure that you have previously followed [](./pypi) +- Choose a new PEP440 compliant release number (see ) +- Go to the GitHub [release] page +- Choose `Draft New Release` +- Click `Choose Tag` and supply the new tag you chose (click create new tag) +- Click `Generate release notes`, review and edit these notes +- Choose a title and click `Publish Release` + +Note that tagging and pushing to the main branch has the same effect except that +you will not get the option to edit the release notes. + +A new release will be made and the wheel and sdist uploaded to PyPI. + +[release]: https://github.com/DiamondLightSource/python-copier-template/releases diff --git a/2.4.0/_sources/how-to/pypi.md.txt b/2.4.0/_sources/how-to/pypi.md.txt new file mode 100644 index 00000000..5cc9eaaf --- /dev/null +++ b/2.4.0/_sources/how-to/pypi.md.txt @@ -0,0 +1,24 @@ +# Setting up PyPI publishing + +To publish your package on PyPI requires a PyPI account and for PyPI to be setup for [Trusted Publisher](https://docs.pypi.org/trusted-publishers/). + +## Gather the information + +You will need the following information: + +- Owner: The GitHub org that the repo is contained in, e.g. `DiamondLightSource` +- Repository name: The GitHub repository name, e.g. `python-copier-template-example` +- PyPI Project Name: The distribution name on PyPI, e.g. `dls-python-copier-template-example` +- Workflow name: The workflow that does publishing, `_pypi.yml` for `python-copier-template` projects +- Environment name: The GitHub environment that publishing is done with, `release` for `python-copier-template` projects + +## If publishing to the DiamondLightSource PyPI organisation + +If you are publishing to the DiamondLightSource PyPI organisation then use the above information and follow the [Developer Portal Guide on PyPI publishing](https://dev-portal.diamond.ac.uk/guide/python/how-tos/pypi/). + +## If publishing the PyPI project to another organisation + +If you are publishing to a different PyPI organisation then use the above information in one of the following guides: + +- [Creating a PyPI project with a trusted publisher](https://docs.pypi.org/trusted-publishers/creating-a-project-through-oidc/) +- [Adding a trusted publisher to an existing PyPI project](https://docs.pypi.org/trusted-publishers/adding-a-publisher/) diff --git a/2.4.0/_sources/how-to/readme-images.md.txt b/2.4.0/_sources/how-to/readme-images.md.txt new file mode 100644 index 00000000..b6f0f686 --- /dev/null +++ b/2.4.0/_sources/how-to/readme-images.md.txt @@ -0,0 +1,110 @@ +# How to add images to the README + +The contents of the `README.md` file may be presented in various places: + +* Project homepage on GitHub +* Project documentation (if using Sphinx build) +* PyPI (if publishing there) + +This places some limitations on including relative content as PyPI is only +provided with the content directly in `README.md` and not the surrounding +resources. + +Additionally the Sphinx build uses the `docs` directory as the root of the build +meaning that included content is relative to that path. + +A reference link in Markdown syntax can be used to allow images to be included +such that a fixed image URL is used in the `README.md` itself which can be +overridden to a relative URL for the Sphinx build. This satisfies the three use +cases above. + +Example of Markdown reference link: + +```markdown +![Image alt text][reference] +``` +with the `reference` defined (potentially elsewhere) as: + +```markdown +[reference]: https://mydomain.com/myimage.png +``` + +## Example: Image Reference + +This example shows how to include an image (local to the repository) in the +`README.md` such that it will render in all three places mentioned above. + +In the `README.md` a reference image link is placed at the location the image +should be rendered: + +```markdown +![my example image][blueapi] +``` + +at the bottom of the `README.md`, link to a `raw.githubusercontent.com` URL. +This is placed below a comment: + +```markdown + + +[blueapi]: https://raw.githubusercontent.com/DiamondLightSource/blueapi/main/docs/images/blueapi.png +``` + +The absolute URL is used to allow PyPI to render the image. If PyPI is not +required a relative URL can be used which will work for GitHub rendering. + +The `README.md` content is included in the Sphinx build (for example `index.md`) +but will stop when it reaches the comment: + +````markdown +```{include} ../README.md +:end-before: + +::::{grid} 2 +:gutter: 4 + +:::{grid-item-card} {material-regular}`directions_walk;2em` +```{toctree} +:maxdepth: 2 +tutorials +``` ++++ +Tutorials for installation and typical usage. New users start here. +::: + +:::{grid-item-card} {material-regular}`directions;2em` +```{toctree} +:maxdepth: 2 +how-to +``` ++++ +Practical step-by-step guides for the more experienced user. +::: + +:::{grid-item-card} {material-regular}`info;2em` +```{toctree} +:maxdepth: 2 +explanations +``` ++++ +Explanations of how it works and why it works that way. +::: + +:::{grid-item-card} {material-regular}`menu_book;2em` +```{toctree} +:maxdepth: 2 +reference +``` ++++ +Technical reference material including APIs and release notes. +::: + +:::: diff --git a/2.4.0/_sources/reference.md.txt b/2.4.0/_sources/reference.md.txt new file mode 100644 index 00000000..5ef05fee --- /dev/null +++ b/2.4.0/_sources/reference.md.txt @@ -0,0 +1,12 @@ +# Reference + +Technical reference material including APIs and release notes. + +```{toctree} +:maxdepth: 1 +:glob: + +reference/* +genindex +Release Notes +``` diff --git a/2.4.0/_sources/reference/standards.rst.txt b/2.4.0/_sources/reference/standards.rst.txt new file mode 100644 index 00000000..b0970a21 --- /dev/null +++ b/2.4.0/_sources/reference/standards.rst.txt @@ -0,0 +1,64 @@ +Standards +========= + +This document defines the code and documentation standards used in this +repository. + +Code Standards +-------------- + +The code in this repository conforms to standards set by the following tools: + +- ruff_ for code formatting +- flake8_ for style checks +- isort_ for import ordering +- pyright_ for static type checking + +.. seealso:: + + How-to guides `../how-to/lint` and `../how-to/static-analysis` + +.. _documentation_standards: + +Documentation Standards +----------------------- + +Docstrings are pre-processed using the Sphinx Napoleon extension. As such, +google-style_ is considered as standard for this repository. Please use type +hints in the function signature for types. For example: + +.. code:: python + + def func(arg1: str, arg2: int) -> bool: + """Summary line. + + Extended description of function. + + Args: + arg1: Description of arg1 + arg2: Description of arg2 + + Returns: + Description of return value + """ + return True + +.. _google-style: https://sphinxcontrib-napoleon.readthedocs.io/en/latest/index.html#google-vs-numpy + +Documentation is contained in the ``docs`` directory and extracted from +docstrings of the API. + +Docs follow the underlining convention:: + + Headling 1 (page title) + ======================= + + Heading 2 + --------- + + Heading 3 + ~~~~~~~~~ + +.. seealso:: + + How-to guide `../how-to/build-docs` diff --git a/2.4.0/_sources/tutorials.md.txt b/2.4.0/_sources/tutorials.md.txt new file mode 100644 index 00000000..1b6d0ca8 --- /dev/null +++ b/2.4.0/_sources/tutorials.md.txt @@ -0,0 +1,11 @@ +# Tutorials + +Tutorials for installation and typical usage. New users start here. + +```{toctree} +:maxdepth: 1 + +tutorials/installation +tutorials/create-new +tutorials/adopt-existing +``` diff --git a/2.4.0/_sources/tutorials/adopt-existing.md.txt b/2.4.0/_sources/tutorials/adopt-existing.md.txt new file mode 100644 index 00000000..0f3c9185 --- /dev/null +++ b/2.4.0/_sources/tutorials/adopt-existing.md.txt @@ -0,0 +1,48 @@ +# Adopt the template into an existing repo + +You can adopt this template into an existing repo by running `copier copy` in much the same way as in a new project. + +This will: + +- Ask some questions about the existing project +- Expand the template with the answers given +- Ask if you would like to overwrite conflicting files (always choose yes) +- Record the answers in the project so they can be used in later updates + +:::{note} +Copier will *overwrite* files with the template files. Please check the changes using `git diff` and put back anything you would like to keep from the existing project files. +::: + +## If you have a skeleton-based project + +If you have a [python3-pip-skeleton](https://github.com/DiamondLightSource/python3-pip-skeleton) based project then it is best to adopt the `1.0.0` release of this template, then `copier update` to get to the latest. This is because `copier update` will try and merge file changes across renames done between releases, while `copier copy` cannot. This looks like: + +```shell +copier copy gh:DiamondLightSource/python-copier-template --trust --vcs-ref=1.0.0 /path/to/existing-project +git diff +# Examine the changes, put back anything you want to keep +git commit -m "Adopt python-copier-template 1.0.0" +copier update --trust /path/to/existing-project +git diff +# Examine the changes, resolve any merge conflicts +git commit -m "Update to python-copier-template x.x.x" +``` + +## If you do not have a skeleton-based project + +If you have a project with a different structure then it is best to go straight to the latest release: + +```shell +copier copy --trust gh:DiamondLightSource/python-copier-template /path/to/existing-project +git diff +# Examine the changes, put back anything you want to keep +git commit -m "Adopt python-copier-template x.x.x" +``` + +:::{note} +Copier does not touch any already existing files that do not conflict with the ones in the template. Therefore, you may end up with files in your project you no longer need such as old github workflows. These would need to be manually deleted. +::: + +## Getting started with your new structure + +You can now [](../how-to/dev-install), and then follow some of the other [](../how-to). diff --git a/2.4.0/_sources/tutorials/create-new.md.txt b/2.4.0/_sources/tutorials/create-new.md.txt new file mode 100644 index 00000000..31c62bb4 --- /dev/null +++ b/2.4.0/_sources/tutorials/create-new.md.txt @@ -0,0 +1,40 @@ +# Create a new repo from the template + +Once you have followed the [](./installation) tutorial, you can use `copier` to make a new project from the template: + +``` +$ mkdir /path/to/my-project +$ copier copy --trust gh:DiamondLightSource/python-copier-template /path/to/my-project +``` + +This will: + +- Ask some questions about the project to be created +- Expand the template with the answers give +- Record the answers in the project so they can be used in later updates +- Create a git repository if the directory is not already one + +## Committing the results + +You can now check what the template has created, tweak the results if desired, and commit the results: +``` +$ cd /path/to/my-project +$ git add . +$ git commit -m "Expand from python-copier-template x.x.x" +``` + +## Uploading to GitHub + +You can now [create a new blank project on GitHub](https://github.com/new). Choose the same GitHub owner and repo name that you answered in the questions earlier. GitHub will now give you the commands needed to upload your repo from GitHub + +## Settings + +You can now go to the cogwheel on the main page next to the "About" header, and set the project description to match the answer you gave. + +Then go to the `Settings` tab and set: + +- Enable Pages if you chose to use sphinx for your documentation + +## Getting started with your new repo + +You can now [](../how-to/dev-install), and then follow some of the other [](../how-to). diff --git a/2.4.0/_sources/tutorials/installation.md.txt b/2.4.0/_sources/tutorials/installation.md.txt new file mode 100644 index 00000000..4db62b87 --- /dev/null +++ b/2.4.0/_sources/tutorials/installation.md.txt @@ -0,0 +1,48 @@ +# Install template pre-requisites + +This tutorial will take you through installing copier, the templating engine that will allow you +to create new projects from the template, update existing projects in line with it, and keep projects in sync with changes to it. + +## Check your version of python + +You will need python 3.10 or later. You can check your version of python by +typing into a terminal: + +``` +$ python3 --version +``` + +:::{note} +At Diamond you can use `module load python` to get a more recent version of python on your path +::: + +## Create a virtual environment + +It is recommended that you install into a “virtual environment” so this +installation will not interfere with any existing Python software: + +``` +$ python3 -m venv /path/to/venv +$ source /path/to/venv/bin/activate +``` + +:::{note} +You may wish to deactivate any existing virual environments before sourcing the new +environment. Deactivation can be performed by executing: + +- `conda deactivate` for conda +- `deactivate` for venv or virtualenv +- `exit` for pipenv +::: + +## Installing copier + +You can now use `pip` to install copier so you can make your project from the template: + +``` +$ python3 -m pip install copier +``` + +## Conclusion + +You now have the pre-requisites to allow you to [](./create-new) and [](./adopt-existing). diff --git a/2.4.0/_sphinx_design_static/design-tabs.js b/2.4.0/_sphinx_design_static/design-tabs.js new file mode 100644 index 00000000..b25bd6a4 --- /dev/null +++ b/2.4.0/_sphinx_design_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/2.4.0/_sphinx_design_static/sphinx-design.min.css b/2.4.0/_sphinx_design_static/sphinx-design.min.css new file mode 100644 index 00000000..860c36da --- /dev/null +++ b/2.4.0/_sphinx_design_static/sphinx-design.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/2.4.0/_static/basic.css b/2.4.0/_static/basic.css new file mode 100644 index 00000000..2a9e4114 --- /dev/null +++ b/2.4.0/_static/basic.css @@ -0,0 +1,914 @@ +/* + * Sphinx stylesheet -- basic theme. + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin-top: 10px; +} + +ul.search li { + padding: 5px 0; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/2.4.0/_static/check-solid.svg b/2.4.0/_static/check-solid.svg new file mode 100644 index 00000000..92fad4b5 --- /dev/null +++ b/2.4.0/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/2.4.0/_static/clipboard.min.js b/2.4.0/_static/clipboard.min.js new file mode 100644 index 00000000..54b3c463 --- /dev/null +++ b/2.4.0/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/2.4.0/_static/copybutton.css b/2.4.0/_static/copybutton.css new file mode 100644 index 00000000..f1916ec7 --- /dev/null +++ b/2.4.0/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/2.4.0/_static/copybutton.js b/2.4.0/_static/copybutton.js new file mode 100644 index 00000000..e0da1932 --- /dev/null +++ b/2.4.0/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '>>> |\\.\\.\\. |\\$ |In \\[\\d*\\]: | {2,5}\\.\\.\\.: | {5,8}: ', true, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/2.4.0/_static/copybutton_funcs.js b/2.4.0/_static/copybutton_funcs.js new file mode 100644 index 00000000..dbe1aaad --- /dev/null +++ b/2.4.0/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/2.4.0/_static/design-tabs.js b/2.4.0/_static/design-tabs.js new file mode 100644 index 00000000..b25bd6a4 --- /dev/null +++ b/2.4.0/_static/design-tabs.js @@ -0,0 +1,101 @@ +// @ts-check + +// Extra JS capability for selected tabs to be synced +// The selection is stored in local storage so that it persists across page loads. + +/** + * @type {Record} + */ +let sd_id_to_elements = {}; +const storageKeyPrefix = "sphinx-design-tab-id-"; + +/** + * Create a key for a tab element. + * @param {HTMLElement} el - The tab element. + * @returns {[string, string, string] | null} - The key. + * + */ +function create_key(el) { + let syncId = el.getAttribute("data-sync-id"); + let syncGroup = el.getAttribute("data-sync-group"); + if (!syncId || !syncGroup) return null; + return [syncGroup, syncId, syncGroup + "--" + syncId]; +} + +/** + * Initialize the tab selection. + * + */ +function ready() { + // Find all tabs with sync data + + /** @type {string[]} */ + let groups = []; + + document.querySelectorAll(".sd-tab-label").forEach((label) => { + if (label instanceof HTMLElement) { + let data = create_key(label); + if (data) { + let [group, id, key] = data; + + // add click event listener + // @ts-ignore + label.onclick = onSDLabelClick; + + // store map of key to elements + if (!sd_id_to_elements[key]) { + sd_id_to_elements[key] = []; + } + sd_id_to_elements[key].push(label); + + if (groups.indexOf(group) === -1) { + groups.push(group); + // Check if a specific tab has been selected via URL parameter + const tabParam = new URLSearchParams(window.location.search).get( + group + ); + if (tabParam) { + console.log( + "sphinx-design: Selecting tab id for group '" + + group + + "' from URL parameter: " + + tabParam + ); + window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); + } + } + + // Check is a specific tab has been selected previously + let previousId = window.sessionStorage.getItem( + storageKeyPrefix + group + ); + if (previousId === id) { + // console.log( + // "sphinx-design: Selecting tab from session storage: " + id + // ); + // @ts-ignore + label.previousElementSibling.checked = true; + } + } + } + }); +} + +/** + * Activate other tabs with the same sync id. + * + * @this {HTMLElement} - The element that was clicked. + */ +function onSDLabelClick() { + let data = create_key(this); + if (!data) return; + let [group, id, key] = data; + for (const label of sd_id_to_elements[key]) { + if (label === this) continue; + // @ts-ignore + label.previousElementSibling.checked = true; + } + window.sessionStorage.setItem(storageKeyPrefix + group, id); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/2.4.0/_static/dls-logo.svg b/2.4.0/_static/dls-logo.svg new file mode 100644 index 00000000..4fcaa861 --- /dev/null +++ b/2.4.0/_static/dls-logo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/2.4.0/_static/doctools.js b/2.4.0/_static/doctools.js new file mode 100644 index 00000000..0398ebb9 --- /dev/null +++ b/2.4.0/_static/doctools.js @@ -0,0 +1,149 @@ +/* + * Base JavaScript utilities for all Sphinx HTML documentation. + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/2.4.0/_static/documentation_options.js b/2.4.0/_static/documentation_options.js new file mode 100644 index 00000000..6ad106d7 --- /dev/null +++ b/2.4.0/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '2.4.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/2.4.0/_static/file.png b/2.4.0/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/2.4.0/_static/graphviz.css b/2.4.0/_static/graphviz.css new file mode 100644 index 00000000..30f3837b --- /dev/null +++ b/2.4.0/_static/graphviz.css @@ -0,0 +1,12 @@ +/* + * Sphinx stylesheet -- graphviz extension. + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/2.4.0/_static/language_data.js b/2.4.0/_static/language_data.js new file mode 100644 index 00000000..c7fe6c6f --- /dev/null +++ b/2.4.0/_static/language_data.js @@ -0,0 +1,192 @@ +/* + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/2.4.0/_static/minus.png b/2.4.0/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK literal 0 HcmV?d00001 diff --git a/2.4.0/_static/plus.png b/2.4.0/_static/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz literal 0 HcmV?d00001 diff --git a/2.4.0/_static/pygments.css b/2.4.0/_static/pygments.css new file mode 100644 index 00000000..012e6a00 --- /dev/null +++ b/2.4.0/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #fae4c2 } +html[data-theme="light"] .highlight { background: #fefefe; color: #080808 } +html[data-theme="light"] .highlight .c { color: #515151 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #a12236 } /* Error */ +html[data-theme="light"] .highlight .k { color: #6730c5 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #7f4707 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #080808 } /* Name */ +html[data-theme="light"] .highlight .o { color: #00622f } /* Operator */ +html[data-theme="light"] .highlight .p { color: #080808 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #515151 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #515151 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #515151 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #515151 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #515151 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #515151 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #005b82 } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #005b82 } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #005b82 } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #6730c5 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #6730c5 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #6730c5 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #6730c5 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #6730c5 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #7f4707 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #7f4707 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #7f4707 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #00622f } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #912583 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #7f4707 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #005b82 } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #005b82 } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #7f4707 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #00622f } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #6730c5 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #005b82 } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #7f4707 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #080808 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #080808 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #005b82 } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #005b82 } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #a12236 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #6730c5 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #080808 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #080808 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #7f4707 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #7f4707 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #7f4707 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #7f4707 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #7f4707 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #00622f } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #00622f } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #00622f } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #00622f } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #00622f } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #00622f } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #00622f } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #00622f } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #00622f } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #00622f } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #a12236 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #00622f } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #005b82 } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #7f4707 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #005b82 } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #a12236 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #a12236 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #a12236 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #7f4707 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #7f4707 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/2.4.0/_static/scripts/bootstrap.js b/2.4.0/_static/scripts/bootstrap.js new file mode 100644 index 00000000..c8178deb --- /dev/null +++ b/2.4.0/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>li,Collapse:()=>Ei,Dropdown:()=>Ki,Modal:()=>Ln,Offcanvas:()=>Kn,Popover:()=>bs,ScrollSpy:()=>Ls,Tab:()=>Js,Toast:()=>po,Tooltip:()=>fs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={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];S(s)&&x(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}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){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 F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&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 B(t){var e=H(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 W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(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 Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=X(T,O,C),k=f;i.modifiersData[a]=((e={})[k]=x,e.centerOffset=x-O,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)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const it={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:I(e.placement),variation:Z(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,et(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,et(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 nt={passive:!0};const st={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=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(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):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(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}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(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 yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={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=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(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})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(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 xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(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},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=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?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();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?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(t);const n=(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 s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(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))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=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 oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){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=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),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 pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.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 he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(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 me(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 ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(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]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{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=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=Ft(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(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.3"}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 ye=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 e?e.split(",").map((t=>Mt(t))).join(","):null},we={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=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).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(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.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)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{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=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_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(),Xt(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&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(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 Fe=".bs.carousel",He=".data-api",Be="ArrowLeft",We="ArrowRight",ze="next",Re="prev",qe="left",Ve="right",Ye=`slide${Fe}`,Ke=`slid${Fe}`,Qe=`keydown${Fe}`,Xe=`mouseenter${Fe}`,Ue=`mouseleave${Fe}`,Ge=`dragstart${Fe}`,Je=`load${Fe}${He}`,Ze=`click${Fe}${He}`,ti="carousel",ei="active",ii=".active",ni=".carousel-item",si=ii+ni,oi={[Be]:Ve,[We]:qe},ri={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ai={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class li extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===ti&&this.cycle()}static get Default(){return ri}static get DefaultType(){return ai}static get NAME(){return"carousel"}next(){this._slide(ze)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(Re)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ke,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ke,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?ze:Re;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&&fe.on(this._element,Qe,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Xe,(()=>this.pause())),fe.on(this._element,Ue,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Ge,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(qe)),rightCallback:()=>this._slide(this._directionToOrder(Ve)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=oi[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=we.findOne(ii,this._indicatorsElement);e.classList.remove(ei),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(ei),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===ze,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(Ye).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),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(ei),i.classList.remove(ei,c,l),this._isSliding=!1,r(Ke)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(si,this._element)}_getItems(){return we.find(ni,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===qe?Re:ze:t===qe?ze:Re}_orderToDirection(t){return Kt()?t===Re?qe:Ve:t===Re?Ve:qe}static jQueryInterface(t){return this.each((function(){const e=li.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)}))}}fe.on(document,Ze,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(ti))return;t.preventDefault();const i=li.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Je,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)li.getOrCreateInstance(e)})),Qt(li);const ci=".bs.collapse",hi=`show${ci}`,di=`shown${ci}`,ui=`hide${ci}`,fi=`hidden${ci}`,pi=`click${ci}.data-api`,mi="show",gi="collapse",_i="collapsing",bi=`:scope .${gi} .${gi}`,vi='[data-bs-toggle="collapse"]',yi={parent:null,toggle:!0},wi={parent:"(null|element)",toggle:"boolean"};class Ei extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(vi);for(const t of i){const e=we.getSelectorFromElement(t),i=we.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 yi}static get DefaultType(){return wi}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=>Ei.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,hi).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(gi),this._element.classList.add(_i),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(_i),this._element.classList.add(gi,mi),this._element.style[e]="",fe.trigger(this._element,di)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,ui).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(_i),this._element.classList.remove(gi,mi);for(const t of this._triggerArray){const e=we.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(_i),this._element.classList.add(gi),fe.trigger(this._element,fi)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(mi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(vi);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(bi,this._config.parent);return we.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=Ei.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,pi,vi,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))Ei.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(Ei);const Ai="dropdown",Ti=".bs.dropdown",Ci=".data-api",Oi="ArrowUp",xi="ArrowDown",ki=`hide${Ti}`,Li=`hidden${Ti}`,Si=`show${Ti}`,Di=`shown${Ti}`,$i=`click${Ti}${Ci}`,Ii=`keydown${Ti}${Ci}`,Ni=`keyup${Ti}${Ci}`,Pi="show",Mi='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ji=`${Mi}.${Pi}`,Fi=".dropdown-menu",Hi=Kt()?"top-end":"top-start",Bi=Kt()?"top-start":"top-end",Wi=Kt()?"bottom-end":"bottom-start",zi=Kt()?"bottom-start":"bottom-end",Ri=Kt()?"left-start":"right-start",qi=Kt()?"right-start":"left-start",Vi={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Yi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Ki extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Fi)[0]||we.prev(this._element,Fi)[0]||we.findOne(Fi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Vi}static get DefaultType(){return Yi}static get NAME(){return Ai}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,Si,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Pi),this._element.classList.add(Pi),fe.trigger(this._element,Di,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!fe.trigger(this._element,ki,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Pi),this._element.classList.remove(Pi),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,Li,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ai.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Pi)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Ri;if(t.classList.contains("dropstart"))return qi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Bi:Hi:e?zi:Wi}_detectNavbar(){return null!==this._element.closest(".navbar")}_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}_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)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===xi,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Ki.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=we.find(ji);for(const i of e){const e=Ki.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=[Oi,xi].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Mi)?this:we.prev(this,Mi)[0]||we.next(this,Mi)[0]||we.findOne(Mi,t.delegateTarget.parentNode),o=Ki.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Ii,Mi,Ki.dataApiKeydownHandler),fe.on(document,Ii,Fi,Ki.dataApiKeydownHandler),fe.on(document,$i,Ki.clearMenus),fe.on(document,Ni,Ki.clearMenus),fe.on(document,$i,Mi,(function(t){t.preventDefault(),Ki.getOrCreateInstance(this).toggle()})),Qt(Ki);const Qi="backdrop",Xi="show",Ui=`mousedown.bs.${Qi}`,Gi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ji={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Zi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Gi}static get DefaultType(){return Ji}static get NAME(){return Qi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Xi),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Xi),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Ui),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=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Ui,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const tn=".bs.focustrap",en=`focusin${tn}`,nn=`keydown.tab${tn}`,sn="backward",on={autofocus:!0,trapElement:null},rn={autofocus:"boolean",trapElement:"element"};class an extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return on}static get DefaultType(){return rn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,tn),fe.on(document,en,(t=>this._handleFocusin(t))),fe.on(document,nn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,tn))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===sn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?sn:"forward")}}const ln=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",cn=".sticky-top",hn="padding-right",dn="margin-right";class un{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,hn,(e=>e+t)),this._setElementAttributes(ln,hn,(e=>e+t)),this._setElementAttributes(cn,dn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,hn),this._resetElementAttributes(ln,hn),this._resetElementAttributes(cn,dn)}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&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const fn=".bs.modal",pn=`hide${fn}`,mn=`hidePrevented${fn}`,gn=`hidden${fn}`,_n=`show${fn}`,bn=`shown${fn}`,vn=`resize${fn}`,yn=`click.dismiss${fn}`,wn=`mousedown.dismiss${fn}`,En=`keydown.dismiss${fn}`,An=`click${fn}.data-api`,Tn="modal-open",Cn="show",On="modal-static",xn={backdrop:!0,focus:!0,keyboard:!0},kn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ln extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new un,this._addEventListeners()}static get Default(){return xn}static get DefaultType(){return kn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,_n,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Tn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,pn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Cn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,fn),fe.off(this._dialog,fn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Zi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new an({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=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(Cn),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,bn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,En,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,vn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,wn,(t=>{fe.one(this._element,yn,(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(Tn),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,gn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,mn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(On)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(On),this._queueCallback((()=>{this._element.classList.remove(On),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=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"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=Ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,An,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,_n,(t=>{t.defaultPrevented||fe.one(e,gn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&Ln.getInstance(i).hide(),Ln.getOrCreateInstance(e).toggle(this)})),Ee(Ln),Qt(Ln);const Sn=".bs.offcanvas",Dn=".data-api",$n=`load${Sn}${Dn}`,In="show",Nn="showing",Pn="hiding",Mn=".offcanvas.show",jn=`show${Sn}`,Fn=`shown${Sn}`,Hn=`hide${Sn}`,Bn=`hidePrevented${Sn}`,Wn=`hidden${Sn}`,zn=`resize${Sn}`,Rn=`click${Sn}${Dn}`,qn=`keydown.dismiss${Sn}`,Vn={backdrop:!0,keyboard:!0,scroll:!1},Yn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Vn}static get DefaultType(){return Yn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,jn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new un).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Nn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(In),this._element.classList.remove(Nn),fe.trigger(this._element,Fn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,Hn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Pn),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(In,Pn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new un).reset(),fe.trigger(this._element,Wn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Zi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Bn)}:null})}_initializeFocusTrap(){return new an({trapElement:this._element})}_addEventListeners(){fe.on(this._element,qn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Bn))}))}static jQueryInterface(t){return this.each((function(){const e=Kn.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)}}))}}fe.on(document,Rn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Wn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Mn);i&&i!==e&&Kn.getInstance(i).hide(),Kn.getOrCreateInstance(e).toggle(this)})),fe.on(window,$n,(()=>{for(const t of we.find(Mn))Kn.getOrCreateInstance(t).show()})),fe.on(window,zn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Kn.getOrCreateInstance(t).hide()})),Ee(Kn),Qt(Kn);const Qn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],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:[]},Xn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Un=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Gn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Xn.has(i)||Boolean(Un.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Jn={allowList:Qn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Zn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ts={entry:"(string|element|function|null)",selector:"(string|element)"};class es extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Jn}static get DefaultType(){return Zn}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},ts)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(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)Gn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const is=new Set(["sanitize","allowList","sanitizeFn"]),ns="fade",ss="show",os=".tooltip-inner",rs=".modal",as="hide.bs.modal",ls="hover",cs="focus",hs={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ds={allowList:Qn,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"},us={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 fs extends ve{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),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 ds}static get DefaultType(){return us}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),fe.off(this._element.closest(rs),as,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=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(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),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(ss),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[cs]=!1,this._activeTrigger[ls]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.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(ns,ss),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(ns),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new es({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[os]: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(ns)}_isShown(){return this.tip&&this.tip.classList.contains(ss)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=hs[e.toUpperCase()];return Dt(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 Xt(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,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ls?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ls?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?cs:ls]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?cs:ls]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(rs),as,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=_e.getDataAttributes(this._element);for(const t of Object.keys(e))is.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:Ht(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=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".popover-header",ms=".popover-body",gs={...fs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},_s={...fs.DefaultType,content:"(null|string|element|function)"};class bs extends fs{static get Default(){return gs}static get DefaultType(){return _s}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[ps]:this._getTitle(),[ms]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=bs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(bs);const vs=".bs.scrollspy",ys=`activate${vs}`,ws=`click${vs}`,Es=`load${vs}.data-api`,As="active",Ts="[href]",Cs=".nav-link",Os=`${Cs}, .nav-item > ${Cs}, .list-group-item`,xs={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},ks={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ls extends ve{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 xs}static get DefaultType(){return ks}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=Ht(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&&(fe.off(this._config.target,ws),fe.on(this._config.target,ws,Ts,(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=we.find(Ts,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(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(As),this._activateParents(t),fe.trigger(this._element,ys,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(As);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,Os))t.classList.add(As)}_clearActiveClass(t){t.classList.remove(As);const e=we.find(`${Ts}.${As}`,t);for(const t of e)t.classList.remove(As)}static jQueryInterface(t){return this.each((function(){const e=Ls.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]()}}))}}fe.on(window,Es,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ls.getOrCreateInstance(t)})),Qt(Ls);const Ss=".bs.tab",Ds=`hide${Ss}`,$s=`hidden${Ss}`,Is=`show${Ss}`,Ns=`shown${Ss}`,Ps=`click${Ss}`,Ms=`keydown${Ss}`,js=`load${Ss}`,Fs="ArrowLeft",Hs="ArrowRight",Bs="ArrowUp",Ws="ArrowDown",zs="Home",Rs="End",qs="active",Vs="fade",Ys="show",Ks=".dropdown-toggle",Qs=`:not(${Ks})`,Xs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Us=`.nav-link${Qs}, .list-group-item${Qs}, [role="tab"]${Qs}, ${Xs}`,Gs=`.${qs}[data-bs-toggle="tab"], .${qs}[data-bs-toggle="pill"], .${qs}[data-bs-toggle="list"]`;class Js extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ms,(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?fe.trigger(e,Ds,{relatedTarget:t}):null;fe.trigger(t,Is,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(qs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ns,{relatedTarget:e})):t.classList.add(Ys)}),t,t.classList.contains(Vs)))}_deactivate(t,e){t&&(t.classList.remove(qs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,$s,{relatedTarget:e})):t.classList.remove(Ys)}),t,t.classList.contains(Vs)))}_keydown(t){if(![Fs,Hs,Bs,Ws,zs,Rs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([zs,Rs].includes(t.key))i=e[t.key===zs?0:e.length-1];else{const n=[Hs,Ws].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Js.getOrCreateInstance(i).show())}_getChildren(){return we.find(Us,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=we.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=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(Ks,qs),n(".dropdown-menu",Ys),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(qs)}_getInnerElement(t){return t.matches(Us)?t:we.findOne(Us,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Js.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ps,Xs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Js.getOrCreateInstance(this).show()})),fe.on(window,js,(()=>{for(const t of we.find(Gs))Js.getOrCreateInstance(t)})),Qt(Js);const Zs=".bs.toast",to=`mouseover${Zs}`,eo=`mouseout${Zs}`,io=`focusin${Zs}`,no=`focusout${Zs}`,so=`hide${Zs}`,oo=`hidden${Zs}`,ro=`show${Zs}`,ao=`shown${Zs}`,lo="hide",co="show",ho="showing",uo={animation:"boolean",autohide:"boolean",delay:"number"},fo={animation:!0,autohide:!0,delay:5e3};class po extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return fo}static get DefaultType(){return uo}static get NAME(){return"toast"}show(){fe.trigger(this._element,ro).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(lo),qt(this._element),this._element.classList.add(co,ho),this._queueCallback((()=>{this._element.classList.remove(ho),fe.trigger(this._element,ao),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,so).defaultPrevented||(this._element.classList.add(ho),this._queueCallback((()=>{this._element.classList.add(lo),this._element.classList.remove(ho,co),fe.trigger(this._element,oo)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(co),super.dispose()}isShown(){return this._element.classList.contains(co)}_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(){fe.on(this._element,to,(t=>this._onInteraction(t,!0))),fe.on(this._element,eo,(t=>this._onInteraction(t,!1))),fe.on(this._element,io,(t=>this._onInteraction(t,!0))),fe.on(this._element,no,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=po.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function mo(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(po),Qt(po),mo((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new fs(t,{delay:{show:500,hide:100}})}))})),mo((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),mo((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/2.4.0/_static/scripts/bootstrap.js.LICENSE.txt b/2.4.0/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 00000000..28755c2c --- /dev/null +++ b/2.4.0/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/2.4.0/_static/scripts/bootstrap.js.map b/2.4.0/_static/scripts/bootstrap.js.map new file mode 100644 index 00000000..4a3502ae --- /dev/null +++ b/2.4.0/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\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 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 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 { 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\";\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\";","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 };","/*!\n * Bootstrap v5.3.3 (https://getbootstrap.com/)\n * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\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();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\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 instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\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 * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\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 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 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 return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\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 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\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 if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\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 if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\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 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 return findShadowRoot(element.parentNode);\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};\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\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 DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\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};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\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 index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\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};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\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 if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\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 callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\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}\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}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\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 if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\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 if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\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 return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\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 _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 if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.3';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\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 for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\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 static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\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 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;\n }\n return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\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 while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\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\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\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 if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\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\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\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$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\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$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\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 if (!element || !Swipe.isSupported()) {\n return;\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$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\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 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 _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\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = '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';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = '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';\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\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // 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 this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\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 prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\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 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 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\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 this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\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 if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\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 const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\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 const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\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 if (typeof config === 'number') {\n data.to(config);\n return;\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 data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = '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';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\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 this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\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$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\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 _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\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 _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\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 return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, 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 for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = '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';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\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)';\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';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\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 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] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\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 this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\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$5, 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 if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\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 const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\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 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\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 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 return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\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$1, !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 if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\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$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\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$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\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$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // 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$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // 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};\nconst DefaultType$8 = {\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$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\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$4);\n }\n this._element = backdrop;\n }\n return this._element;\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 _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\nconst DefaultType$7 = {\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$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\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 _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\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 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 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 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 _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 this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\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 Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\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 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 this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\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 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 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\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 if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\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 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$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\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 if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\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 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 if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\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 if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\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$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\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 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$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\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 const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\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 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 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 _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\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 if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\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 const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\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});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\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;\nconst 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 dd: [],\n div: [],\n dl: [],\n dt: [],\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(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\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;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\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$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\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 title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\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 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 this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\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 this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\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 const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\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 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 if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\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 _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\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 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\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 return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\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 _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\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 _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\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 return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), 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 ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\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] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\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 _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\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 _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\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 _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\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 if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' + '
' + '

' + '
' + '
',\n trigger: 'click'\n};\nconst DefaultType$2 = {\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$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\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 _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 if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\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$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // 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};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // 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$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\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 if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\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 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({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\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 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\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 continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\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 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 _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n 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$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both