diff --git a/README.md b/README.md index 88f9b8d..8a12d2e 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,28 @@ PyNeon is a light-weight library to work with Neon (Pupil Labs) multi-modal eye- ## Documentation [PyNeon Documentation](https://ncc-brain.github.io/PyNeon/) contains public API and tutorials as Jupyter notebooks. + +## Diagram of classes + +```plaintext +Timeseries Data >> NeonDataset('Timeseries Data') +├── Recording1-e116e606 >> NeonRecording('Timeseries Data/Recording1-e116e606') +│ ├── info.json ├── .info (dict) +| ├── gaze.csv ├── .gaze (NeonGaze) +| ├── 3d_eye_states.csv ├── .eye_states (NeonEyeStates) +| ├── imu.csv ├── .imu (NeonIMU) +| ├── blinks.csv ├── .blinks (NeonBlinks) +| ├── fixations.csv ├── .fixations (NeonFixations) +| ├── saccades.csv ├── .saccades (NeonSaccades) +| ├── events.csv ├── .events (NeonEvents) +| ├── scene_camera.json +| ├── world_timestamps.csv +| ├── .mp4 +| └── labels.csv +├── Recording2-93b8c234 +│ ├── info.json +│ ├── gaze.csv +│ └── .... +├── enrichment_info.txt +└── sections.csv +``` diff --git a/docs/.buildinfo b/docs/.buildinfo deleted file mode 100644 index 7e6b952..0000000 --- a/docs/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: a3337b8fdb7d16f69d6f92f1c6fc4a2c -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_images/tutorials_read_recording_17_1.png b/docs/_images/tutorials_read_recording_17_1.png deleted file mode 100644 index 1655eed..0000000 Binary files a/docs/_images/tutorials_read_recording_17_1.png and /dev/null differ diff --git a/docs/_images/tutorials_read_recording_21_1.png b/docs/_images/tutorials_read_recording_21_1.png deleted file mode 100644 index 268cf1d..0000000 Binary files a/docs/_images/tutorials_read_recording_21_1.png and /dev/null differ diff --git a/docs/_images/tutorials_resample_and_concat_10_1.png b/docs/_images/tutorials_resample_and_concat_10_1.png deleted file mode 100644 index 3685348..0000000 Binary files a/docs/_images/tutorials_resample_and_concat_10_1.png and /dev/null differ diff --git a/docs/_images/tutorials_resample_and_concat_12_1.png b/docs/_images/tutorials_resample_and_concat_12_1.png deleted file mode 100644 index 78d029f..0000000 Binary files a/docs/_images/tutorials_resample_and_concat_12_1.png and /dev/null differ diff --git a/docs/_images/tutorials_resample_and_concat_6_1.png b/docs/_images/tutorials_resample_and_concat_6_1.png deleted file mode 100644 index 6ad0f01..0000000 Binary files a/docs/_images/tutorials_resample_and_concat_6_1.png and /dev/null differ diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt deleted file mode 100644 index 2dee77b..0000000 --- a/docs/_sources/index.rst.txt +++ /dev/null @@ -1,50 +0,0 @@ -:html_theme.sidebar_secondary.remove: true - -.. module:: pyneon - -Welcome to PyNeon documentation -=============================== - -PyNeon is a light-weight library to work with Neon (Pupil Labs) multi-modal -eye-tracking data. It is a community-driven effort to provide a versatile set -of tools to work with the rich data (gaze, eye states, IMU, events, etc.) -provided by Neon. - -PyNeon works with the cloud-processed data from Pupil Cloud instead of -"native" data from the Companion app. To read data in the "native" format, please -see ``pl-neon-recording`` https://github.com/pupil-labs/pl-neon-recording/ -(which also inspired PyNeon). - -Here we provide tutorials and API reference to help you get started with PyNeon. - -Installation -============ - -To install PyNeon, clone the PyNeon repository from -https://github.com/NCCLabMPI/PyNeon and run: - -.. code-block:: bash - - pip install . - -PyPI and conda releases are planned for the future. - -Data format -=========== - -PyNeon works with the "Timeseries Data" or "Timeseries Data + Scene Video" formats -as exported from Pupil Clouds. The data could be from a single recording or from a -project with multiple recordings. - -License -======= - -.. literalinclude:: ../LICENSE - :language: none - -.. toctree:: - :maxdepth: 2 - :hidden: - - Tutorials - API reference \ No newline at end of file diff --git a/docs/_sources/reference/data.rst.txt b/docs/_sources/reference/data.rst.txt deleted file mode 100644 index 9988b95..0000000 --- a/docs/_sources/reference/data.rst.txt +++ /dev/null @@ -1,6 +0,0 @@ -Classes for individual data types -================================= - -.. automodule:: pyneon.data - :members: - :show-inheritance: \ No newline at end of file diff --git a/docs/_sources/reference/dataset.rst.txt b/docs/_sources/reference/dataset.rst.txt deleted file mode 100644 index b0312f4..0000000 --- a/docs/_sources/reference/dataset.rst.txt +++ /dev/null @@ -1,5 +0,0 @@ -NeonDataset class -================= - -.. autoclass:: pyneon.NeonDataset - :members: \ No newline at end of file diff --git a/docs/_sources/reference/index.rst.txt b/docs/_sources/reference/index.rst.txt deleted file mode 100644 index 5fb5250..0000000 --- a/docs/_sources/reference/index.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -.. _pyneon-api: - -PyNeon API -========== - -.. toctree:: - :maxdepth: 2 - - dataset - recording - data - preprocess \ No newline at end of file diff --git a/docs/_sources/reference/preprocess.rst.txt b/docs/_sources/reference/preprocess.rst.txt deleted file mode 100644 index ccc69dc..0000000 --- a/docs/_sources/reference/preprocess.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -Preprocessing module -==================== - -.. automodule:: pyneon.preprocess - :members: - :undoc-members: - :show-inheritance: \ No newline at end of file diff --git a/docs/_sources/reference/recording.rst.txt b/docs/_sources/reference/recording.rst.txt deleted file mode 100644 index 1d0ce76..0000000 --- a/docs/_sources/reference/recording.rst.txt +++ /dev/null @@ -1,5 +0,0 @@ -NeonRecording class -=================== - -.. autoclass:: pyneon.NeonRecording - :members: \ No newline at end of file diff --git a/docs/_sources/tutorials/export_to_bids.ipynb.txt b/docs/_sources/tutorials/export_to_bids.ipynb.txt deleted file mode 100644 index 5f33234..0000000 --- a/docs/_sources/tutorials/export_to_bids.ipynb.txt +++ /dev/null @@ -1,18 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Export Neon data recording to BIDS formats\n" - ] - } - ], - "metadata": { - "language_info": { - "name": "python" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/_sources/tutorials/index.rst.txt b/docs/_sources/tutorials/index.rst.txt deleted file mode 100644 index c5e9781..0000000 --- a/docs/_sources/tutorials/index.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -.. _tutorials: - -PyNeon Tutorials -================ - -Here you can find tutorials in the form of Jupyter notebooks to help you get -started with PyNeon. - -.. toctree:: - :maxdepth: 1 - - read_recording - resample_and_concat - export_to_bids \ No newline at end of file diff --git a/docs/_sources/tutorials/read_recording.ipynb.txt b/docs/_sources/tutorials/read_recording.ipynb.txt deleted file mode 100644 index d1c18c5..0000000 --- a/docs/_sources/tutorials/read_recording.ipynb.txt +++ /dev/null @@ -1,460 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Reading a Neon dataset/recording\n", - "In this tutorial, we will show how to load a single Neon recording downloaded from [Pupil Cloud](https://docs.pupil-labs.com/neon/pupil-cloud/).\n", - "\n", - "## Reading sample data\n", - "We will use a sample recording produced by the NCC Lab called `OfficeWalk`. It's a project with 2 recordings and multiple enrichments and can be downloaded with the `get_sample_data()` function:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import numpy as np\n", - "from scipy.ndimage import gaussian_filter\n", - "from pyneon import get_sample_data, NeonDataset, NeonRecording\n", - "\n", - "sample_dir = get_sample_data(\"OfficeWalk\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The `OfficeWalk` data has the following structure:\n", - "\n", - "```plaintext\n", - "OfficeWalk\n", - "├── Timeseries Data\n", - "│ ├── walk1-e116e606\n", - "│ │ ├── info.json\n", - "│ │ ├── gaze.csv\n", - "│ │ └── ....\n", - "│ ├── walk2-93b8c234\n", - "│ │ ├── info.json\n", - "│ │ ├── gaze.csv\n", - "│ │ └── ....\n", - "| ├── enrichment_info.txt\n", - "| └── sections.csv\n", - "├── OfficeWalk_FACE-MAPPER_FaceMap\n", - "├── OfficeWalk_MARKER-MAPPER_TagMap_csv\n", - "└── OfficeWalk_STATIC-IMAGE-MAPPER_ManualMap_csv\n", - "```\n", - "\n", - "The `Timeseries Data` folder contains what PyNeon calls a `NeonDataset`. It contains multiple recordings, each with its own `info.json` file and data files. These recordings can either be loaded individually as `NeonRecording`s or as a wholist `NeonDataset`.\n", - "\n", - "If loading a `NeonDataset`, specify the path to the `Timeseries Data` folder to create a `NeonDataset` object:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NeonDataset | 2 recordings\n" - ] - } - ], - "source": [ - "dataset_dir = sample_dir / \"Timeseries Data\"\n", - "dataset = NeonDataset(dataset_dir)\n", - "print(dataset)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "NeonDataset has a `recordings` attribute that contains a list of `NeonRecording` objects. These `NeonRecording` objects can be accessed by their index." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "first_recording = dataset[0]\n", - "print(type(first_recording))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Alternatively, one can directly load a single `NeonRecording` by specifying the path to the recording's folder:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "recording_dir = dataset_dir / \"walk1-e116e606\"\n", - "recording = NeonRecording(recording_dir)\n", - "print(type(recording))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Accessing data and metadata of a NeonRecording\n", - "An overview of basic metadata and contents of a `NeonRecording` can be obtained by printing the object. An initiated `NeonRecording` locates data files in the recording directory but does not load them until requested to be memory efficient." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Recording ID: e116e606-5f3f-4d34-8727-040b8762cef8\n", - "Wearer ID: bcff2832-cfcb-4f89-abef-7bbfe91ec561\n", - "Wearer name: Qian\n", - "Recording start time: 2024-08-30 17:37:01.527000\n", - "Recording duration: 98.213 s\n", - " exist filename path\n", - "3d_eye_states True 3d_eye_states.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\3d_eye_states.csv\n", - "blinks True blinks.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\blinks.csv\n", - "events True events.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\events.csv\n", - "fixations True fixations.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\fixations.csv\n", - "gaze True gaze.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\gaze.csv\n", - "imu True imu.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\imu.csv\n", - "labels True labels.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\labels.csv\n", - "saccades True saccades.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\saccades.csv\n", - "world_timestamps True world_timestamps.csv C:\\Users\\qian.chu\\Documents\\GitHub\\pyneon\\data\\OfficeWalk\\Timeseries Data\\walk1-e116e606\\world_timestamps.csv\n", - "scene_video False None None\n", - "\n" - ] - } - ], - "source": [ - "print(recording)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Individual data streams can be accessed as properties of the `NeonRecording` object. For example, the gaze data can be accessed as `recording.gaze`, and upon accessing, the tabular data is loaded into memory." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "recording._gaze size before accessing `gaze`: 16\n", - "recording.gaze is of type: \n", - "recording._gaze size after accessing `gaze`: 48\n" - ] - } - ], - "source": [ - "print(f\"recording._gaze size before accessing `gaze`: {sys.getsizeof(recording._gaze)}\")\n", - "\n", - "gaze = recording.gaze\n", - "print(f\"recording.gaze is of type: {type(gaze)}\")\n", - "print(f\"recording._gaze size after accessing `gaze`: {sys.getsizeof(recording._gaze)}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can access the timeseries data in the gaze stream as a pandas DataFrame by accessing the `data` attribute of the gaze stream. The columns of the DataFrame include `timestamp [ns]` and channel data columns. During loading, PyNeon strips the redundant `section id` and `recording id` columns and adds a more human-readable `time [s]` column to represent the time of each sample in seconds relative to the start of the data stream." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " timestamp [ns] gaze x [px] gaze y [px] worn fixation id blink id \\\n", - "0 1725032224852161732 1067.486 620.856 True 1 \n", - "1 1725032224857165732 1066.920 617.117 True 1 \n", - "2 1725032224862161732 1072.699 615.780 True 1 \n", - "3 1725032224867161732 1067.447 617.062 True 1 \n", - "4 1725032224872161732 1071.564 613.158 True 1 \n", - "\n", - " azimuth [deg] elevation [deg] time [s] \n", - "0 16.213030 -0.748998 0.000000 \n", - "1 16.176285 -0.511733 0.005004 \n", - "2 16.546413 -0.426618 0.010000 \n", - "3 16.210049 -0.508251 0.015000 \n", - "4 16.473521 -0.260388 0.020000 \n" - ] - } - ], - "source": [ - "print(gaze.data.head())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "PyNeon also automatically sets the column datatype to appropriate types, such as `Int64` for timestamps, `Int32` for event IDs, and `float64` for float data." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "timestamp [ns] Int64\n", - "gaze x [px] float64\n", - "gaze y [px] float64\n", - "worn bool\n", - "fixation id Int32\n", - "blink id Int32\n", - "azimuth [deg] float64\n", - "elevation [deg] float64\n", - "time [s] float64\n", - "dtype: object\n" - ] - } - ], - "source": [ - "print(gaze.data.dtypes)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualizing data timeseries and sampling gaps\n", - "\n", - "Up to this point, PyNeon simply reads and re-organizes the raw .csv files. Let's plot some samples from the `gaze` and `eye_states` streams and a saccade from the `saccades` events." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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VeSLI5Q9pkufz/0fkHirbWEeC1Z89Xm33XYb+vXrh3379uHQoUP48ccfsWrVKsybNw933XUXdu3ahQ8++ACnTp1CWVkZTCYTjEYjKisroVKpcPz4caSlSVcE/vPPP1FVVYVevXrV+/xbtmzBJ598gjNnzqCiogImkwlhYWE2bYwYMcLmMd26dcOePXsAABUVFThz5gzmzp2LefPmWa+p2w4RkbdjqCQiIt9lmb5aX3jcvxT4xyZAHgRk15oey4qvfkOhUKBv377o27cvJk+ejLlz5+Ltt9/G9ddfj2nTpmHEiBGYPn06IiIicODAAcyZMwfV1dVQqVRQKBQNttuQgwcPYubMmXj44Ydx4403IiwsDN98843kqGd9KioqAABz585Ft27dbM7J5dz1jYh8B0MlERH5LkWE+Of+peJ2IYBtsGxzIxDZERjyWa2tRiLEEUoGSr/Uvn177NixA0ePHoXZbMZTTz1lDWhbt261ufaqq67C7t27MXXqVLt2kpKSoFQqsXv3bsnpbb/++itat25tLdoDALm5uXZ9OXToEP7+979bjx06dMj691atWiE2NhZnz57FnXfe6doLJiLyAgyVRETku9Rx4qhjdqbtdiEmA6CMAqJSgLDW4rUMkX6luLgYTzzxBO666y5cddVV0Gg0OHLkCFatWoUBAwYgMTERNTU1WLduHW6++WYcPHgQ//rXv2zamDBhAu6++2689NJLGD58OEJCQrBnzx6kpaVBp9Nh3LhxeO211xASEoIePXqgsLAQJ0+exN13343ExETk5eXhm2++wTXXXIPvv/8e27fbjpSPHj0azz//PK6++mr06NEDmzdvxsmTJ21C6sMPP4xXXnkFWq0WN954I6qqqnDkyBGUlpZizJgxLfK1JCJqKoZKIiLyXUqdOI01c4IYLC3bhVimt1oCJfkdtVqNrl274uOPP8bZs2dRU1ODuLg4ZGRkYOLEiVAqlXjqqafw4Ycf4o033kDPnj3x2GOP4dlnn7W2kZycjHfffRfLli3DfffdB4VCgW7duuH2228HADz00EMICgrC8uXLceHCBcTExFjXSA4YMAD3338/Xn75ZVRVVaFfv3546KGHsGLFCmv7gwcPxpkzZ/D666/DaDRi4MCBGDFiBH7++WfrNRkZGVAqlVi9ejVeffVVqFQqXHnllbj//vtb6CtJRNR0rP7q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iIiIiMhlwZ7ugC8wm80AgNzcXA/3hIiIKLAYDAbk5+d7uhteRalUQqlUerobRAHLkgksGYEYKh1i+WF2ww03eLgnRERERETkDfLz85GYmOjpbngFmSAIgqc74e1qampw4MABxMXFQS7njGF30Ov16NKlC44ePQqtVuvp7lAdfH+8F98b78b3x3vxvfFufH+8F98be2azGfn5+ejRoweCgzlGBzBUkoeUlpYiIiICJSUlCA8P93R3qA6+P96L74134/vjvfjeeDe+P96L7w05gsNuRERERERE5DKGSiIiIiIiInIZQyV5hEKhwNy5c6FQKDzdFZLA98d78b3xbnx/vBffG+/G98d78b0hR3BNJREREREREbmMI5VERERERETkMoZKIiIiIiIichlDJREREREREbmMoZKIiIiIiIhcxlBJLeaVV16BTCbDY489Zj128uRJ/OMf/0BMTAzCw8MxYsQI5Ofne66TAWTevHmQyWQ2t86dO1vPGwwGTJ06FdHR0QgLC0NGRgbfmxbS2Hvz3nvvoX///ggPD4dMJkNxcbHnOhuAGnp/CgsLMX36dHTq1AkqlQqJiYl45JFHUFJS4uFeB47G/v889NBD6NChA1QqFWJiYpCeno5jx455sMeBo7H3xkIQBNx+++2QyWTYuHFjy3c0QDX2/vTv39/u/OTJkz3YY/ImwZ7uAAWGPXv24N1330W3bt2sx8rLy5GWloZrr70WO3bsAADMnj0bQ4cOxf/+9z/I5fydR3O7+uqr8d///td6Pzj48reEGTNmYPPmzfjiiy8QERGBadOm4e6778ZPP/3kia4GnIbem4qKCgwePBiDBw/GrFmzPNG9gFff+3P+/HmcP38eS5YsQZcuXXD69GlMnjwZ58+fx/r16z3V3YDT0P+fnj17YtSoUUhMTERhYSHmzZuHtLQ0nDp1CkFBQZ7obkBp6L2xWLp0KWQyWUt2i/7S2PszceJEvPjii9b7arW6xfpG3o2hkppdWVkZRo0ahZUrV+Kll16yHv/pp5+QnZ2NAwcOIDw8HACwZs0a6HQ67NixAwMHDvRUlwNGcHAw4uPj7Y6XlJTggw8+wLp163DLLbcAAFatWoWUlBT873//Q+/evVu6qwGnvvcGgHW0/9tvv225DpGN+t6fa665Bhs2bLDe79ChAxYsWIDRo0ejpqZG8gM0uV9D/38mTZpk/XtycjJeeuklXHvttcjOzkaHDh1aqosBq6H3BgAOHjyIV199FXv37kXr1q1bsGcENP7+qNXqBs9T4OJQEDW7qVOnYsiQIXYh0Wg0QiaT2Wymq1QqIZfL8eOPP7Z0NwPSiRMn0KZNG7Rv3x6jRo1CTk4OAGDfvn2orq62ec86d+6MxMRE7Nq1y1PdDSj1vTfkHZx5f0pKShAeHs5A2YIcfX/Ky8uxatUqtGvXDgkJCS3cy8DU0HtTUVGB++67D8uXL2dw8ZDG/u988sknaNWqFa655hrMmjULFRUVHuopeRuGSmpWn332Gfbv34+FCxfanevduzc0Gg2eeeYZVFRUoLy8HE8++SRMJhNyc3M90NvA0qtXL6xevRpbtmzBihUrcOrUKfztb3+DXq9HXl4eQkNDERkZafOYuLg45OXleabDAaSh94Y8z5n359KlS5g/f77N6Bg1L0fen7fffhthYWEICwvDN998g23btiE0NNSDvQ4Mjb03M2bMQN++fZGenu7hngamxt6f++67D2vXrsXOnTsxa9YsfPzxxxg9erSHe01eQyBqJjk5OUJsbKzw66+/Wo/dfPPNwqOPPmq9v3XrVqF9+/aCTCYTgoKChNGjRwvXXXedMHnyZA/0OLAVFRUJ4eHhwvvvvy988sknQmhoqN01119/vfD00097oHeBrfZ7U9vOnTsFAEJRUZFnOkaCINT//pSUlAg33HCDMHjwYKGqqspDvSOp96e4uFj4/fffhe+++04YOnSocN111wmVlZUe7GVgqv3efPXVV0LHjh0FvV5vPQ9A+Pe//+25Dga4+r63WWzfvl0AIPzxxx8t3DPyRhyppGazb98+XLhwAddddx2Cg4MRHByM7777DsuWLUNwcDBMJhPS0tJw8uRJXLhwAZcuXcLHH3+Mc+fOoX379p7ufsCJjIzEVVddhT/++APx8fGoqqqyqyqan5/PKUkeUPu9Ie8j9f7o9XoMHjwYWq0W//73vxESEuLBHgY2qfcnIiICV155Jfr164f169fj2LFj+Pe//+3BXgam2u/Njh07cPLkSURGRlo/MwBARkYG+vfv79mOBqjGfvb06tULAPiziQBw+is1o1tvvRW//fYbDh48aL2lpqZi1KhROHjwoE2VvVatWiEyMhI7duzAhQsX8Pe//92DPQ9MZWVlOHnyJFq3bo2ePXsiJCQE27dvt54/fvw4cnJy0KdPHw/2MjDVfm/I+9R9f0pLS5GWlobQ0FD85z//gVKp9HAPA1tj/38EQYAgCDAajS3cM6r93sycOROHDh2y+cwAAK+//jpWrVrl2Y4GqMb+71jeI/5sIoDVX6kZabVaXHPNNTbHNBoNoqOjrcctFUVjYmKwa9cuPProo5gxYwY6derkiS4HlCeffBJDhw5FUlISzp8/j7lz5yIoKAj33nsvIiIiMH78eDz++OOIiopCeHg4pk+fjj59+rDyawto6L0BgLy8POTl5Vl/O/zbb79Bq9UiMTERUVFRnux6QGjo/bEEyoqKCqxduxalpaUoLS0FAMTExHDLihbQ0Pvz559/4vPPP0daWhpiYmJw9uxZvPLKK1CpVLjjjjs83XW/19B7ExMTIzkTJjExEe3atfNAbwNPQ+/PyZMnsW7dOtxxxx2Ijo7GoUOHMGPGDPTr189muzgKXAyV5FHHjx/HrFmzUFhYiOTkZDz33HOYMWOGp7sVEM6ePYt7770XBQUFiImJwU033YT//e9/iImJASD+dlgulyMjIwNGoxGDBg3C22+/7eFeB4bG3pt33nkHL7zwgvX6fv36ARB/STN27FhPdDmgNPT+fPvtt9i9ezcAoGPHjjaPO3XqFJKTkz3Q48DS0PtTXV2NH374AUuXLkVRURHi4uLQr18//Pzzz4iNjfV01/1eY9/byLMaen8MBgP++9//YunSpSgvL0dCQgIyMjLw/PPPe7rb5CVkgiAInu4EERERERER+SauqSQiIiIiIiKXMVQSERERERGRyxgqiYiIiIiIyGUMlUREREREROQyhkoiIiIiIiJyGUMlERERERERuYyhkoiIiIiIiFzGUElERC3u22+/hUwmQ3Fxsae74tVWr14NmUwGmUyGxx57zG3tJicnW9vle0CB6Pvvv8fQoUPRpk0byGQybNy40ek2tm7dit69e0Or1SImJgYZGRnIzs52uU9ffvkl0tLSEB0dDZlMhoMHDzb6mP79+1v/L9e+DRkyBABQXV2NZ555Bl27doVGo0GbNm3wwAMP4Pz58zbt1P6eYLm98sorNtccOnQIf/vb36BUKpGQkIBFixbZ9T81NRWRkZHQaDTo3r07Pv74Y+t5R/qSnZ2N8ePHo127dlCpVOjQoQPmzp2Lqqoq6zXffvst0tPT0bp1a+vzfPLJJw5/nS0WLFiAvn37Qq1WIzIyUvKaPXv24NZbb0VkZCR0Oh0GDRqEX3/91ennCgQMlURE1Kz69+9vF4j69u2L3NxcREREeKZT8J1gGx4ejtzcXMyfP99tbe7ZswcbNmxwW3tEvqa8vBzXXnstli9f7tLjT506hfT0dNxyyy04ePAgtm7dikuXLuHuu++u9zHz5s3D2LFjG+zTTTfdhH/+858O9+PLL79Ebm6u9Xb48GEEBQVh+PDhAICKigrs378fs2fPxv79+/Hll1/i+PHj+Pvf/27X1osvvmjT1vTp063nSktLkZaWhqSkJOzbtw+LFy/GvHnz8N5771mviYqKwnPPPYddu3bh0KFDePDBB/Hggw9i69atDvfl2LFjMJvNePfdd3HkyBG8/vrreOedd/Dss89ar/n555/RrVs3bNiwwfo8DzzwADZt2uTw1w0AqqqqMHz4cEyZMkXyfFlZGQYPHozExETs3r0bP/74I7RaLQYNGoTq6mqnnisgCERERM3o5ptvFh599FFPd8POzp07BQBCUVGRp7tSr1WrVgkRERHN0rYvvH6ilgBA+Pe//21zzGAwCE888YTQpk0bQa1WCzfccIOwc+dO6/kvvvhCCA4OFkwmk/XYf/7zH0EmkwlVVVWSzzN37lxhzJgxjfbn1KlTAgDhwIEDTr+W119/XdBqtUJZWVm91/zyyy8CAOH06dPWY0lJScLrr79e72PefvttQafTCUaj0XrsmWeeETp16tRgf3r06CE8//zzTvWlrkWLFgnt2rVr8HnuuOMO4cEHH7Q5tnLlSqFz586CQqEQOnXqJCxfvlzysfV9n92zZ48AQMjJybEeO3TokABAOHHiRIP9CUQcqSQiomYzduxYfPfdd3jjjTesU6qys7PtRglXr16NyMhIbNq0CZ06dYJarcawYcNQUVGBNWvWIDk5GTqdDo888ghMJpO1faPRiCeffBJt27aFRqNBr1698O2331rPnz59GkOHDoVOp4NGo8HVV1+N//u//0N2djYGDBgAANDpdJDJZNYRhC1btuCmm25CZGQkoqOjceedd+LkyZPWNrOzsyGTyfCvf/0Lf/vb36BSqXD99dfj999/x549e5CamoqwsDDcfvvtuHjxos3X4q677sILL7yAmJgYhIeHY/LkyTbTuhyVnJyMl19+GePGjYNWq0ViYqLNiEFVVRWmTZuG1q1bQ6lUIikpCQsXLnT6eYgC1bRp07Br1y589tlnOHToEIYPH47BgwfjxIkTAICePXtCLpdj1apVMJlMKCkpwccff4yBAwciJCTEY/3+4IMPMHLkSGg0mnqvKSkpgUwms5vy+corryA6Oho9evTA4sWLUVNTYz23a9cu9OvXD6GhodZjgwYNwvHjx1FUVGT3HIIgYPv27Th+/Dj69evndF/qXhMVFVXvealrPvnkE8yZMwcLFixAVlYWXn75ZcyePRtr1qxpsJ3aOnXqhOjoaHzwwQeoqqpCZWUlPvjgA6SkpCA5OdnhdgKGp1MtERH5r+LiYqFPnz7CxIkThdzcXCE3N1eoqamxGyVbtWqVEBISItx2223C/v37he+++06Ijo4W0tLShBEjRghHjhwRvv76ayE0NFT47LPPrO1PmDBB6Nu3r/D9998Lf/zxh7B48WJBoVAIv//+uyAIgjBkyBDhtttuEw4dOiScPHlS+Prrr4XvvvtOqKmpETZs2CAAEI4fPy7k5uYKxcXFgiAIwvr164UNGzYIJ06cEA4cOCAMHTpU6Nq1q3VEwjKK0LlzZ2HLli3C0aNHhd69ews9e/YU+vfvL/z444/C/v37hY4dOwqTJ0+29nXMmDFCWFiYcM899wiHDx8WNm3aJMTExAjPPvtsvV+/+n6DnpSUJERFRQnLly8XTpw4ISxcuFCQy+XCsWPHBEEQhMWLFwsJCQnC999/L2RnZws//PCDsG7dOps2OFJJJEKdkcrTp08LQUFBwrlz52yuu/XWW4VZs2ZZ73/77bdCbGysEBQUJAAQ+vTp0+D/p+Yeqdy9e7cAQNi9e3e911RWVgrXXXedcN9999kcf/XVV4WdO3cKv/76q7BixQohMjJSmDFjhvX8bbfdJkyaNMnmMUeOHBEACEePHrUeKy4uFjQajRAcHCwoFArhgw8+cLovtZ04cUIIDw8X3nvvvXqv+fzzz4XQ0FDh8OHD1mMdOnSw+543f/58oU+fPnaPb2hGyG+//SZ06NBBkMvlglwuFzp16iRkZ2fX25dAxlBJRETNSmr6q1SoBCD88ccf1mseeughQa1WC3q93nps0KBBwkMPPSQIgmMf/Lp27SrMmzdPsl+OhqqLFy8KAITffvtNEITLH/jef/996zWffvqpAEDYvn279djChQttpoaNGTNGiIqKEsrLy63HVqxYIYSFhdlMoautoVA5evRo632z2SzExsYKK1asEARBEKZPny7ccsstgtlsrvd1MVQSieqGyk2bNgkABI1GY3MLDg4WRowYIQiCIOTm5gpXXnml8NRTT1l/EXbzzTcLt956q/X/3ffff2/z+JCQECE4ONjm2Nq1a+3642qonDRpktC1a9d6z1dVVQlDhw4VevToIZSUlDTY1gcffCAEBwcLBoNBEATHQ6XJZLL+Qm7JkiVCRESEzbRhZ/py9uxZoUOHDsL48ePr7eeOHTsEtVotrFmzxnqsrKxMACCoVCqbr7VCoRBiY2Pt2qjv+2xFRYVwww03CA888IDwyy+/CLt27RIyMjKEq6++WqioqKi3T4EquEWHRYmIiOqhVqvRoUMH6/24uDgkJycjLCzM5tiFCxcAAL/99htMJhOuuuoqm3aMRiOio6MBAI888gimTJmCzMxMDBw4EBkZGejWrVuD/Thx4gTmzJmD3bt349KlSzCbzQCAnJwcXHPNNdbrarcTFxcHAOjatatkXy2uvfZaqNVq6/0+ffqgrKwMZ86cQVJSUoP9qqv288tkMsTHx1ufb+zYsbjtttvQqVMnDB48GHfeeSfS0tKcap8oUJWVlSEoKAj79u1DUFCQzTnL96Ply5cjIiLCpgLq2rVrkZCQgN27d6N3795ITU21qeC6bNkynDt3zqYQj+V7R1OVl5fjs88+w4svvih5vrq6GiNGjMDp06exY8cOhIeHN9her169UFNTg+zsbHTq1Anx8fHIz8+3ucZyPz4+3npMLpejY8eOAIDu3bsjKysLCxcuRP/+/Z3qy/nz5zFgwAD07dvXZmp/bd999x2GDh2K119/HQ888ID1eFlZGQBg5cqV6NWrl81j6r6fDVm3bh2ys7Oxa9cuyOVy6zGdToevvvoKI0eOdLitQMBQSUREXqHuOiSZTCZ5zBLyHPngN2HCBAwaNAibN29GZmYmFi5ciFdffdWmqmFdQ4cORVJSElauXIk2bdrAbDbjmmuusVv7WLtvMplM8pilr82hoa/Nddddh1OnTuGbb77Bf//7X4wYMQIDBw7E+vXrm60/RP6iR48eMJlMuHDhAv72t79JXlNRUWENGhaW70OW/4cqlcoasACxOmppaanNMXf54osvYDQaMXr0aLtzlhB34sQJ7Ny50/pLt4YcPHgQcrkcsbGxAMRfgD333HOorq62fu/Ztm0bOnXqBJ1OV287ZrMZRqPRqb6cO3cOAwYMQM+ePbFq1Sq7rzMgVu++88478c9//hOTJk2yORcXF4c2bdrgzz//xKhRoxp9rfWxvMeW7+8ArPeb83u7r2KoJCKiZhUaGmpTXMddHPngBwAJCQmYPHkyJk+ejFmzZmHlypWYPn26teBE7b4VFBTg+PHjWLlypbXNH3/80W19/vXXX1FZWQmVSgUA+N///oewsDAkJCS47TkswsPDcc899+Cee+7BsGHDMHjwYBQWFjZa8IIoEJSVleGPP/6w3j916hQOHjyIqKgoXHXVVRg1ahQeeOABvPrqq+jRowcuXryI7du3o1u3bhgyZAiGDBmC119/HS+++CLuvfde6PV6PPvss0hKSkKPHj1c6lNhYSFycnKs+zYeP34cgDgSaBkNfOCBB9C2bVu7wlsffPAB7rrrLruQVl1djWHDhmH//v3YtGkTTCYT8vLyAIghNzQ0FLt27cLu3bsxYMAAaLVa7Nq1CzNmzMDo0aOtgfG+++7DCy+8gPHjx+OZZ57B4cOH8cYbb+D111+3PtfChQuRmpqKDh06wGg04v/+7//w8ccfY8WKFQ735dy5c+jfvz+SkpKwZMkSm2Jnlq/Bzp07ceedd+LRRx9FRkaGtY3Q0FDr97cXXngBjzzyCCIiIjB48GAYjUbs3bsXRUVFePzxxwGIs08sX3OTyWQdVe7YsSPCwsJw22234amnnsLUqVMxffp0mM1mvPLKKwgODrYWeqNaPD3/loiI/NvEiROF66+/Xjh16pRw8eJFwWQySa6prLumZe7cucK1115rc2zMmDFCenq69f6oUaOE5ORkYcOGDcKff/4p7N69W3j55ZeFTZs2CYIgCI8++qiwZcsW4c8//xT27dsn9OrVy7om6uzZs4JMJhNWr14tXLhwQdDr9YLJZBKio6OF0aNHCydOnBC2b98uXH/99TZrrqTWO0mtT6z7miyFeu69917hyJEjwubNm4W4uDhh5syZ9X7tGlpTWbf8/7XXXivMnTtXEASx6Ma6deuErKws4fjx48L48eOF+Ph4m7WbXFNJgczy77/uzVJIp6qqSpgzZ46QnJwshISECK1btxb+8Y9/CIcOHbK28emnnwo9evQQNBqNEBMTI/z9738XsrKy6n3Oxgr1WNaW171Z/l8LgrhGvW4bx44dEwAImZmZdm1avl9J3SxrHS3fGyMiIgSlUimkpKQIL7/8snU9pcWvv/4q3HTTTYJCoRDatm0rvPLKKzbnn3vuOaFjx46CUqkUdDqd0KdPH5vCao70pb6vQe3IMmbMGMnzN998s01/PvnkE6F79+5CaGiooNPphH79+glffvllo+3UXgOamZkp3HjjjUJERISg0+mEW265Rdi1a1d9b2FAY6gkIqJmdfz4caF3796CSqUSAAinTp1yW6hs7IPftGnThA4dOggKhUKIiYkR7r//fuHSpUvWx7/44otCfHy8IJPJrB/Utm3bJqSkpAgKhULo1q2b8O2337otVKanpwtz5swRoqOjhbCwMGHixIl2H9xqczVUvvfee0L37t0FjUYjhIeHC7feequwf/9+m+sZKomIyF1kgiAI7h79JCIiIltjx45FcXExNm7c6PBjVq9ejccee8y6n6c7ffvttxgwYACKiooa3COOiIioMfYrX4mIiMhrlJSUICwsDM8884zb2rz66qtx++23u609IiIKbCzUQ0RE5KUyMjJw0003AYBbRxP/7//+D9XV1QDQ6NYCREREjeH0VyIiIiIiInIZp78SERERERGRyxgqiYiIiIiIyGUMlUREREREROQyhkoiIiIiIiJyGUMlERERERERuYyhkoiIiIiIiFzGUElEREREREQuY6gkIiIiIiIilzFUEhERERERkcv+HzudIOxnlYGYAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "\n", - "gaze_color = \"royalblue\"\n", - "gyro_color = \"darkorange\"\n", - "\n", - "imu = recording.imu\n", - "saccades = recording.saccades\n", - "\n", - "# Create a figure\n", - "fig, ax = plt.subplots(figsize=(10, 5))\n", - "ax2 = ax.twinx()\n", - "ax.yaxis.label.set_color(gaze_color)\n", - "ax2.yaxis.label.set_color(gyro_color)\n", - "\n", - "# Visualize the 2nd saccade\n", - "saccade = saccades.data.iloc[1]\n", - "ax.axvspan(\n", - " saccade[\"start timestamp [ns]\"], saccade[\"end timestamp [ns]\"], color=\"lightgray\"\n", - ")\n", - "ax.text(\n", - " (saccade[\"start timestamp [ns]\"] + saccade[\"end timestamp [ns]\"]) / 2,\n", - " 1050,\n", - " \"Saccade\",\n", - " horizontalalignment=\"center\",\n", - ")\n", - "\n", - "# Visualize gaze x and pupil diameter left\n", - "sns.scatterplot(\n", - " ax=ax,\n", - " data=gaze.data.head(100),\n", - " x=\"timestamp [ns]\",\n", - " y=\"gaze x [px]\",\n", - " color=gaze_color,\n", - ")\n", - "sns.scatterplot(\n", - " ax=ax2,\n", - " data=imu.data.head(60),\n", - " x=\"timestamp [ns]\",\n", - " y=\"gyro x [deg/s]\",\n", - " color=gyro_color,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It's apparent that at the beginning of the recording, there are some missing data points in both the `gaze` and `imu` streams. This is presumably due to the time it takes for the sensors to start up and stabilize. We will show how to handle missing data using resampling in the next tutorial. For now, it's important to be aware of these gaps and that it will require great caution to assume the data is continuously and equally sampled.\n", - "\n", - "PyNeon also calculates the effective (as opposed to the nominal) sampling frequency of each stream by dividing the number of samples by the duration of the recording." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Gaze: nominal sampling frequency = 200, effective sampling frequency = 197.8078038925275\n", - "IMU: nominal sampling frequency = 110, effective sampling frequency = 115.35532450871617\n" - ] - } - ], - "source": [ - "print(\n", - " f\"Gaze: nominal sampling frequency = {gaze.sampling_freq_nominal}, \"\n", - " f\"effective sampling frequency = {gaze.sampling_freq_effective}\"\n", - ")\n", - "print(\n", - " f\"IMU: nominal sampling frequency = {recording.imu.sampling_freq_nominal}, \"\n", - " f\"effective sampling frequency = {recording.imu.sampling_freq_effective}\"\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Visualizing gaze heatmap\n", - "Finally, we will show how to plot a heatmap of the gaze/fixation data." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0, 0.5, 'Scene camera y [px]')" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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W2+J6667bsTWYatWrRK7du0Sr732mli0aNEF01pN7+abbxZz585Nt6N78sknRVVVlfiHf/iH9DYX+5wNDg6KN954Q7zxxhsCgPjf//t/izfeeCPdAWIi5kdRFFFdXS1uuukm8c4774jHHntMyLJ83rYJG2vOotGouPbaa8W8efPE/v37s/4mZHYp4Jxlv8709F01hOCc6efsySefFGVlZeInP/mJOHr0qPj+978vSkpKxKuvvprex1T+HWXhXIDvf//7ora2VhiNRrF+/XrR1tY23UOaFgBG/O8Xv/hFeptQKCS++MUvilmzZglZlsXHPvYxcfbs2az9dHV1iQ996EPCYrGIqqoq8bWvfU3EYrEpfjbTR184c85y/eEPfxDLly8XJpNJLF68WPzkJz/Juj2ZTIr77rtPVFdXC5PJJN7//veL9vb2rG36+vrEJz7xCWGz2YTdbhef/vSnxeDg4FQ+jSkTCATEl7/8ZVFbWyvMZrNobGwU//iP/5hVwFzsc/aXv/xlxN9fN998sxBi4ubnzTffFO95z3uEyWQSc+fOFVu3bp2qpzjhxpqzzs7OUf8m/OUvf0nvg3OW/TrTG6lw5pzlztnPfvYzsXDhQmE2m8Vll10mnn766ax9TOXfUUmIjKWliIiIiIhoRMw4ExEREREVgIUzEREREVEBWDgTERERERWAhTMRERERUQFYOBMRERERFYCFMxERERFRAVg4ExEREREVgIUzEREREVEBWDgTEdGMd8stt0CSJEiShKeffnpC911fX5/et6IoE7pvIrqwsHAmoguSz+fDbbfdhtraWphMJtTU1GDz5s3YsWPHdA+N3qWrr74aZ8+exYc+9KEJ3e/u3bvxn//5nxO6TyK6MJVO9wCIiCbDDTfcgGg0il/+8pdobGyEx+PBtm3b0NfXN91Du2DEYjGUlZVN2eMNfwCaaC6XCxUVFRO+XyK68PCIMxFdcBRFwauvvoqHH34Y733ve1FXV4f169fj3nvvxbXXXpu13ec//3lUV1fDbDZj+fLlePbZZ9O3v/baa7jiiitgsVgwf/583HHHHVBVNX17fX09HnzwQXzmM59BeXk5amtr8ZOf/CRrLCdPnsTf/M3fwOl0oqKiAtdddx26urrGHP+BAwfwkY98BHa7HeXl5bjiiitw/PhxAKmjox/4wAdQVVUFh8OBq666Cvv2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y3Hffffhc5/7HH7wgx+kt/vP//xPrFu3Dp/4xCewdOlS/MM//AMSiQSA1JHf7du348iRI7jiiiuwatUq3H///ZgzZ07B45BlGa+88gpqa2tx/fXXY8mSJbj11lsRDodht9tHvE9lZSX+/Oc/IxgM4qqrrsKaNWvw05/+NB2z+NnPfoaBgQGsXr0aN910E+644w643e5xzFbK5s2b8eyzz+LFF1/EunXr0NzcjO9+97uoq6sb836f//zncf311+PjH/84NmzYgL6+Pnzxi18cdXshBG655RasX78+/SFk8+bNuO222/DJT34SwWCw6LFv3boVW7duxWWXXYbXXnsNv//971FVVTUpj0VEFzdJCCGmexBERERjueWWW6AoStZy211dXWhoaMAbb7yBlStXjmv/L7/8Mt773vdiYGAATqdzXPsiogsXjzgTEdF54dlnn4XNZstapGYiLFu2bMKX8SaiCxOPOBMR0Yzn9XrTrfNmz54Nq9U6YUecT5w4kT4Zs7GxccyTIYno4sbCmYiIiIioAPxYTURERERUABbOREREREQFYOFMRERERFQAFs5ERERERAVg4UxEREREVAAWzkREREREBWDhTERERERUABbOREREREQF+P/ElHOZehPZvAAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "x_edges = np.linspace(0, 1600, 160)\n", - "y_edges = np.linspace(0, 1200, 120)\n", - "\n", - "gaze_x = gaze.data[\"gaze x [px]\"]\n", - "gaze_y = gaze.data[\"gaze y [px]\"]\n", - "gaze_heatmap, _, _ = np.histogram2d(gaze_x, gaze_y, bins=(x_edges, y_edges))\n", - "gaze_heatmap = gaussian_filter(gaze_heatmap, sigma=3)\n", - "\n", - "fixations = recording.fixations\n", - "fix_x = fixations.data[\"fixation x [px]\"]\n", - "fix_y = fixations.data[\"fixation y [px]\"]\n", - "\n", - "# Plot a heatmap and scatter plot fixations on top\n", - "fig, ax = plt.subplots(figsize=(8, 6))\n", - "ax.imshow(gaze_heatmap.T, cmap=\"inferno\", extent=[0, 1600, 0, 1200], origin=\"lower\")\n", - "ax.scatter(fix_x, fix_y, color=\"white\", s=10, alpha=0.3)\n", - "ax.set_aspect(\"equal\", \"box\")\n", - "ax.set_xlabel(\"Scene camera x [px]\")\n", - "ax.set_ylabel(\"Scene camera y [px]\")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyneon", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/_sources/tutorials/resample_and_concat.ipynb.txt b/docs/_sources/tutorials/resample_and_concat.ipynb.txt deleted file mode 100644 index bbee9ff..0000000 --- a/docs/_sources/tutorials/resample_and_concat.ipynb.txt +++ /dev/null @@ -1,319 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Resample data and concatenate channels\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, we show how to resample different continuous data streams to be evenly sampled. We firstly import the necessary libraries and define our recording as well as output directory" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from pyneon import get_sample_data, NeonRecording\n", - "\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "\n", - "recording_dir = get_sample_data(\"OfficeWalk\") / \"Timeseries Data\" / \"walk1-e116e606\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, we will save local instances of the unprocessed data for comparison" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "recording = NeonRecording(recording_dir)\n", - "raw_gaze_data = recording.gaze.data\n", - "raw_eye_states_data = recording.eye_states.data\n", - "raw_imu_data = recording.imu.data" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For imu, the effective rate is actually higher.\n", - "We can further explore this behaviour by plotting the distances between subsequent datapoints as a histogram. Dataframes can be operated upon with regular pandas logic" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.010090909090909091, 100, 'IMU nominal sampling rate')" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1EAAAK9CAYAAADFdObnAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACMk0lEQVR4nOzdd3hUVf7H8c+k9wYhISH0XgSkCSIdASkiKlgpCrIaRGWxoKuCq7KuUiyjiAqorAqi4q4IiiiLBaVIld4hQEIgJCQhde7vD37MOkwCMxC4k8z79Tw8ZM4958537kyS+eTce8ZiGIYhAAAAAIBLfMwuAAAAAADKE0IUAAAAALiBEAUAAAAAbiBEAQAAAIAbCFEAAAAA4AZCFAAAAAC4gRAFAAAAAG4gRAEAAACAGwhRAAAAAOAGQhTgopo1a2r48OFml1Hhvfzyy6pdu7Z8fX3VokULt8fv27dPFotFc+bMKfPaytq5r6nly5fLYrFo+fLlDv0+/PBDNWzYUP7+/oqKirK3X+qx8iZnXxevvPKK2aV4rS5duqhp06Zml1GhdenSRV26dDG7jMtq4sSJslgsZpcBEKLgnebMmSOLxaI1a9aUuL2sftl//fXXmjhx4iXvx1t8++23euyxx3Tttddq9uzZevHFF0vt+9FHH2n69OlXrjiTbNu2TcOHD1edOnX0zjvvaObMmZLcO1a4PLZs2aKJEydq3759ZpeCcu6XX37RxIkTdfLkSVPuPzc3VxMnTnT6A05FY/ZxRsXiZ3YBQHmxfft2+fi493eHr7/+WlarlSDlou+//14+Pj567733FBAQcN6+H330kTZv3qyHH37Yob1GjRo6ffq0/P39L2Oll0enTp10+vRph8e+fPly2Ww2vfrqq6pbt6693Z1jhctjy5YtmjRpkrp06aKaNWuaXQ7KsV9++UWTJk3S8OHDHWabr5Tc3FxNmjRJkjx+Jutvf/ubnnjiiYsaa/ZxRsXCTBTgosDAwHL3xjwnJ8fsEtySlpam4ODgSwoFFotFQUFB8vX1LcPKrgwfHx8FBQU5hPW0tDRJcvqFXxbH6ly5ubllti8AuBz8/PwUFBRkdhkAIQpw1bnXrxQWFmrSpEmqV6+egoKCVKlSJXXs2FFLly6VJA0fPlxWq1XSmTf2Z/+dlZOTo7/+9a9KSkpSYGCgGjRooFdeeUWGYTjc7+nTpzV27FhVrlxZ4eHhGjBggFJSUmSxWBxmuM6eJ75lyxbdcccdio6OVseOHSVJGzdu1PDhw1W7dm0FBQUpPj5e99xzj44fP+5wX2f3sWPHDt11112KjIxUbGysnn76aRmGoYMHD+rGG29URESE4uPjNWXKFJeOXVFRkf7+97+rTp06CgwMVM2aNfXkk08qPz/f3sdisWj27NnKycmxH6vSrmvq0qWLFi1apP3799v7np0JKOmaqOHDhyssLEwHDhxQv379FBYWpsTERPvzs2nTJnXr1k2hoaGqUaOGPvroI6f7PHnypB5++GH781W3bl299NJLstlsF3z8hmHo+eefV7Vq1RQSEqKuXbvqjz/+cOp37jVRNWvW1LPPPitJio2NtT/nFzpWc+fOVatWrRQcHKyYmBjddtttOnjwoNMxbNq0qdauXatOnTopJCRETz75pCQpPz9fzz77rOrWravAwEAlJSXpsccec3i+pDPP2ZgxY7Rw4UI1bdpUgYGBatKkiZYsWeL02FJSUnTvvfcqISFBgYGBqlWrlu6//34VFBS4fYw/+eQTtWrVSuHh4YqIiFCzZs306quvXvB5OGvatGmqUaOGgoOD1blzZ23evNmpz7Zt23TLLbcoJiZGQUFBat26tf7973/bt8+ZM0e33nqrJKlr167252H58uUaN26cKlWq5PC9/OCDD8pisei1116zt6Wmpspiseitt96yt7l67CX3nuctW7aoa9euCgkJUWJiov75z3+6dKyWLl2qjh07KioqSmFhYWrQoIH9dXL2OFgsFqdTGku7vk+S1q5dqw4dOig4OFi1atXSjBkznPq8/vrratKkiUJCQhQdHa3WrVs7fV+mpKTonnvuUVxcnP21N2vWLKd9HTp0SAMHDlRoaKiqVKmiRx55RN98841TfaVd91rSdUZl+T0yceJEPfroo5KkWrVq2V9LFzpNdObMmapTp46Cg4PVtm1b/fjjj059CgoK9Mwzz6hVq1aKjIxUaGiorrvuOv3www/2Pvv27VNsbKwkadKkSfb7P/v7xdXfHyU5+zqYN2+ennzyScXHxys0NFQDBgxweq1K0qeffmp/TVeuXFl33XWXUlJSHPqUdE1UWRznC73WgXNxOh+8WmZmptLT053aCwsLLzh24sSJmjx5skaOHKm2bdsqKytLa9as0e+//66ePXtq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qXHjxurSpYtatWqlmJgYrVmzRgsWLNCYMWPsfc6+KRg7dqx69eolX19f3Xbbberfv7+6du2qp556Svv27VPz5s317bff6ssvv9TDDz9sf2PSqlUr3XzzzZo+fbqOHz9uX+L87F9uXfnrZUREhH1Z78LCQiUmJurbb7/V3r17L8NRcda8eXMNGzZMM2fO1MmTJ9W5c2etWrVK77//vgYOHKiuXbte1H5btWqlefPmady4cWrTpo3CwsLUv3//Mq7+jEcffVT//ve/1a9fPw0fPlytWrVSTk6ONm3apAULFmjfvn1O14udFRsbq/Hjx2vy5Mnq16+fbrjhBq1bt06LFy8udczFqlOnjp5//nlNmDBB+/bt08CBAxUeHq69e/fqiy++0H333afx48efdx9333235s+fr7/85S/64YcfdO2116q4uFjbtm3T/Pnz9c0335R4HeH5vPjii/r222/VuXNn+5LQR44c0aeffqqffvpJUVFRLh/jkSNH6sSJE+rWrZuqVaum/fv36/XXX1eLFi0cZjpLU7duXXXs2FH333+/8vPzNX36dFWqVMnhNEKr1aqOHTuqWbNmGjVqlGrXrq3U1FStXLlShw4d0oYNGySdeZPl6+url156SZmZmQoMDFS3bt1UpUoVSWcC0yeffKJmzZrZZ2yuvvpqhYaGaseOHQ7XQ7lz7MvieXbFc889pxUrVqhv376qUaOG0tLS9Oabb6patWr2z6Br0qSJrrnmGk2YMEEnTpxQTEyMPvnkk1L/sJCQkKCXXnpJ+/btU/369TVv3jytX79eM2fOtF/Ldf311ys+Pl7XXnut4uLitHXrVr3xxhvq27evfeb+H//4h3744Qe1a9dOo0aNUuPGjXXixAn9/vvv+u677+xvikeNGqU33nhDQ4cO1dq1a1W1alV9+OGH9tDwZyNHjtSCBQvUu3dvDR48WLt379bcuXMdFitw53lyx9nfFU899ZRuu+02+fv7q3///k7Xj0lnZkmff/55jR49Wt26ddOQIUO0d+9ezZ492+maqH79+unzzz/XTTfdpL59+2rv3r2aMWOGGjdurOzsbHu/4OBgNW7cWPPmzVP9+vUVExOjpk2bqmnTpmXy+yMmJkYdO3bUiBEjlJqaqunTp6tu3boaNWqU/TG99NJLGjFihDp37qzbb7/dvsR5zZo19cgjj7h1f6Up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TKf2kydPKjIy8rLWV55xTRQAAABQAfXu3VsFBQUqLCxUr169SuzToEED/f77707tv//+u+rXd2+pdW/CTBQAAABQAfn6+mrr1q32r0ty//3364033tDYsWM1cuRIBQYGatGiRfr444/1n//850qWW64QogAAAIDzcPfDbz1JRETEebfXrl1bK1as0FNPPaUePXqooKBADRs21KeffqrevXtfoSrLH68NUVarVVarVcXFxWaXAgAAAFy0OXPmlPh1SRYuXOjU1qZNG3377bdlW1QF57XXRCUnJ2vLli1avXq12aUAAAAAKEe8NkQBAAAAwMXw2tP5Kprbb79dGRkZio6OvqxjAAAAAG9nMQzDMLsIM2VlZSkyMlKZmZkXvPDO0w35uPOl7yQ8/pKGz+s379JrAAAAuMLy8vK0d+9e1apVS0FBQWaXg8vofM+1q9mA0/kAAAAAwA2EKAAAAABwAyEKAAAAANzAwhIVRMOGDbX7wC4FRwWoz5Q2Lo1Z/NfVOn2ywK0xAAAAgLdjJqqCyM7OVtHpYhXlu/7hwUX5xW6PAQAAALwdM1EAAADA+fww+creX9cJV/b+4DZmogAAAIBybPjw4bJYLE7/evfubVpNXbp00cMPP+z2uOHDh2vgwIFlXk9ZYyYKAAAAKOd69+6t2bNnO7QFBgaaVE3Fx0wUAAAAUM4FBgYqPj7e4V90dLQk6Z577lG/fv0c+hcWFqpKlSp67733JEk2m02TJ09WrVq1FBwcrObNm2vBggXnvc8333xT9erVU1BQkOLi4nTLLbdIOjOb9N///levvvqqfVZs3759Ki4u1r333mu/jwYNGujVV1+172/ixIl6//339eWXX9rHLV++XJJ08OBBDR48WFFRUYqJidGNN96offv22ccuX75cbdu2VWhoqKKionTttddq//79l3pYS8VMFAAAAFCBjRw5Up06ddKRI0dUtWpVSdJXX32l3NxcDRkyRJI0efJkzZ07VzNmzFC9evW0YsUK3XXXXYqNjVXnzp2d9rlmzRqNHTtWH374oTp06KATJ07oxx9/lCS9+uqr2rFjh5o2barnnntOkhQbGyubzaZq1arp008/VaVKlfTLL7/ovvvuU9WqVTV48GCNHz9eW7duVVZWln1WLSYmRoWFherVq5fat2+vH3/8UX5+fnr++efVu3dvbdy4UT4+Pho4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XEeOHLH/GzRokBo0aKC4uDhJ0q233qq0tDQtXrxYa9eu1dVXX63u3bvrxIkTl/+BepAKEaJ27typbdu2qU+fPmaXAgAAAFxRu3btkmEYatCggUN75cqVFRYWprCwMD3++OOSpIcfflhdu3ZVzZo11a1bNz3//POaP3++fUxMTIzi4+MVHx+vjz/+WN9//73+/e9/Kzg4WD/99JNWrVqlTz/9VK1bt1a9evX0yiuvKCoqSgsWLLiij9lspoeoFStWqH///kpISJDFYtHChQud+litVtWsWVNBQUFq166dVq1a5bB9/Pjxmjx58hWq2DNNnTpVmxfs0/ZFh1wes33RIbfHAAAAoHxYtWqV1q9fryZNmig/P1+S9N1336l79+5KTExUeHi47r77bh0/ftxp4YnFixfriSee0Lx581S/fn1J0oYNG5Sdna1KlSrZw1lYWJj27t2r3bt3X/HHZybTQ1ROTo6aN28uq9Va4vZ58+Zp3LhxevbZZ/X777+refPm6tWrl9LS0iRJX375perXr29/cr3V1KlTteXzA9qx2PVAtGPxIbfHAAAAwLPUrVtXFotF27dvd2ivXbu26tatq+DgYEnSvn371K9fP1111VX67LPPtHbtWvt78IKCAvu4LVu26LbbbtM//vEPXX/99fb27OxsVa1aVevXr3f4t337dj366KNX4JF6DtNXFOjTp895T8ObOnWqRo0apREjRkiSZsyYoUWLFmnWrFl64okn9Ouvv+qTTz7Rp59+quzsbBUWFioiIkLPPPNMifvLz8+3J3FJysrKKtsHBAAAAFxBlSpVUs+ePfXGG2/owQcfLPW6qLVr18pms2nKlCny8Tkzl/LnU/kkKT09Xf3799fNN9+sRx55xGHb1VdfraNHj8rPz081a9a8LI+lvDB9Jup8CgoKtHbtWvXo0cPe5uPjox49emjlypWSpMmTJ+vgwYPat2+fXnnlFY0aNarUAHW2f2RkpP1fUlLSZX8cAAAAwOX05ptvqqioSK1bt9a8efO0detWbd++XXPnztW2bdvk6+urunXrqrCwUK+//rr27NmjDz/8UDNmzHDYz80336yQkBBNnDhRR48etf8rLi5Wjx491L59ew0cOFDffvut9u3bp19++UVPPfWU1qxZY9IjN4fpM1Hnk56eruLiYvtqIGfFxcVp27ZtF7XPCRMmaNy4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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Get the data points\n", - "gaze_times = raw_gaze_data[\"time [s]\"].values\n", - "eye_state_times = raw_eye_states_data[\"time [s]\"].values\n", - "imu_times = raw_imu_data[\"time [s]\"].values\n", - "\n", - "# Calculate the distances between subsequent data points\n", - "gaze_diffs = np.diff(gaze_times)\n", - "eye_state_diffs = np.diff(eye_state_times)\n", - "imu_diffs = np.diff(imu_times)\n", - "\n", - "# Plot the differences as a histogram\n", - "plt.figure(figsize=(10, 8))\n", - "plt.hist(imu_diffs, bins=20, alpha=0.5, label=\"IMU\")\n", - "plt.hist(eye_state_diffs, bins=20, alpha=0.5, label=\"Eye states\")\n", - "plt.hist(gaze_diffs, bins=10, alpha=0.8, label=\"Gaze\")\n", - "# create a logaritmic scale on the y-axis\n", - "plt.yscale(\"log\")\n", - "plt.legend()\n", - "plt.title(\"Histogram of time differences between subsequent data points\")\n", - "plt.xlabel(\"Time difference [s]\")\n", - "plt.ylabel(\"Count\")\n", - "\n", - "# draw a vertical line at the nominal sampling rate, add text\n", - "plt.axvline(\n", - " 1 / recording.gaze.sampling_freq_nominal, color=\"k\", linestyle=\"dashed\", linewidth=2\n", - ")\n", - "plt.text(\n", - " 1 / recording.gaze.sampling_freq_nominal,\n", - " 1,\n", - " \"Gaze nominal sampling rate\",\n", - " rotation=90,\n", - " verticalalignment=\"bottom\",\n", - " horizontalalignment=\"right\",\n", - ")\n", - "plt.axvline(\n", - " 1 / recording.imu.sampling_freq_nominal, color=\"k\", linestyle=\"dashed\", linewidth=2\n", - ")\n", - "plt.text(\n", - " 1 / recording.imu.sampling_freq_nominal + 0.001,\n", - " 100,\n", - " \"IMU nominal sampling rate\",\n", - " rotation=90,\n", - " verticalalignment=\"bottom\",\n", - " horizontalalignment=\"left\",\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now, we concat the channels with a sampling frequency of 100 Hz. While this downsamples both imu and gaze, it will put them on a common reference frame. Under the hood, continuous values are linearly interpolated, whereas boolean values follow the nearest neighbour." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Concatenating streams:\n", - "\tGaze\n", - "\t3D eye states\n", - "\tIMU\n", - "Using customized sampling rate: 100 Hz ([])\n", - "Using latest start timestamp: 1725032224878547732 (['imu'])\n", - "Using earliest last timestamp: 1725032319533909732 (['imu'])\n" - ] - } - ], - "source": [ - "concat_df = recording.concat_streams([\"gaze\", \"eye_states\", \"imu\"], sampling_freq=100)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We show an exemplary sampling of eye, imu and concatenated data below. It can be seen that imu data has subsequent missing values which can in turn be interpolated" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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1D9embkuWbIEN27cQIsWLTBgwACMGDEC7u7uJe4/IiIiIinxklgiIiJSjOhoYM2agrvFPnwDCm/vgmbdQ1d/SiohIaHY5RMmTMCECRMAFHzG3bp16x471ty5czF37lyDZampqWWah5OTE+bNm4d58+aVut7ly5cREhKC1q1bF3ksMDAQiYmJZaoHAPPnzy/18cmTJ2Py5MkGy8LDw3Hy5EmDZeKR2/vGxsYiNja2yHj9+vVDv379iq312muv4bXXXivLtAEUNNuK295SzLV58+Y4ePCgwbJevXqVeW5ERERElcGGHRERESlKdDQQFVVwN9isrILPrAsNNd6ZdUqWm5uLCxcu4IsvvsDHH39s6ukQERERkUzYsCMiIiLFsbQE/ntFKT1k+PDhWLlyJXr06FHkclgiIiIiUg827IiIiIjMREJCQomX7xIRERGRevCmE0RERERERERERArChh0REREREREREZGCsGFHRERERERERESkIGzYERERERERERERKQgbdkRERERERERERArChh0REREREREREZGCsGFHREREREZ34cIFaDQapKamlut5AQEBmDt3rixzIiIiIlIKNuyIiIiIAFy5cgVvv/02AgICYGtrCx8fH3Tv3h07d+409dQMfPjhh3jiiSdMUruiTTZTSkhIgKurq6mnQURERFQuVqaeABEREdGjtDotUjJSkJWTBU8nT4TWDYWlhaVs9S5cuID27dvD1dUVs2bNQkhICPLz87F161YMGzYMf/31l2y1iYiIiIgexTPsiIiISFES0xLhF+eHzss6o19iP3Re1hl+cX5ITEuUreZbb70FjUaDAwcOoGfPnggKCkLjxo0xZswY/P777/r1MjIyEBUVBUdHRzg7O6N37964evWq/vHCs9+WL18OPz8/uLi44OWXX0ZOTo5+HZ1Oh5kzZ6J+/fqwtbVF3bp18cknn+gfHz9+PIKCguDg4ICAgABMnjwZ+fn5AArOFps6dSqOHTsGjUYDjUaDhIQEAMDNmzcxYsQI1K5dG87Oznj66adx7Nixcs1ty5Yt6NChA1xdXVGzZk1069YN586d0z/u7+8PAGjevDk0Gg06deqkf+ybb75Bw4YNYWdnh+DgYHz55ZcG2/jAgQNo3rw57Ozs0KpVKxw9evSx++XatWvo3r077O3tUa9ePaxevbrIOnPmzEFISAiq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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "start_time = 5\n", - "end_time = 5.2\n", - "\n", - "raw_gaze_interval = raw_gaze_data[\n", - " (raw_gaze_data[\"time [s]\"] >= start_time) & (raw_gaze_data[\"time [s]\"] <= end_time)\n", - "]\n", - "raw_eye_states_interval = raw_eye_states_data[\n", - " (raw_eye_states_data[\"time [s]\"] > start_time)\n", - " & (raw_eye_states_data[\"time [s]\"] <= end_time)\n", - "]\n", - "raw_imu_interval = raw_imu_data[\n", - " (raw_imu_data[\"time [s]\"] >= start_time) & (raw_imu_data[\"time [s]\"] <= end_time)\n", - "]\n", - "concat_interval = concat_df[\n", - " (concat_df[\"time [s]\"] >= start_time) & (concat_df[\"time [s]\"] <= end_time)\n", - "]\n", - "\n", - "# plot all data in the same scatter plot\n", - "plt.figure(figsize=(16, 2))\n", - "plt.scatter(\n", - " raw_gaze_interval[\"time [s]\"],\n", - " np.zeros_like(raw_gaze_interval[\"time [s]\"]) + 0.5,\n", - " label=\"Raw gaze data\",\n", - " color=\"red\",\n", - ")\n", - "plt.scatter(\n", - " raw_imu_interval[\"time [s]\"],\n", - " np.zeros_like(raw_imu_interval[\"time [s]\"]),\n", - " label=\"Raw eye states data\",\n", - " color=\"blue\",\n", - ")\n", - "plt.scatter(\n", - " concat_interval[\"time [s]\"],\n", - " np.zeros_like(concat_interval[\"time [s]\"]) - 1,\n", - " label=\"Concatenated data\",\n", - " color=\"green\",\n", - ")\n", - "# set x-ticks with higher frequency and add gridlines\n", - "plt.xticks(np.arange(start_time, end_time, 0.01), labels=None)\n", - "# remove x labels\n", - "# remove y-ticks\n", - "plt.yticks([])\n", - "plt.grid()\n", - "plt.legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A linear interpolation allows us to estimate missing values. In the end, the concatenated dataframe combines all continuous data into one central location" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABSgAAAESCAYAAAD+PztQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB5XklEQVR4nO3dd1hT59sH8G/CCCB77xFEcQ9QxK0QcNQ631pr6yjVDrVuqx1Wu9QuR5dd1rY/qaNV26pVIop1ICpq3VQZispQ2SIQkvP+kXo0AgpCDMj3c125IM9zn5P7yDGG22dIBEEQQERERERERERERGQAUkMnQERERERERERERI0XC5RERERERERERERkMCxQEhERERERERERkcGwQElEREREREREREQGwwIlERERERERERERGQwLlERERERERERERGQwLFASERERERERERGRwRgbOoH6SqPR4OrVq7CysoJEIjF0OkRERERERERERA2KIAgoLCyEu7s7pNKqx0myQFmFq1evwsvLy9BpEBERERERERERNWjp6enw9PSssp8FyipYWVkB0P4BWltbGzgbIiIiIiIiIiKihqWgoABeXl5ina0qLFBW4fa0bmtraxYoiYiIiIiIiIiIHtKDlk/kJjlERERERERERERkMCxQEhERERERERERkcGwQElEREREREREREQGwzUoiahBUKuBvXuBjAzAzQ3o0QMwMjJ0VkRERERE1Fio1WqoVCpDp0FUr5iYmMCoDn45Z4GSiOq9jRuBqVOBy5fvtHl6AsuXA8OGGS4vIiIiIiJ6/AmCgMzMTOTl5Rk6FaJ6ydbWFq6urg/cCOd+WKAkonpt40ZgxAhAEHTbr1zRtv/6K4uURERERESkP7eLk87OzrCwsKhVEYbocSIIAoqLi5GdnQ0AcHNze+hzsUBJRPWWWq0dOXlvcRLQtkkkwLRpwODBnO5NRERERER1T61Wi8VJBwcHQ6dDVO+Ym5sDALKzs+Hs7PzQ0725SQ4R1Vt79+pO676XIADp6do4IiIiIiKiunZ7zUkLCwsDZ0JUf93++1GbNVpZoCSieisjo27jiIiIiIiIHgandRNVrS7+frBASUT1VnWXr6jFMhdEREREREREZGAsUBJRvdWjh3a37qr+M0YiAby8tHFERERERERE1DCxQElE9ZaREbB8ufb7e4uUt58vW8YN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y5drv793qcjbz5ctY3GSyND0UqDMzMyEs7OzTpuxsTHs7e2RmZmp1/NmZmbCxcVFJ+b28/u99qJFi2BjYyM+vLy8HjpPIiIiIiIiIqofhg0Dfv0V8PDQbff01LYPG2aYvIjojhoVKOfOnQuJRHLfR02mUdcn8+bNQ35+vvhIT083dEpEREREREREVAeGDQPS0oDdu4HoaO3X1FQWJ4nqixrt4j1z5kyMGzfuvjFyuRyurq7Izs7WaS8vL0dOTg5cXV1rnORt1Tmvq6srsrKydGJuP7/fa8tkMshksofOjYiIiIiIiIjqLyMjoHdvQ2dBRJWpUYHSyckJTk5OD4wLDQ1FXl4eEhMTERQUBADYtWsXNBoNQkJCHi7Tap43NDQUb7zxBlQqFUxMTAAASqUSzZs3h52d3UO/NhEREREREREREdU9vaxB2aJFC/Tr1w8TJkzAoUOHsH//fkyePBlPP/20uIP3lStXEBgYiEOHDonHZWZm4vjx47hw4QIA4OTJkzh+/DhycnKqfd5nnnkGpqamiIqKwunTp7Fu3TosX74cM2bM0MelEhERERERERERUS3UaARlTaxZswaTJ09GWFgYpFIphg8fjhUrVoj9KpUKSUlJKC4uFttWrlyJhQsXis979uwJAPjhhx/EqeUPOq+NjQ1iYmIwadIkBAUFwdHREfPnz8fEiRNrlL8gCADA3byJiIiIiIiIiIgewu262u06W1UkwoMiGqnLly9zJ28iIiIiIiIiIqJaSk9Ph6enZ5X9LFBWQaPR4OrVq7CysoJEIjF0OnWuoKAAXl5eSE9Ph7W1taHToQaA9wzVFO8ZqineM1RTvGeopnjPUE3xnqGa4j1DNdEY7hdBEFBYWAh3d3dIpVWvNKm3Kd4NnVQqvW9l93FhbW392P4lIP3gPUM1xXuGaor3DNUU7xmqKd4zVFO8Z6imeM9QTTzu94uNjc0DY/SySQ4RERERERERERFRdbBASURERERERERERAbDAmUjJZPJ8Pbbb0Mmkxk6FWogeM9QTfGeoZriPUM1xXuGaor3DNUU7xmqKd4zVBO8X+7gJjlERERERERERERkMBxBSURERERERERERAbDAiUREREREREREREZDAuUREREREREREREZDAsUBIREREREREREZHBsEBJREREREREREREBsMCZQO0YMECSCQSnUdgYOB9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oejjnnnQOQWB7zMNmT7uGUEQBLVaLXh7ewuvvfZahdfk+0zDVtN7ZvHixYKpqanw66+/6vy7U1hYqBPTWGszLFA2QCNHjhTc3NwEU1NTwcPDQxg5cqRw4cIFsb9Xr17C2LFjdY5Zv3690KxZM8HU1FRo1aqVsHXrVp1+jUYjvPXWW4KLi4sgk8mEsLAwISkpSSfmxo0bwqhRowRLS0vB2tpaGD9+vM5fJKqf6vp+SU1NFQBU+ti9e7cgCIKQmJgohISECDY2NoKZmZnQokUL4YMPPtApRlH9Vdf3THFxsRARESE4OTkJJiYmgo+PjzBhwgSdooEg8D2mIdPHv0uCIAhff/21YG5uLuTl5VXo4/tMw1bTe6aqf3t69eqlc97PPvtM8Pb2FkxNTYXOnTsLBw8e1Om/deuW8Morrwh2dnaChYWFMHToUCEjI0Ofl0p1RB/3TFWfZ3744QdBEATh0qVLQs+ePQV7e3tBJpMJTZs2FWbPni3k5+c/oqum2tDHPfOgcwoC32caMn3927Rjxw4BQIXfrwWB7zMNXU3vGR8fn0rvmbfffluMacy1GYkgCII+R2gSERERERERERERVYVrUBIREREREREREZHBsEBJREREREREREREBsMCJRERERERERERERkMC5RERERERERERERkMCxQEhERERERERERkcGwQElEREREREREREQGwwIlERERERERERERGQwLlERERERERERERGQwLFASERERERERERGRwbBASURERERERERERAbDAiUREREREREREREZzP8D5Rg+8WJUN5kAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# plot imu data and interpolated data in same plot\n", - "\n", - "\n", - "plt.figure(figsize=(16, 3))\n", - "plt.scatter(\n", - " raw_imu_interval[\"time [s]\"],\n", - " raw_imu_interval[\"acceleration x [g]\"],\n", - " label=\"Raw imu data\",\n", - " color=\"blue\",\n", - ")\n", - "plt.plot(\n", - " concat_interval[\"time [s]\"],\n", - " concat_interval[\"acceleration x [g]\"],\n", - " label=\"Interpolated imu data\",\n", - " color=\"green\",\n", - " linestyle=\"dashed\",\n", - ")\n", - "plt.legend()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pyneon", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/docs/_static/basic.css b/docs/_static/basic.css deleted file mode 100644 index 2af6139..0000000 --- a/docs/_static/basic.css +++ /dev/null @@ -1,925 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- 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: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -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/docs/_static/doctools.js b/docs/_static/doctools.js deleted file mode 100644 index 4d67807..0000000 --- a/docs/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"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/docs/_static/documentation_options.js b/docs/_static/documentation_options.js deleted file mode 100644 index 13d90ff..0000000 --- a/docs/_static/documentation_options.js +++ /dev/null @@ -1,13 +0,0 @@ -const DOCUMENTATION_OPTIONS = { - VERSION: '0.1.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/docs/_static/file.png b/docs/_static/file.png deleted file mode 100644 index a858a41..0000000 Binary files a/docs/_static/file.png and /dev/null differ diff --git a/docs/_static/language_data.js b/docs/_static/language_data.js deleted file mode 100644 index 367b8ed..0000000 --- a/docs/_static/language_data.js +++ /dev/null @@ -1,199 +0,0 @@ -/* - * language_data.js - * ~~~~~~~~~~~~~~~~ - * - * This script contains the language-specific data used by searchtools.js, - * namely the list of stopwords, stemmer, scorer and splitter. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -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/docs/_static/minus.png b/docs/_static/minus.png deleted file mode 100644 index d96755f..0000000 Binary files a/docs/_static/minus.png and /dev/null differ diff --git a/docs/_static/nbsphinx-broken-thumbnail.svg b/docs/_static/nbsphinx-broken-thumbnail.svg deleted file mode 100644 index 4919ca8..0000000 --- a/docs/_static/nbsphinx-broken-thumbnail.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/docs/_static/nbsphinx-code-cells.css b/docs/_static/nbsphinx-code-cells.css deleted file mode 100644 index a3fb27c..0000000 --- a/docs/_static/nbsphinx-code-cells.css +++ /dev/null @@ -1,259 +0,0 @@ -/* remove conflicting styling from Sphinx themes */ -div.nbinput.container div.prompt *, -div.nboutput.container div.prompt *, -div.nbinput.container div.input_area pre, -div.nboutput.container div.output_area pre, -div.nbinput.container div.input_area .highlight, -div.nboutput.container div.output_area .highlight { - border: none; - padding: 0; - margin: 0; - box-shadow: none; -} - -div.nbinput.container > div[class*=highlight], -div.nboutput.container > div[class*=highlight] { - margin: 0; -} - -div.nbinput.container div.prompt *, -div.nboutput.container div.prompt * { - background: none; -} - -div.nboutput.container div.output_area .highlight, -div.nboutput.container div.output_area pre { - background: unset; -} - -div.nboutput.container div.output_area div.highlight { - color: unset; /* override Pygments text color */ -} - -/* avoid gaps between output lines */ -div.nboutput.container div[class*=highlight] pre { - line-height: normal; -} - -/* input/output containers */ -div.nbinput.container, -div.nboutput.container { - display: -webkit-flex; - display: flex; - align-items: flex-start; - margin: 0; - width: 100%; -} -@media (max-width: 540px) { - div.nbinput.container, - div.nboutput.container { - flex-direction: column; - } -} - -/* input container */ -div.nbinput.container { - padding-top: 5px; -} - -/* last container */ -div.nblast.container { - padding-bottom: 5px; -} - -/* input prompt */ -div.nbinput.container div.prompt pre, -/* for sphinx_immaterial theme: */ -div.nbinput.container div.prompt pre > code { - color: #307FC1; -} - -/* output prompt */ -div.nboutput.container div.prompt pre, -/* for sphinx_immaterial theme: */ -div.nboutput.container div.prompt pre > code { - color: #BF5B3D; -} - -/* all prompts */ -div.nbinput.container div.prompt, -div.nboutput.container div.prompt { - width: 4.5ex; - padding-top: 5px; - position: relative; - user-select: none; -} - -div.nbinput.container div.prompt > div, -div.nboutput.container div.prompt > div { - position: absolute; - right: 0; - margin-right: 0.3ex; -} - -@media (max-width: 540px) { - div.nbinput.container div.prompt, - div.nboutput.container div.prompt { - width: unset; - text-align: left; - padding: 0.4em; - } - div.nboutput.container div.prompt.empty { - padding: 0; - } - - div.nbinput.container div.prompt > div, - div.nboutput.container div.prompt > div { - position: unset; - } -} - -/* disable scrollbars and line breaks on prompts */ -div.nbinput.container div.prompt pre, -div.nboutput.container div.prompt pre { - overflow: hidden; - white-space: pre; -} - -/* input/output area */ -div.nbinput.container div.input_area, -div.nboutput.container div.output_area { - -webkit-flex: 1; - flex: 1; - overflow: auto; -} -@media (max-width: 540px) { - div.nbinput.container div.input_area, - div.nboutput.container div.output_area { - width: 100%; - } -} - -/* input area */ -div.nbinput.container div.input_area { - border: 1px solid #e0e0e0; - border-radius: 2px; - /*background: #f5f5f5;*/ -} - -/* override MathJax center alignment in output cells */ -div.nboutput.container div[class*=MathJax] { - text-align: left !important; -} - -/* override sphinx.ext.imgmath center alignment in output cells */ -div.nboutput.container div.math p { - text-align: left; -} - -/* standard error */ -div.nboutput.container div.output_area.stderr { - background: #fdd; -} - -/* ANSI colors */ -.ansi-black-fg { color: #3E424D; } -.ansi-black-bg { background-color: #3E424D; } -.ansi-black-intense-fg { color: #282C36; } -.ansi-black-intense-bg { background-color: #282C36; } -.ansi-red-fg { color: #E75C58; } -.ansi-red-bg { background-color: #E75C58; } -.ansi-red-intense-fg { color: #B22B31; } -.ansi-red-intense-bg { background-color: #B22B31; } -.ansi-green-fg { color: #00A250; } -.ansi-green-bg { background-color: #00A250; } -.ansi-green-intense-fg { color: #007427; } -.ansi-green-intense-bg { background-color: #007427; } -.ansi-yellow-fg { color: #DDB62B; } -.ansi-yellow-bg { background-color: #DDB62B; } -.ansi-yellow-intense-fg { color: #B27D12; } -.ansi-yellow-intense-bg { background-color: #B27D12; } -.ansi-blue-fg { color: #208FFB; } -.ansi-blue-bg { background-color: #208FFB; } -.ansi-blue-intense-fg { color: #0065CA; } -.ansi-blue-intense-bg { background-color: #0065CA; } -.ansi-magenta-fg { color: #D160C4; } -.ansi-magenta-bg { background-color: #D160C4; } -.ansi-magenta-intense-fg { color: #A03196; } -.ansi-magenta-intense-bg { background-color: #A03196; } -.ansi-cyan-fg { color: #60C6C8; } -.ansi-cyan-bg { background-color: #60C6C8; } -.ansi-cyan-intense-fg { color: #258F8F; } -.ansi-cyan-intense-bg { background-color: #258F8F; } -.ansi-white-fg { color: #C5C1B4; } -.ansi-white-bg { background-color: #C5C1B4; } -.ansi-white-intense-fg { color: #A1A6B2; } -.ansi-white-intense-bg { background-color: #A1A6B2; } - -.ansi-default-inverse-fg { color: #FFFFFF; } -.ansi-default-inverse-bg { background-color: #000000; } - -.ansi-bold { font-weight: bold; } -.ansi-underline { text-decoration: underline; } - - -div.nbinput.container div.input_area div[class*=highlight] > pre, -div.nboutput.container div.output_area div[class*=highlight] > pre, -div.nboutput.container div.output_area div[class*=highlight].math, -div.nboutput.container div.output_area.rendered_html, -div.nboutput.container div.output_area > div.output_javascript, -div.nboutput.container div.output_area:not(.rendered_html) > img{ - padding: 5px; - margin: 0; -} - -/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ -div.nbinput.container div.input_area > div[class^='highlight'], -div.nboutput.container div.output_area > div[class^='highlight']{ - overflow-y: hidden; -} - -/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ -.prompt .copybtn, -/* ... and 'sphinx_immaterial' theme */ -.prompt .md-clipboard.md-icon { - display: none; -} - -/* Some additional styling taken form the Jupyter notebook CSS */ -.jp-RenderedHTMLCommon table, -div.rendered_html table { - border: none; - border-collapse: collapse; - border-spacing: 0; - color: black; - font-size: 12px; - table-layout: fixed; -} -.jp-RenderedHTMLCommon thead, -div.rendered_html thead { - border-bottom: 1px solid black; - vertical-align: bottom; -} -.jp-RenderedHTMLCommon tr, -.jp-RenderedHTMLCommon th, -.jp-RenderedHTMLCommon td, -div.rendered_html tr, -div.rendered_html th, -div.rendered_html td { - text-align: right; - vertical-align: middle; - padding: 0.5em 0.5em; - line-height: normal; - white-space: normal; - max-width: none; - border: none; -} -.jp-RenderedHTMLCommon th, -div.rendered_html th { - font-weight: bold; -} -.jp-RenderedHTMLCommon tbody tr:nth-child(odd), -div.rendered_html tbody tr:nth-child(odd) { - background: #f5f5f5; -} -.jp-RenderedHTMLCommon tbody tr:hover, -div.rendered_html tbody tr:hover { - background: rgba(66, 165, 245, 0.2); -} - diff --git a/docs/_static/nbsphinx-gallery.css b/docs/_static/nbsphinx-gallery.css deleted file mode 100644 index 365c27a..0000000 --- a/docs/_static/nbsphinx-gallery.css +++ /dev/null @@ -1,31 +0,0 @@ -.nbsphinx-gallery { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); - gap: 5px; - margin-top: 1em; - margin-bottom: 1em; -} - -.nbsphinx-gallery > a { - padding: 5px; - border: 1px dotted currentColor; - border-radius: 2px; - text-align: center; -} - -.nbsphinx-gallery > a:hover { - border-style: solid; -} - -.nbsphinx-gallery img { - max-width: 100%; - max-height: 100%; -} - -.nbsphinx-gallery > a > div:first-child { - display: flex; - align-items: start; - justify-content: center; - height: 120px; - margin-bottom: 5px; -} diff --git a/docs/_static/nbsphinx-no-thumbnail.svg b/docs/_static/nbsphinx-no-thumbnail.svg deleted file mode 100644 index 9dca758..0000000 --- a/docs/_static/nbsphinx-no-thumbnail.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/docs/_static/plus.png b/docs/_static/plus.png deleted file mode 100644 index 7107cec..0000000 Binary files a/docs/_static/plus.png and /dev/null differ diff --git a/docs/_static/pygments.css b/docs/_static/pygments.css deleted file mode 100644 index 012e6a0..0000000 --- a/docs/_static/pygments.css +++ /dev/null @@ -1,152 +0,0 @@ -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/docs/_static/scripts/bootstrap.js b/docs/_static/scripts/bootstrap.js deleted file mode 100644 index c8178de..0000000 --- a/docs/_static/scripts/bootstrap.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! 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/docs/_static/scripts/bootstrap.js.LICENSE.txt b/docs/_static/scripts/bootstrap.js.LICENSE.txt deleted file mode 100644 index 28755c2..0000000 --- a/docs/_static/scripts/bootstrap.js.LICENSE.txt +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * 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/docs/_static/scripts/bootstrap.js.map b/docs/_static/scripts/bootstrap.js.map deleted file mode 100644 index e9e8158..0000000 --- a/docs/_static/scripts/bootstrap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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