├── .github └── workflows │ └── build_and_release.yml ├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── example ├── imgs │ ├── client_id.png │ ├── create.png │ ├── demo.png │ ├── ploomber-deploy.png │ ├── signin.png │ └── tenant_id.png ├── local │ ├── .gitignore │ ├── Dockerfile │ ├── Makefile │ ├── README.md │ ├── app │ │ └── dashboard.py │ ├── poetry.lock │ └── pyproject.toml └── ploomber │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── app.py │ └── requirements.txt ├── msal_streamlit_authentication ├── __init__.py └── frontend │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── src │ ├── Authentication.tsx │ ├── auth │ │ └── msal-auth.tsx │ ├── index.css │ ├── main.tsx │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── poetry.lock └── pyproject.toml /.github/workflows/build_and_release.yml: -------------------------------------------------------------------------------- 1 | name: Build and release 2 | on: 3 | release: 4 | types: 5 | - published 6 | workflow_dispatch: 7 | inputs: 8 | logLevel: 9 | description: 'Log level' 10 | required: true 11 | default: 'warning' 12 | jobs: 13 | build-release: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - name: Check-out repository 17 | uses: actions/checkout@v3 18 | #------------------------------- 19 | # Setup Node.js and React 20 | #------------------------------- 21 | - name: Use Node.js v18.x 22 | uses: actions/setup-node@v3 23 | with: 24 | node-version: 18 25 | - name: Install NPM dependencies 26 | run: npm install --prefix msal_streamlit_authentication/frontend 27 | - name: Build React project 28 | run: npm run build --prefix msal_streamlit_authentication/frontend 29 | #------------------------------- 30 | # Setup python 31 | #------------------------------- 32 | - name: Setup Python 33 | id: setup-python 34 | uses: actions/setup-python@v4 35 | with: 36 | python-version: '3.11' 37 | #------------------------------- 38 | # Install & configure poetry 39 | #------------------------------- 40 | - name: Install Poetry 41 | uses: snok/install-poetry@v1 42 | with: 43 | virtualenvs-create: true 44 | virtualenvs-in-project: true 45 | installer-parallel: true 46 | #------------------------------- 47 | # Build & publish to PyPi 48 | #------------------------------- 49 | - name: Build package distribution 50 | run: poetry build --no-interaction 51 | - name: Publish a Python distribution to PyPI 52 | uses: pypa/gh-action-pypi-publish@release/v1 53 | with: 54 | user: __token__ 55 | password: ${{ secrets.PYPI_API_TOKEN }} 56 | 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Python things 2 | __pycache__ 3 | 4 | # JS misc 5 | node_modules 6 | build/ 7 | dist/ 8 | 9 | # IDE stuff 10 | .vscode 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Michael Staal-Olsen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | ############# 2 | # k8s setup # 3 | ############# 4 | 5 | .PHONY: download-install-poetry 6 | download-install-poetry: 7 | curl -sSL https://install.python-poetry.org/ | python - 8 | 9 | # TODO: Pin to stable instead of preview once poetry 1.2 is released 10 | poetry_setup: ## Setup virtual env and install dependencies 11 | deactivate || true 12 | poetry self update --preview || true 13 | poetry config virtualenvs.create true 14 | poetry config virtualenvs.in-project true 15 | poetry install --with dev --no-interaction -v 16 | .PHONY: poetry_setup 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

Streamlit - Microsoft MSAL Authentication

3 | Ploomber Logo 4 | 5 | A Streamlit component for Microsoft Authentication Library (MSAL) integration 6 | 7 | 8 | [![PyPI version](https://badge.fury.io/py/msal-streamlit-authentication.svg)](https://badge.fury.io/py/msal-streamlit-authentication) 9 | 10 | ```sh 11 | pip install msal-streamlit-authentication 12 | ``` 13 | 14 | [Example: Local Project With Docker](./example/local/) | [Example: Deploy MSAL on Ploomber](./example/ploomber/) | [Enterprise Support](https://calendly.com/edubr/ploomber-customer-support) 15 | 16 | [Deploy Streamlit on Ploomber Cloud for Free](https://www.platform.ploomber.io/register/?utm_medium=github&utm_source=msal) 17 |
18 | 19 | 20 | ## Overview 21 | 22 | > [!IMPORTANT] 23 | > 🏢 **Enterprise Support Available**: Looking for advanced features, SLA, or dedicated support? 24 | Contact our team → 25 | 26 | This Streamlit component enables seamless client-side authentication using: 27 | - Azure Active Directory (AAD) work and school accounts 28 | - Microsoft personal accounts (MSA) 29 | - Social identity providers (Facebook, Google, LinkedIn, etc.) through Azure AD B2C 30 | 31 | Built on the [Microsoft MSAL JS Library](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser), it supports any provider using OpenID Connect Authorization Code Flow (PKCE). 32 | 33 |
34 | Sign In Example 35 |
36 | 37 | ## Quick Start 38 | 39 | 1. **Register Your Application** 40 | - [Register a Single Page Application in Azure AD](https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-app-registration) 41 | - Note your Client ID and configure redirect URIs for targeted final URI 42 | 43 | 2. **Install the Package** 44 | ```sh 45 | pip install msal-streamlit-authentication 46 | ``` 47 | 48 | 3. **Implementation Example** 49 | ```python 50 | value = msal_authentication( 51 | auth={ 52 | "clientId": "YOUR_CLIENT_ID", 53 | "authority": "https://login.microsoftonline.com/YOUR_TENANT_ID", 54 | "redirectUri": "/", 55 | "postLogoutRedirectUri": "/" 56 | }, 57 | cache={ 58 | "cacheLocation": "sessionStorage", 59 | "storeAuthStateInCookie": False 60 | }, 61 | login_request={ 62 | "scopes": ["YOUR_SCOPE/.default"] 63 | } 64 | ) 65 | ``` 66 | 67 | ## Configuration Guide 68 | 69 | ### Required Configuration 70 | - **Client ID**: Found in Azure Portal under "Application (client) ID" 71 |
72 | 📷 Where to find Client ID 73 | Client ID Location 74 |
75 | 76 | - **Tenant ID**: Found in Azure Portal under "Directory (tenant) ID" 77 |
78 | 📷 Where to find Tenant ID 79 | Tenant ID Location 80 |
81 | 82 | ### Optional Parameters 83 | ```python 84 | msal_authentication( 85 | # ... required config ... 86 | login_button_text="Login", # Default: "Login" 87 | logout_button_text="Logout", # Default: "Logout" 88 | class_name="css_button_class", # CSS class selector 89 | html_id="button_id", # HTML ID 90 | key="1" # Streamlit component key 91 | ) 92 | ``` 93 | 94 | ### Scopes Configuration 95 | For more information on configuring scopes and permissions, see the [official documentation](https://learn.microsoft.com/en-us/entra/identity-platform/scopes-oidc). 96 | 97 | Basic scope example: 98 | ```python 99 | login_request={ 100 | "scopes": ["https://graph.microsoft.com/.default"] 101 | } 102 | ``` 103 | 104 | ### Redirect URI 105 | By default, MSAL uses the current page as the redirect URI. To customize: 106 | ```python 107 | auth={ 108 | # ... other config ... 109 | "redirectUri": "/custom-path", 110 | } 111 | ``` 112 | ⚠️ All redirect URIs must be registered in your Azure portal application settings. 113 | 114 | ## Additional Resources 115 | - [MSAL Documentation](https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-overview) 116 | - [Azure AD B2C Overview](https://docs.microsoft.com/azure/active-directory-b2c/active-directory-b2c-overview#identity-providers) 117 | - [MSAL JS GitHub Repository](https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser) 118 | - [Deploy on Ploomber](./example/ploomber/) 119 | 120 | > [!TIP] 121 | > Deploy Streamlit apps for free on [Ploomber Cloud!](https://www.platform.ploomber.io/register/?utm_medium=github&utm_source=msal) 122 | 123 | ## Acknowledgments 124 | Built with inspiration from: 125 | - [Official Streamlit Component Template](https://github.com/streamlit/component-template) 126 | - [Streamlit NPM Component Library](https://github.com/streamlit/streamlit/tree/develop/component-lib) 127 | -------------------------------------------------------------------------------- /example/imgs/client_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/client_id.png -------------------------------------------------------------------------------- /example/imgs/create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/create.png -------------------------------------------------------------------------------- /example/imgs/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/demo.png -------------------------------------------------------------------------------- /example/imgs/ploomber-deploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/ploomber-deploy.png -------------------------------------------------------------------------------- /example/imgs/signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/signin.png -------------------------------------------------------------------------------- /example/imgs/tenant_id.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ploomber/msal_streamlit_authentication/b3318ed08232f5dbabce64448f8668cc50d00624/example/imgs/tenant_id.png -------------------------------------------------------------------------------- /example/local/.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /example/local/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.9-slim 2 | 3 | # Create user to avoid running as root 4 | RUN useradd --create-home app 5 | 6 | ENV POETRY_HOME="/opt/poetry" \ 7 | POETRY_VIRTUALENVS_CREATE=false \ 8 | POETRY_VIRTUALENVS_IN_PROJECT=false \ 9 | POETRY_NO_INTERACTION=1 \ 10 | POETRY_VERSION=1.4.0 11 | 12 | # Update pip 13 | RUN pip install --upgrade pip 14 | 15 | # Install poetry 16 | RUN pip install "poetry==$POETRY_VERSION" 17 | 18 | # Copy project files 19 | COPY app ./app 20 | COPY pyproject.toml poetry.lock ./ 21 | 22 | # Install application 23 | RUN poetry install 24 | 25 | EXPOSE 8501 26 | HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health 27 | ENTRYPOINT ["streamlit", "run", "app/dashboard.py", "--server.port=8501", "--server.address=0.0.0.0"] 28 | -------------------------------------------------------------------------------- /example/local/Makefile: -------------------------------------------------------------------------------- 1 | ############# 2 | # setup # 3 | ############# 4 | 5 | docker_build: ## build docker image 6 | docker build -t streamlit . 7 | .PHONY: docker_build 8 | 9 | 10 | docker_run: ## run docker image 11 | docker run -p 8501:8501 streamlit 12 | .PHONY: docker_run 13 | -------------------------------------------------------------------------------- /example/local/README.md: -------------------------------------------------------------------------------- 1 | # streamlit_msal_sample 2 | Reference project for using [msal-streamlit-authentication](https://github.com/ploomber/msal_streamlit_authentication) 3 | 4 | # Get Started 5 | 6 | 1. Configure the application 7 | Edit [dashboard.py](./app/dashboard.py), by providing the `msal_authentication` with your Single Page Application config. Don't forget to set the callback url to `https://localhost:8501` 8 | 9 | ```python 10 | value = msal_authentication( 11 | auth={ 12 | "clientId": "CLIENT_ID", 13 | "authority": "https://login.microsoftonline.com/TENANT_ID", 14 | "redirectUri": "http://localhost:8501/", 15 | "postLogoutRedirectUri": "/" 16 | }, 17 | cache={ 18 | "cacheLocation": "sessionStorage", 19 | "storeAuthStateInCookie": False 20 | }, 21 | login_request={ 22 | "scopes": ["https://graph.microsoft.com/.default"] 23 | }, 24 | key=1 25 | ) 26 | ``` 27 | 28 | 2. Build the Docker container 29 | ```sh 30 | docker build -t streamlit . 31 | ``` 32 | 33 | 3. Run the container 34 | ```sh 35 | docker run -p 8501:8501 streamlit 36 | ``` 37 | 38 | 4. Naviguate to `https://localhost:8501` to see the demo 39 | -------------------------------------------------------------------------------- /example/local/app/dashboard.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | 3 | from msal_streamlit_authentication import msal_authentication 4 | 5 | st.title("Streamlit MSAL Anthentication 🔒") 6 | 7 | value = msal_authentication( 8 | auth={ 9 | "clientId": "{CLIENT_ID_HERE}", 10 | "authority": "https://login.microsoftonline.com/{TENANT_ID_HERE}", 11 | "redirectUri": "http://localhost:8501/", 12 | "postLogoutRedirectUri": "/" 13 | }, 14 | cache={ 15 | "cacheLocation": "sessionStorage", 16 | "storeAuthStateInCookie": False 17 | }, 18 | login_request={ 19 | "scopes": ["https://graph.microsoft.com/.default"] 20 | }, 21 | key=1) 22 | 23 | st.write("Received", value) 24 | -------------------------------------------------------------------------------- /example/local/poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "altair" 5 | version = "4.2.2" 6 | description = "Altair: A declarative statistical visualization library for Python." 7 | category = "main" 8 | optional = false 9 | python-versions = ">=3.7" 10 | files = [ 11 | {file = "altair-4.2.2-py3-none-any.whl", hash = "sha256:8b45ebeaf8557f2d760c5c77b79f02ae12aee7c46c27c06014febab6f849bc87"}, 12 | {file = "altair-4.2.2.tar.gz", hash = "sha256:39399a267c49b30d102c10411e67ab26374156a84b1aeb9fcd15140429ba49c5"}, 13 | ] 14 | 15 | [package.dependencies] 16 | entrypoints = "*" 17 | jinja2 = "*" 18 | jsonschema = ">=3.0" 19 | numpy = "*" 20 | pandas = ">=0.18" 21 | toolz = "*" 22 | 23 | [package.extras] 24 | dev = ["black", "docutils", "flake8", "ipython", "m2r", "mistune (<2.0.0)", "pytest", "recommonmark", "sphinx", "vega-datasets"] 25 | 26 | [[package]] 27 | name = "atomicwrites" 28 | version = "1.4.1" 29 | description = "Atomic file writes." 30 | category = "dev" 31 | optional = false 32 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 33 | files = [ 34 | {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, 35 | ] 36 | 37 | [[package]] 38 | name = "attrs" 39 | version = "22.2.0" 40 | description = "Classes Without Boilerplate" 41 | category = "main" 42 | optional = false 43 | python-versions = ">=3.6" 44 | files = [ 45 | {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, 46 | {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, 47 | ] 48 | 49 | [package.extras] 50 | cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] 51 | dev = ["attrs[docs,tests]"] 52 | docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] 53 | tests = ["attrs[tests-no-zope]", "zope.interface"] 54 | tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] 55 | 56 | [[package]] 57 | name = "blinker" 58 | version = "1.5" 59 | description = "Fast, simple object-to-object and broadcast signaling" 60 | category = "main" 61 | optional = false 62 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 63 | files = [ 64 | {file = "blinker-1.5-py2.py3-none-any.whl", hash = "sha256:1eb563df6fdbc39eeddc177d953203f99f097e9bf0e2b8f9f3cf18b6ca425e36"}, 65 | {file = "blinker-1.5.tar.gz", hash = "sha256:923e5e2f69c155f2cc42dafbbd70e16e3fde24d2d4aa2ab72fbe386238892462"}, 66 | ] 67 | 68 | [[package]] 69 | name = "cachetools" 70 | version = "5.3.0" 71 | description = "Extensible memoizing collections and decorators" 72 | category = "main" 73 | optional = false 74 | python-versions = "~=3.7" 75 | files = [ 76 | {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, 77 | {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, 78 | ] 79 | 80 | [[package]] 81 | name = "certifi" 82 | version = "2022.12.7" 83 | description = "Python package for providing Mozilla's CA Bundle." 84 | category = "main" 85 | optional = false 86 | python-versions = ">=3.6" 87 | files = [ 88 | {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, 89 | {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, 90 | ] 91 | 92 | [[package]] 93 | name = "charset-normalizer" 94 | version = "3.1.0" 95 | description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 96 | category = "main" 97 | optional = false 98 | python-versions = ">=3.7.0" 99 | files = [ 100 | {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, 101 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, 102 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, 103 | {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, 104 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, 105 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, 106 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, 107 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, 108 | {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, 109 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, 110 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, 111 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, 112 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, 113 | {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, 114 | {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, 115 | {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, 116 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, 117 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, 118 | {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, 119 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, 120 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, 121 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, 122 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, 123 | {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, 124 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, 125 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, 126 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, 127 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, 128 | {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, 129 | {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, 130 | {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, 131 | {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, 132 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, 133 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, 134 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, 135 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, 136 | {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, 137 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, 138 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, 139 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, 140 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, 141 | {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, 142 | {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, 143 | {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, 144 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, 145 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, 146 | {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, 147 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, 148 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, 149 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, 150 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, 151 | {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, 152 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, 153 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, 154 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, 155 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, 156 | {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, 157 | {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, 158 | {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, 159 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, 160 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, 161 | {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, 162 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, 163 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, 164 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, 165 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, 166 | {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, 167 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, 168 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, 169 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, 170 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, 171 | {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, 172 | {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, 173 | {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, 174 | {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, 175 | ] 176 | 177 | [[package]] 178 | name = "click" 179 | version = "8.1.3" 180 | description = "Composable command line interface toolkit" 181 | category = "main" 182 | optional = false 183 | python-versions = ">=3.7" 184 | files = [ 185 | {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, 186 | {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, 187 | ] 188 | 189 | [package.dependencies] 190 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 191 | 192 | [[package]] 193 | name = "colorama" 194 | version = "0.4.6" 195 | description = "Cross-platform colored terminal text." 196 | category = "main" 197 | optional = false 198 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 199 | files = [ 200 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 201 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 202 | ] 203 | 204 | [[package]] 205 | name = "decorator" 206 | version = "5.1.1" 207 | description = "Decorators for Humans" 208 | category = "main" 209 | optional = false 210 | python-versions = ">=3.5" 211 | files = [ 212 | {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, 213 | {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, 214 | ] 215 | 216 | [[package]] 217 | name = "entrypoints" 218 | version = "0.4" 219 | description = "Discover and load entry points from installed packages." 220 | category = "main" 221 | optional = false 222 | python-versions = ">=3.6" 223 | files = [ 224 | {file = "entrypoints-0.4-py3-none-any.whl", hash = "sha256:f174b5ff827504fd3cd97cc3f8649f3693f51538c7e4bdf3ef002c8429d42f9f"}, 225 | {file = "entrypoints-0.4.tar.gz", hash = "sha256:b706eddaa9218a19ebcd67b56818f05bb27589b1ca9e8d797b74affad4ccacd4"}, 226 | ] 227 | 228 | [[package]] 229 | name = "gitdb" 230 | version = "4.0.10" 231 | description = "Git Object Database" 232 | category = "main" 233 | optional = false 234 | python-versions = ">=3.7" 235 | files = [ 236 | {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, 237 | {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, 238 | ] 239 | 240 | [package.dependencies] 241 | smmap = ">=3.0.1,<6" 242 | 243 | [[package]] 244 | name = "gitpython" 245 | version = "3.1.31" 246 | description = "GitPython is a Python library used to interact with Git repositories" 247 | category = "main" 248 | optional = false 249 | python-versions = ">=3.7" 250 | files = [ 251 | {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, 252 | {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, 253 | ] 254 | 255 | [package.dependencies] 256 | gitdb = ">=4.0.1,<5" 257 | 258 | [[package]] 259 | name = "idna" 260 | version = "3.4" 261 | description = "Internationalized Domain Names in Applications (IDNA)" 262 | category = "main" 263 | optional = false 264 | python-versions = ">=3.5" 265 | files = [ 266 | {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, 267 | {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, 268 | ] 269 | 270 | [[package]] 271 | name = "importlib-metadata" 272 | version = "6.0.0" 273 | description = "Read metadata from Python packages" 274 | category = "main" 275 | optional = false 276 | python-versions = ">=3.7" 277 | files = [ 278 | {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, 279 | {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, 280 | ] 281 | 282 | [package.dependencies] 283 | zipp = ">=0.5" 284 | 285 | [package.extras] 286 | docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] 287 | perf = ["ipython"] 288 | testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] 289 | 290 | [[package]] 291 | name = "iniconfig" 292 | version = "2.0.0" 293 | description = "brain-dead simple config-ini parsing" 294 | category = "dev" 295 | optional = false 296 | python-versions = ">=3.7" 297 | files = [ 298 | {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, 299 | {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, 300 | ] 301 | 302 | [[package]] 303 | name = "jinja2" 304 | version = "3.1.2" 305 | description = "A very fast and expressive template engine." 306 | category = "main" 307 | optional = false 308 | python-versions = ">=3.7" 309 | files = [ 310 | {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, 311 | {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, 312 | ] 313 | 314 | [package.dependencies] 315 | MarkupSafe = ">=2.0" 316 | 317 | [package.extras] 318 | i18n = ["Babel (>=2.7)"] 319 | 320 | [[package]] 321 | name = "jsonschema" 322 | version = "4.17.3" 323 | description = "An implementation of JSON Schema validation for Python" 324 | category = "main" 325 | optional = false 326 | python-versions = ">=3.7" 327 | files = [ 328 | {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, 329 | {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, 330 | ] 331 | 332 | [package.dependencies] 333 | attrs = ">=17.4.0" 334 | pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" 335 | 336 | [package.extras] 337 | format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] 338 | format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] 339 | 340 | [[package]] 341 | name = "markdown-it-py" 342 | version = "2.2.0" 343 | description = "Python port of markdown-it. Markdown parsing, done right!" 344 | category = "main" 345 | optional = false 346 | python-versions = ">=3.7" 347 | files = [ 348 | {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, 349 | {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, 350 | ] 351 | 352 | [package.dependencies] 353 | mdurl = ">=0.1,<1.0" 354 | 355 | [package.extras] 356 | benchmarking = ["psutil", "pytest", "pytest-benchmark"] 357 | code-style = ["pre-commit (>=3.0,<4.0)"] 358 | compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] 359 | linkify = ["linkify-it-py (>=1,<3)"] 360 | plugins = ["mdit-py-plugins"] 361 | profiling = ["gprof2dot"] 362 | rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] 363 | testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] 364 | 365 | [[package]] 366 | name = "markupsafe" 367 | version = "2.1.2" 368 | description = "Safely add untrusted strings to HTML/XML markup." 369 | category = "main" 370 | optional = false 371 | python-versions = ">=3.7" 372 | files = [ 373 | {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, 374 | {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, 375 | {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, 376 | {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, 377 | {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, 378 | {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, 379 | {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, 380 | {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, 381 | {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, 382 | {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, 383 | {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, 384 | {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, 385 | {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, 386 | {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, 387 | {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, 388 | {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, 389 | {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, 390 | {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, 391 | {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, 392 | {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, 393 | {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, 394 | {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, 395 | {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, 396 | {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, 397 | {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, 398 | {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, 399 | {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, 400 | {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, 401 | {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, 402 | {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, 403 | {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, 404 | {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, 405 | {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, 406 | {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, 407 | {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, 408 | {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, 409 | {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, 410 | {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, 411 | {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, 412 | {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, 413 | {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, 414 | {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, 415 | {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, 416 | {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, 417 | {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, 418 | {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, 419 | {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, 420 | {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, 421 | {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, 422 | {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, 423 | ] 424 | 425 | [[package]] 426 | name = "mdurl" 427 | version = "0.1.2" 428 | description = "Markdown URL utilities" 429 | category = "main" 430 | optional = false 431 | python-versions = ">=3.7" 432 | files = [ 433 | {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, 434 | {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, 435 | ] 436 | 437 | [[package]] 438 | name = "more-itertools" 439 | version = "9.1.0" 440 | description = "More routines for operating on iterables, beyond itertools" 441 | category = "dev" 442 | optional = false 443 | python-versions = ">=3.7" 444 | files = [ 445 | {file = "more-itertools-9.1.0.tar.gz", hash = "sha256:cabaa341ad0389ea83c17a94566a53ae4c9d07349861ecb14dc6d0345cf9ac5d"}, 446 | {file = "more_itertools-9.1.0-py3-none-any.whl", hash = "sha256:d2bc7f02446e86a68911e58ded76d6561eea00cddfb2a91e7019bbb586c799f3"}, 447 | ] 448 | 449 | [[package]] 450 | name = "msal-streamlit-authentication" 451 | version = "1.0.7" 452 | description = "Streamlit Authentication library based on MSAL.JS" 453 | category = "main" 454 | optional = false 455 | python-versions = ">=3.7" 456 | files = [ 457 | {file = "msal_streamlit_authentication-1.0.7-py3-none-any.whl", hash = "sha256:3d50cd0b587f5380cad5e38da9452d7d3cffed6aabb36e5d1b2a924d12f7db6e"}, 458 | {file = "msal_streamlit_authentication-1.0.7.tar.gz", hash = "sha256:79f8363ddac005675eb56f32700a03193f883a9b7d0c105c7c8e1723a65a3a9b"}, 459 | ] 460 | 461 | [package.dependencies] 462 | streamlit = "*" 463 | 464 | [[package]] 465 | name = "numpy" 466 | version = "1.24.2" 467 | description = "Fundamental package for array computing in Python" 468 | category = "main" 469 | optional = false 470 | python-versions = ">=3.8" 471 | files = [ 472 | {file = "numpy-1.24.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eef70b4fc1e872ebddc38cddacc87c19a3709c0e3e5d20bf3954c147b1dd941d"}, 473 | {file = "numpy-1.24.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d2859428712785e8a8b7d2b3ef0a1d1565892367b32f915c4a4df44d0e64f5"}, 474 | {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6524630f71631be2dabe0c541e7675db82651eb998496bbe16bc4f77f0772253"}, 475 | {file = "numpy-1.24.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a51725a815a6188c662fb66fb32077709a9ca38053f0274640293a14fdd22978"}, 476 | {file = "numpy-1.24.2-cp310-cp310-win32.whl", hash = "sha256:2620e8592136e073bd12ee4536149380695fbe9ebeae845b81237f986479ffc9"}, 477 | {file = "numpy-1.24.2-cp310-cp310-win_amd64.whl", hash = "sha256:97cf27e51fa078078c649a51d7ade3c92d9e709ba2bfb97493007103c741f1d0"}, 478 | {file = "numpy-1.24.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7de8fdde0003f4294655aa5d5f0a89c26b9f22c0a58790c38fae1ed392d44a5a"}, 479 | {file = "numpy-1.24.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4173bde9fa2a005c2c6e2ea8ac1618e2ed2c1c6ec8a7657237854d42094123a0"}, 480 | {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cecaed30dc14123020f77b03601559fff3e6cd0c048f8b5289f4eeabb0eb281"}, 481 | {file = "numpy-1.24.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a23f8440561a633204a67fb44617ce2a299beecf3295f0d13c495518908e910"}, 482 | {file = "numpy-1.24.2-cp311-cp311-win32.whl", hash = "sha256:e428c4fbfa085f947b536706a2fc349245d7baa8334f0c5723c56a10595f9b95"}, 483 | {file = "numpy-1.24.2-cp311-cp311-win_amd64.whl", hash = "sha256:557d42778a6869c2162deb40ad82612645e21d79e11c1dc62c6e82a2220ffb04"}, 484 | {file = "numpy-1.24.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d0a2db9d20117bf523dde15858398e7c0858aadca7c0f088ac0d6edd360e9ad2"}, 485 | {file = "numpy-1.24.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c72a6b2f4af1adfe193f7beb91ddf708ff867a3f977ef2ec53c0ffb8283ab9f5"}, 486 | {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c29e6bd0ec49a44d7690ecb623a8eac5ab8a923bce0bea6293953992edf3a76a"}, 487 | {file = "numpy-1.24.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eabd64ddb96a1239791da78fa5f4e1693ae2dadc82a76bc76a14cbb2b966e96"}, 488 | {file = "numpy-1.24.2-cp38-cp38-win32.whl", hash = "sha256:e3ab5d32784e843fc0dd3ab6dcafc67ef806e6b6828dc6af2f689be0eb4d781d"}, 489 | {file = "numpy-1.24.2-cp38-cp38-win_amd64.whl", hash = "sha256:76807b4063f0002c8532cfeac47a3068a69561e9c8715efdad3c642eb27c0756"}, 490 | {file = "numpy-1.24.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4199e7cfc307a778f72d293372736223e39ec9ac096ff0a2e64853b866a8e18a"}, 491 | {file = "numpy-1.24.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:adbdce121896fd3a17a77ab0b0b5eedf05a9834a18699db6829a64e1dfccca7f"}, 492 | {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:889b2cc88b837d86eda1b17008ebeb679d82875022200c6e8e4ce6cf549b7acb"}, 493 | {file = "numpy-1.24.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f64bb98ac59b3ea3bf74b02f13836eb2e24e48e0ab0145bbda646295769bd780"}, 494 | {file = "numpy-1.24.2-cp39-cp39-win32.whl", hash = "sha256:63e45511ee4d9d976637d11e6c9864eae50e12dc9598f531c035265991910468"}, 495 | {file = "numpy-1.24.2-cp39-cp39-win_amd64.whl", hash = "sha256:a77d3e1163a7770164404607b7ba3967fb49b24782a6ef85d9b5f54126cc39e5"}, 496 | {file = "numpy-1.24.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:92011118955724465fb6853def593cf397b4a1367495e0b59a7e69d40c4eb71d"}, 497 | {file = "numpy-1.24.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9006288bcf4895917d02583cf3411f98631275bc67cce355a7f39f8c14338fa"}, 498 | {file = "numpy-1.24.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:150947adbdfeceec4e5926d956a06865c1c690f2fd902efede4ca6fe2e657c3f"}, 499 | {file = "numpy-1.24.2.tar.gz", hash = "sha256:003a9f530e880cb2cd177cba1af7220b9aa42def9c4afc2a2fc3ee6be7eb2b22"}, 500 | ] 501 | 502 | [[package]] 503 | name = "packaging" 504 | version = "23.0" 505 | description = "Core utilities for Python packages" 506 | category = "main" 507 | optional = false 508 | python-versions = ">=3.7" 509 | files = [ 510 | {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, 511 | {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, 512 | ] 513 | 514 | [[package]] 515 | name = "pandas" 516 | version = "1.5.3" 517 | description = "Powerful data structures for data analysis, time series, and statistics" 518 | category = "main" 519 | optional = false 520 | python-versions = ">=3.8" 521 | files = [ 522 | {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3749077d86e3a2f0ed51367f30bf5b82e131cc0f14260c4d3e499186fccc4406"}, 523 | {file = "pandas-1.5.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:972d8a45395f2a2d26733eb8d0f629b2f90bebe8e8eddbb8829b180c09639572"}, 524 | {file = "pandas-1.5.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50869a35cbb0f2e0cd5ec04b191e7b12ed688874bd05dd777c19b28cbea90996"}, 525 | {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ac844a0fe00bfaeb2c9b51ab1424e5c8744f89860b138434a363b1f620f354"}, 526 | {file = "pandas-1.5.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a0a56cef15fd1586726dace5616db75ebcfec9179a3a55e78f72c5639fa2a23"}, 527 | {file = "pandas-1.5.3-cp310-cp310-win_amd64.whl", hash = "sha256:478ff646ca42b20376e4ed3fa2e8d7341e8a63105586efe54fa2508ee087f328"}, 528 | {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6973549c01ca91ec96199e940495219c887ea815b2083722821f1d7abfa2b4dc"}, 529 | {file = "pandas-1.5.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c39a8da13cede5adcd3be1182883aea1c925476f4e84b2807a46e2775306305d"}, 530 | {file = "pandas-1.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f76d097d12c82a535fda9dfe5e8dd4127952b45fea9b0276cb30cca5ea313fbc"}, 531 | {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e474390e60ed609cec869b0da796ad94f420bb057d86784191eefc62b65819ae"}, 532 | {file = "pandas-1.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f2b952406a1588ad4cad5b3f55f520e82e902388a6d5a4a91baa8d38d23c7f6"}, 533 | {file = "pandas-1.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc4c368f42b551bf72fac35c5128963a171b40dce866fb066540eeaf46faa003"}, 534 | {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14e45300521902689a81f3f41386dc86f19b8ba8dd5ac5a3c7010ef8d2932813"}, 535 | {file = "pandas-1.5.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9842b6f4b8479e41968eced654487258ed81df7d1c9b7b870ceea24ed9459b31"}, 536 | {file = "pandas-1.5.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:26d9c71772c7afb9d5046e6e9cf42d83dd147b5cf5bcb9d97252077118543792"}, 537 | {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fbcb19d6fceb9e946b3e23258757c7b225ba450990d9ed63ccceeb8cae609f7"}, 538 | {file = "pandas-1.5.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:565fa34a5434d38e9d250af3c12ff931abaf88050551d9fbcdfafca50d62babf"}, 539 | {file = "pandas-1.5.3-cp38-cp38-win32.whl", hash = "sha256:87bd9c03da1ac870a6d2c8902a0e1fd4267ca00f13bc494c9e5a9020920e1d51"}, 540 | {file = "pandas-1.5.3-cp38-cp38-win_amd64.whl", hash = "sha256:41179ce559943d83a9b4bbacb736b04c928b095b5f25dd2b7389eda08f46f373"}, 541 | {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c74a62747864ed568f5a82a49a23a8d7fe171d0c69038b38cedf0976831296fa"}, 542 | {file = "pandas-1.5.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c4c00e0b0597c8e4f59e8d461f797e5d70b4d025880516a8261b2817c47759ee"}, 543 | {file = "pandas-1.5.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a50d9a4336a9621cab7b8eb3fb11adb82de58f9b91d84c2cd526576b881a0c5a"}, 544 | {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd05f7783b3274aa206a1af06f0ceed3f9b412cf665b7247eacd83be41cf7bf0"}, 545 | {file = "pandas-1.5.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f69c4029613de47816b1bb30ff5ac778686688751a5e9c99ad8c7031f6508e5"}, 546 | {file = "pandas-1.5.3-cp39-cp39-win32.whl", hash = "sha256:7cec0bee9f294e5de5bbfc14d0573f65526071029d036b753ee6507d2a21480a"}, 547 | {file = "pandas-1.5.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfd681c5dc216037e0b0a2c821f5ed99ba9f03ebcf119c7dac0e9a7b960b9ec9"}, 548 | {file = "pandas-1.5.3.tar.gz", hash = "sha256:74a3fd7e5a7ec052f183273dc7b0acd3a863edf7520f5d3a1765c04ffdb3b0b1"}, 549 | ] 550 | 551 | [package.dependencies] 552 | numpy = [ 553 | {version = ">=1.20.3", markers = "python_version < \"3.10\""}, 554 | {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, 555 | {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, 556 | ] 557 | python-dateutil = ">=2.8.1" 558 | pytz = ">=2020.1" 559 | 560 | [package.extras] 561 | test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] 562 | 563 | [[package]] 564 | name = "pillow" 565 | version = "9.4.0" 566 | description = "Python Imaging Library (Fork)" 567 | category = "main" 568 | optional = false 569 | python-versions = ">=3.7" 570 | files = [ 571 | {file = "Pillow-9.4.0-1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b4b4e9dda4f4e4c4e6896f93e84a8f0bcca3b059de9ddf67dac3c334b1195e1"}, 572 | {file = "Pillow-9.4.0-1-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:fb5c1ad6bad98c57482236a21bf985ab0ef42bd51f7ad4e4538e89a997624e12"}, 573 | {file = "Pillow-9.4.0-1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:f0caf4a5dcf610d96c3bd32932bfac8aee61c96e60481c2a0ea58da435e25acd"}, 574 | {file = "Pillow-9.4.0-1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:3f4cc516e0b264c8d4ccd6b6cbc69a07c6d582d8337df79be1e15a5056b258c9"}, 575 | {file = "Pillow-9.4.0-1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b8c2f6eb0df979ee99433d8b3f6d193d9590f735cf12274c108bd954e30ca858"}, 576 | {file = "Pillow-9.4.0-1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b70756ec9417c34e097f987b4d8c510975216ad26ba6e57ccb53bc758f490dab"}, 577 | {file = "Pillow-9.4.0-1-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:43521ce2c4b865d385e78579a082b6ad1166ebed2b1a2293c3be1d68dd7ca3b9"}, 578 | {file = "Pillow-9.4.0-2-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:9d9a62576b68cd90f7075876f4e8444487db5eeea0e4df3ba298ee38a8d067b0"}, 579 | {file = "Pillow-9.4.0-2-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:87708d78a14d56a990fbf4f9cb350b7d89ee8988705e58e39bdf4d82c149210f"}, 580 | {file = "Pillow-9.4.0-2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8a2b5874d17e72dfb80d917213abd55d7e1ed2479f38f001f264f7ce7bae757c"}, 581 | {file = "Pillow-9.4.0-2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:83125753a60cfc8c412de5896d10a0a405e0bd88d0470ad82e0869ddf0cb3848"}, 582 | {file = "Pillow-9.4.0-2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9e5f94742033898bfe84c93c831a6f552bb629448d4072dd312306bab3bd96f1"}, 583 | {file = "Pillow-9.4.0-2-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:013016af6b3a12a2f40b704677f8b51f72cb007dac785a9933d5c86a72a7fe33"}, 584 | {file = "Pillow-9.4.0-2-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:99d92d148dd03fd19d16175b6d355cc1b01faf80dae93c6c3eb4163709edc0a9"}, 585 | {file = "Pillow-9.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157"}, 586 | {file = "Pillow-9.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47"}, 587 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343"}, 588 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d"}, 589 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57"}, 590 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5"}, 591 | {file = "Pillow-9.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070"}, 592 | {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28"}, 593 | {file = "Pillow-9.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35"}, 594 | {file = "Pillow-9.4.0-cp310-cp310-win32.whl", hash = "sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a"}, 595 | {file = "Pillow-9.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391"}, 596 | {file = "Pillow-9.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133"}, 597 | {file = "Pillow-9.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132"}, 598 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0"}, 599 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35"}, 600 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab"}, 601 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4"}, 602 | {file = "Pillow-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d"}, 603 | {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8"}, 604 | {file = "Pillow-9.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a"}, 605 | {file = "Pillow-9.4.0-cp311-cp311-win32.whl", hash = "sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c"}, 606 | {file = "Pillow-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee"}, 607 | {file = "Pillow-9.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493"}, 608 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327"}, 609 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe"}, 610 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57"}, 611 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4"}, 612 | {file = "Pillow-9.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5"}, 613 | {file = "Pillow-9.4.0-cp37-cp37m-win32.whl", hash = "sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e"}, 614 | {file = "Pillow-9.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6"}, 615 | {file = "Pillow-9.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9"}, 616 | {file = "Pillow-9.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011"}, 617 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df"}, 618 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837"}, 619 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b"}, 620 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d"}, 621 | {file = "Pillow-9.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b"}, 622 | {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f"}, 623 | {file = "Pillow-9.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628"}, 624 | {file = "Pillow-9.4.0-cp38-cp38-win32.whl", hash = "sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d"}, 625 | {file = "Pillow-9.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a"}, 626 | {file = "Pillow-9.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569"}, 627 | {file = "Pillow-9.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed"}, 628 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815"}, 629 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264"}, 630 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e"}, 631 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503"}, 632 | {file = "Pillow-9.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6"}, 633 | {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2"}, 634 | {file = "Pillow-9.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153"}, 635 | {file = "Pillow-9.4.0-cp39-cp39-win32.whl", hash = "sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c"}, 636 | {file = "Pillow-9.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b"}, 637 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5"}, 638 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286"}, 639 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd"}, 640 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df"}, 641 | {file = "Pillow-9.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336"}, 642 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3"}, 643 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa"}, 644 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb"}, 645 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a"}, 646 | {file = "Pillow-9.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9"}, 647 | {file = "Pillow-9.4.0.tar.gz", hash = "sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e"}, 648 | ] 649 | 650 | [package.extras] 651 | docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinxext-opengraph"] 652 | tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] 653 | 654 | [[package]] 655 | name = "pluggy" 656 | version = "0.13.1" 657 | description = "plugin and hook calling mechanisms for python" 658 | category = "dev" 659 | optional = false 660 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 661 | files = [ 662 | {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, 663 | {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, 664 | ] 665 | 666 | [package.extras] 667 | dev = ["pre-commit", "tox"] 668 | 669 | [[package]] 670 | name = "protobuf" 671 | version = "3.20.3" 672 | description = "Protocol Buffers" 673 | category = "main" 674 | optional = false 675 | python-versions = ">=3.7" 676 | files = [ 677 | {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, 678 | {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, 679 | {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, 680 | {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, 681 | {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, 682 | {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, 683 | {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, 684 | {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, 685 | {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, 686 | {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, 687 | {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, 688 | {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, 689 | {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, 690 | {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, 691 | {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, 692 | {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, 693 | {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, 694 | {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, 695 | {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, 696 | {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, 697 | {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, 698 | {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, 699 | ] 700 | 701 | [[package]] 702 | name = "py" 703 | version = "1.11.0" 704 | description = "library with cross-python path, ini-parsing, io, code, log facilities" 705 | category = "dev" 706 | optional = false 707 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" 708 | files = [ 709 | {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, 710 | {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, 711 | ] 712 | 713 | [[package]] 714 | name = "pyarrow" 715 | version = "11.0.0" 716 | description = "Python library for Apache Arrow" 717 | category = "main" 718 | optional = false 719 | python-versions = ">=3.7" 720 | files = [ 721 | {file = "pyarrow-11.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:40bb42afa1053c35c749befbe72f6429b7b5f45710e85059cdd534553ebcf4f2"}, 722 | {file = "pyarrow-11.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7c28b5f248e08dea3b3e0c828b91945f431f4202f1a9fe84d1012a761324e1ba"}, 723 | {file = "pyarrow-11.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a37bc81f6c9435da3c9c1e767324ac3064ffbe110c4e460660c43e144be4ed85"}, 724 | {file = "pyarrow-11.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad7c53def8dbbc810282ad308cc46a523ec81e653e60a91c609c2233ae407689"}, 725 | {file = "pyarrow-11.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:25aa11c443b934078bfd60ed63e4e2d42461682b5ac10f67275ea21e60e6042c"}, 726 | {file = "pyarrow-11.0.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:e217d001e6389b20a6759392a5ec49d670757af80101ee6b5f2c8ff0172e02ca"}, 727 | {file = "pyarrow-11.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ad42bb24fc44c48f74f0d8c72a9af16ba9a01a2ccda5739a517aa860fa7e3d56"}, 728 | {file = "pyarrow-11.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d942c690ff24a08b07cb3df818f542a90e4d359381fbff71b8f2aea5bf58841"}, 729 | {file = "pyarrow-11.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f010ce497ca1b0f17a8243df3048055c0d18dcadbcc70895d5baf8921f753de5"}, 730 | {file = "pyarrow-11.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:2f51dc7ca940fdf17893227edb46b6784d37522ce08d21afc56466898cb213b2"}, 731 | {file = "pyarrow-11.0.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:1cbcfcbb0e74b4d94f0b7dde447b835a01bc1d16510edb8bb7d6224b9bf5bafc"}, 732 | {file = "pyarrow-11.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaee8f79d2a120bf3e032d6d64ad20b3af6f56241b0ffc38d201aebfee879d00"}, 733 | {file = "pyarrow-11.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:410624da0708c37e6a27eba321a72f29d277091c8f8d23f72c92bada4092eb5e"}, 734 | {file = "pyarrow-11.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2d53ba72917fdb71e3584ffc23ee4fcc487218f8ff29dd6df3a34c5c48fe8c06"}, 735 | {file = "pyarrow-11.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:f12932e5a6feb5c58192209af1d2607d488cb1d404fbc038ac12ada60327fa34"}, 736 | {file = "pyarrow-11.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:41a1451dd895c0b2964b83d91019e46f15b5564c7ecd5dcb812dadd3f05acc97"}, 737 | {file = "pyarrow-11.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:becc2344be80e5dce4e1b80b7c650d2fc2061b9eb339045035a1baa34d5b8f1c"}, 738 | {file = "pyarrow-11.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f40be0d7381112a398b93c45a7e69f60261e7b0269cc324e9f739ce272f4f70"}, 739 | {file = "pyarrow-11.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:362a7c881b32dc6b0eccf83411a97acba2774c10edcec715ccaab5ebf3bb0835"}, 740 | {file = "pyarrow-11.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ccbf29a0dadfcdd97632b4f7cca20a966bb552853ba254e874c66934931b9841"}, 741 | {file = "pyarrow-11.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e99be85973592051e46412accea31828da324531a060bd4585046a74ba45854"}, 742 | {file = "pyarrow-11.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69309be84dcc36422574d19c7d3a30a7ea43804f12552356d1ab2a82a713c418"}, 743 | {file = "pyarrow-11.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da93340fbf6f4e2a62815064383605b7ffa3e9eeb320ec839995b1660d69f89b"}, 744 | {file = "pyarrow-11.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:caad867121f182d0d3e1a0d36f197df604655d0b466f1bc9bafa903aa95083e4"}, 745 | {file = "pyarrow-11.0.0.tar.gz", hash = "sha256:5461c57dbdb211a632a48facb9b39bbeb8a7905ec95d768078525283caef5f6d"}, 746 | ] 747 | 748 | [package.dependencies] 749 | numpy = ">=1.16.6" 750 | 751 | [[package]] 752 | name = "pydeck" 753 | version = "0.8.0" 754 | description = "Widget for deck.gl maps" 755 | category = "main" 756 | optional = false 757 | python-versions = ">=3.7" 758 | files = [ 759 | {file = "pydeck-0.8.0-py2.py3-none-any.whl", hash = "sha256:a8fa7757c6f24bba033af39db3147cb020eef44012ba7e60d954de187f9ed4d5"}, 760 | {file = "pydeck-0.8.0.tar.gz", hash = "sha256:07edde833f7cfcef6749124351195aa7dcd24663d4909fd7898dbd0b6fbc01ec"}, 761 | ] 762 | 763 | [package.dependencies] 764 | jinja2 = ">=2.10.1" 765 | numpy = ">=1.16.4" 766 | 767 | [package.extras] 768 | carto = ["pydeck-carto"] 769 | jupyter = ["ipykernel (>=5.1.2)", "ipython (>=5.8.0)", "ipywidgets (>=7,<8)", "traitlets (>=4.3.2)"] 770 | 771 | [[package]] 772 | name = "pygments" 773 | version = "2.14.0" 774 | description = "Pygments is a syntax highlighting package written in Python." 775 | category = "main" 776 | optional = false 777 | python-versions = ">=3.6" 778 | files = [ 779 | {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, 780 | {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, 781 | ] 782 | 783 | [package.extras] 784 | plugins = ["importlib-metadata"] 785 | 786 | [[package]] 787 | name = "pympler" 788 | version = "1.0.1" 789 | description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." 790 | category = "main" 791 | optional = false 792 | python-versions = ">=3.6" 793 | files = [ 794 | {file = "Pympler-1.0.1-py3-none-any.whl", hash = "sha256:d260dda9ae781e1eab6ea15bacb84015849833ba5555f141d2d9b7b7473b307d"}, 795 | {file = "Pympler-1.0.1.tar.gz", hash = "sha256:993f1a3599ca3f4fcd7160c7545ad06310c9e12f70174ae7ae8d4e25f6c5d3fa"}, 796 | ] 797 | 798 | [[package]] 799 | name = "pyrsistent" 800 | version = "0.19.3" 801 | description = "Persistent/Functional/Immutable data structures" 802 | category = "main" 803 | optional = false 804 | python-versions = ">=3.7" 805 | files = [ 806 | {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, 807 | {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, 808 | {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, 809 | {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, 810 | {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, 811 | {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, 812 | {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, 813 | {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, 814 | {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, 815 | {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, 816 | {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, 817 | {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, 818 | {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, 819 | {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, 820 | {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, 821 | {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, 822 | {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, 823 | {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, 824 | {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, 825 | {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, 826 | {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, 827 | {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, 828 | {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, 829 | {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, 830 | {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, 831 | {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, 832 | {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, 833 | ] 834 | 835 | [[package]] 836 | name = "pytest" 837 | version = "6.0.1" 838 | description = "pytest: simple powerful testing with Python" 839 | category = "dev" 840 | optional = false 841 | python-versions = ">=3.5" 842 | files = [ 843 | {file = "pytest-6.0.1-py3-none-any.whl", hash = "sha256:8b6007800c53fdacd5a5c192203f4e531eb2a1540ad9c752e052ec0f7143dbad"}, 844 | {file = "pytest-6.0.1.tar.gz", hash = "sha256:85228d75db9f45e06e57ef9bf4429267f81ac7c0d742cc9ed63d09886a9fe6f4"}, 845 | ] 846 | 847 | [package.dependencies] 848 | atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} 849 | attrs = ">=17.4.0" 850 | colorama = {version = "*", markers = "sys_platform == \"win32\""} 851 | iniconfig = "*" 852 | more-itertools = ">=4.0.0" 853 | packaging = "*" 854 | pluggy = ">=0.12,<1.0" 855 | py = ">=1.8.2" 856 | toml = "*" 857 | 858 | [package.extras] 859 | checkqa-mypy = ["mypy (==0.780)"] 860 | testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] 861 | 862 | [[package]] 863 | name = "python-dateutil" 864 | version = "2.8.2" 865 | description = "Extensions to the standard Python datetime module" 866 | category = "main" 867 | optional = false 868 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 869 | files = [ 870 | {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, 871 | {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, 872 | ] 873 | 874 | [package.dependencies] 875 | six = ">=1.5" 876 | 877 | [[package]] 878 | name = "pytz" 879 | version = "2022.7.1" 880 | description = "World timezone definitions, modern and historical" 881 | category = "main" 882 | optional = false 883 | python-versions = "*" 884 | files = [ 885 | {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, 886 | {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, 887 | ] 888 | 889 | [[package]] 890 | name = "pytz-deprecation-shim" 891 | version = "0.1.0.post0" 892 | description = "Shims to make deprecation of pytz easier" 893 | category = "main" 894 | optional = false 895 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 896 | files = [ 897 | {file = "pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl", hash = "sha256:8314c9692a636c8eb3bda879b9f119e350e93223ae83e70e80c31675a0fdc1a6"}, 898 | {file = "pytz_deprecation_shim-0.1.0.post0.tar.gz", hash = "sha256:af097bae1b616dde5c5744441e2ddc69e74dfdcb0c263129610d85b87445a59d"}, 899 | ] 900 | 901 | [package.dependencies] 902 | tzdata = {version = "*", markers = "python_version >= \"3.6\""} 903 | 904 | [[package]] 905 | name = "requests" 906 | version = "2.28.2" 907 | description = "Python HTTP for Humans." 908 | category = "main" 909 | optional = false 910 | python-versions = ">=3.7, <4" 911 | files = [ 912 | {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, 913 | {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, 914 | ] 915 | 916 | [package.dependencies] 917 | certifi = ">=2017.4.17" 918 | charset-normalizer = ">=2,<4" 919 | idna = ">=2.5,<4" 920 | urllib3 = ">=1.21.1,<1.27" 921 | 922 | [package.extras] 923 | socks = ["PySocks (>=1.5.6,!=1.5.7)"] 924 | use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] 925 | 926 | [[package]] 927 | name = "rich" 928 | version = "13.3.2" 929 | description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" 930 | category = "main" 931 | optional = false 932 | python-versions = ">=3.7.0" 933 | files = [ 934 | {file = "rich-13.3.2-py3-none-any.whl", hash = "sha256:a104f37270bf677148d8acb07d33be1569eeee87e2d1beb286a4e9113caf6f2f"}, 935 | {file = "rich-13.3.2.tar.gz", hash = "sha256:91954fe80cfb7985727a467ca98a7618e5dd15178cc2da10f553b36a93859001"}, 936 | ] 937 | 938 | [package.dependencies] 939 | markdown-it-py = ">=2.2.0,<3.0.0" 940 | pygments = ">=2.13.0,<3.0.0" 941 | 942 | [package.extras] 943 | jupyter = ["ipywidgets (>=7.5.1,<9)"] 944 | 945 | [[package]] 946 | name = "semver" 947 | version = "2.13.0" 948 | description = "Python helper for Semantic Versioning (http://semver.org/)" 949 | category = "main" 950 | optional = false 951 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" 952 | files = [ 953 | {file = "semver-2.13.0-py2.py3-none-any.whl", hash = "sha256:ced8b23dceb22134307c1b8abfa523da14198793d9787ac838e70e29e77458d4"}, 954 | {file = "semver-2.13.0.tar.gz", hash = "sha256:fa0fe2722ee1c3f57eac478820c3a5ae2f624af8264cbdf9000c980ff7f75e3f"}, 955 | ] 956 | 957 | [[package]] 958 | name = "six" 959 | version = "1.16.0" 960 | description = "Python 2 and 3 compatibility utilities" 961 | category = "main" 962 | optional = false 963 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 964 | files = [ 965 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 966 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 967 | ] 968 | 969 | [[package]] 970 | name = "smmap" 971 | version = "5.0.0" 972 | description = "A pure Python implementation of a sliding window memory map manager" 973 | category = "main" 974 | optional = false 975 | python-versions = ">=3.6" 976 | files = [ 977 | {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, 978 | {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, 979 | ] 980 | 981 | [[package]] 982 | name = "streamlit" 983 | version = "1.20.0" 984 | description = "The fastest way to build data apps in Python" 985 | category = "main" 986 | optional = false 987 | python-versions = ">=3.7, !=3.9.7" 988 | files = [ 989 | {file = "streamlit-1.20.0-py2.py3-none-any.whl", hash = "sha256:41a544b8dc618ee65726da3ac76149c5b2bf3da7bde6d50625c4f7ec95e6c9e8"}, 990 | {file = "streamlit-1.20.0.tar.gz", hash = "sha256:f6e257e033a2532ce9b37c425717a4e885fa4d0e339fa5dcdbbda8d75ec191e9"}, 991 | ] 992 | 993 | [package.dependencies] 994 | altair = ">=3.2.0,<5" 995 | blinker = ">=1.0.0" 996 | cachetools = ">=4.0" 997 | click = ">=7.0" 998 | gitpython = "!=3.1.19" 999 | importlib-metadata = ">=1.4" 1000 | numpy = "*" 1001 | packaging = ">=14.1" 1002 | pandas = ">=0.25,<2" 1003 | pillow = ">=6.2.0" 1004 | protobuf = ">=3.12,<4" 1005 | pyarrow = ">=4.0" 1006 | pydeck = ">=0.1.dev5" 1007 | pympler = ">=0.9" 1008 | python-dateutil = "*" 1009 | requests = ">=2.4" 1010 | rich = ">=10.11.0" 1011 | semver = "*" 1012 | toml = "*" 1013 | tornado = ">=6.0.3" 1014 | typing-extensions = ">=3.10.0.0" 1015 | tzlocal = ">=1.1" 1016 | validators = ">=0.2" 1017 | watchdog = {version = "*", markers = "platform_system != \"Darwin\""} 1018 | 1019 | [package.extras] 1020 | snowflake = ["snowflake-snowpark-python"] 1021 | 1022 | [[package]] 1023 | name = "toml" 1024 | version = "0.10.2" 1025 | description = "Python Library for Tom's Obvious, Minimal Language" 1026 | category = "main" 1027 | optional = false 1028 | python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" 1029 | files = [ 1030 | {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, 1031 | {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "toolz" 1036 | version = "0.12.0" 1037 | description = "List processing tools and functional utilities" 1038 | category = "main" 1039 | optional = false 1040 | python-versions = ">=3.5" 1041 | files = [ 1042 | {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, 1043 | {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "tornado" 1048 | version = "6.2" 1049 | description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." 1050 | category = "main" 1051 | optional = false 1052 | python-versions = ">= 3.7" 1053 | files = [ 1054 | {file = "tornado-6.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:20f638fd8cc85f3cbae3c732326e96addff0a15e22d80f049e00121651e82e72"}, 1055 | {file = "tornado-6.2-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:87dcafae3e884462f90c90ecc200defe5e580a7fbbb4365eda7c7c1eb809ebc9"}, 1056 | {file = "tornado-6.2-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba09ef14ca9893954244fd872798b4ccb2367c165946ce2dd7376aebdde8e3ac"}, 1057 | {file = "tornado-6.2-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8150f721c101abdef99073bf66d3903e292d851bee51910839831caba341a75"}, 1058 | {file = "tornado-6.2-cp37-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3a2f5999215a3a06a4fc218026cd84c61b8b2b40ac5296a6db1f1451ef04c1e"}, 1059 | {file = "tornado-6.2-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c52d219d4995388119af7ccaa0bcec289535747620116a58d830e7c25d8a8"}, 1060 | {file = "tornado-6.2-cp37-abi3-musllinux_1_1_i686.whl", hash = "sha256:6fdfabffd8dfcb6cf887428849d30cf19a3ea34c2c248461e1f7d718ad30b66b"}, 1061 | {file = "tornado-6.2-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:1d54d13ab8414ed44de07efecb97d4ef7c39f7438cf5e976ccd356bebb1b5fca"}, 1062 | {file = "tornado-6.2-cp37-abi3-win32.whl", hash = "sha256:5c87076709343557ef8032934ce5f637dbb552efa7b21d08e89ae7619ed0eb23"}, 1063 | {file = "tornado-6.2-cp37-abi3-win_amd64.whl", hash = "sha256:e5f923aa6a47e133d1cf87d60700889d7eae68988704e20c75fb2d65677a8e4b"}, 1064 | {file = "tornado-6.2.tar.gz", hash = "sha256:9b630419bde84ec666bfd7ea0a4cb2a8a651c2d5cccdbdd1972a0c859dfc3c13"}, 1065 | ] 1066 | 1067 | [[package]] 1068 | name = "typing-extensions" 1069 | version = "4.5.0" 1070 | description = "Backported and Experimental Type Hints for Python 3.7+" 1071 | category = "main" 1072 | optional = false 1073 | python-versions = ">=3.7" 1074 | files = [ 1075 | {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, 1076 | {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, 1077 | ] 1078 | 1079 | [[package]] 1080 | name = "tzdata" 1081 | version = "2022.7" 1082 | description = "Provider of IANA time zone data" 1083 | category = "main" 1084 | optional = false 1085 | python-versions = ">=2" 1086 | files = [ 1087 | {file = "tzdata-2022.7-py2.py3-none-any.whl", hash = "sha256:2b88858b0e3120792a3c0635c23daf36a7d7eeeca657c323da299d2094402a0d"}, 1088 | {file = "tzdata-2022.7.tar.gz", hash = "sha256:fe5f866eddd8b96e9fcba978f8e503c909b19ea7efda11e52e39494bad3a7bfa"}, 1089 | ] 1090 | 1091 | [[package]] 1092 | name = "tzlocal" 1093 | version = "4.2" 1094 | description = "tzinfo object for the local timezone" 1095 | category = "main" 1096 | optional = false 1097 | python-versions = ">=3.6" 1098 | files = [ 1099 | {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, 1100 | {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"}, 1101 | ] 1102 | 1103 | [package.dependencies] 1104 | pytz-deprecation-shim = "*" 1105 | tzdata = {version = "*", markers = "platform_system == \"Windows\""} 1106 | 1107 | [package.extras] 1108 | devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] 1109 | test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"] 1110 | 1111 | [[package]] 1112 | name = "urllib3" 1113 | version = "1.26.15" 1114 | description = "HTTP library with thread-safe connection pooling, file post, and more." 1115 | category = "main" 1116 | optional = false 1117 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" 1118 | files = [ 1119 | {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, 1120 | {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, 1121 | ] 1122 | 1123 | [package.extras] 1124 | brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] 1125 | secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] 1126 | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] 1127 | 1128 | [[package]] 1129 | name = "validators" 1130 | version = "0.20.0" 1131 | description = "Python Data Validation for Humans™." 1132 | category = "main" 1133 | optional = false 1134 | python-versions = ">=3.4" 1135 | files = [ 1136 | {file = "validators-0.20.0.tar.gz", hash = "sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a"}, 1137 | ] 1138 | 1139 | [package.dependencies] 1140 | decorator = ">=3.4.0" 1141 | 1142 | [package.extras] 1143 | test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] 1144 | 1145 | [[package]] 1146 | name = "watchdog" 1147 | version = "2.3.1" 1148 | description = "Filesystem events monitoring" 1149 | category = "main" 1150 | optional = false 1151 | python-versions = ">=3.6" 1152 | files = [ 1153 | {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1f1200d4ec53b88bf04ab636f9133cb703eb19768a39351cee649de21a33697"}, 1154 | {file = "watchdog-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:564e7739abd4bd348aeafbf71cc006b6c0ccda3160c7053c4a53b67d14091d42"}, 1155 | {file = "watchdog-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:95ad708a9454050a46f741ba5e2f3468655ea22da1114e4c40b8cbdaca572565"}, 1156 | {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a073c91a6ef0dda488087669586768195c3080c66866144880f03445ca23ef16"}, 1157 | {file = "watchdog-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:aa8b028750b43e80eea9946d01925168eeadb488dfdef1d82be4b1e28067f375"}, 1158 | {file = "watchdog-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964fd236cd443933268ae49b59706569c8b741073dbfd7ca705492bae9d39aab"}, 1159 | {file = "watchdog-2.3.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:91fd146d723392b3e6eb1ac21f122fcce149a194a2ba0a82c5e4d0ee29cd954c"}, 1160 | {file = "watchdog-2.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efe3252137392a471a2174d721e1037a0e6a5da7beb72a021e662b7000a9903f"}, 1161 | {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85bf2263290591b7c5fa01140601b64c831be88084de41efbcba6ea289874f44"}, 1162 | {file = "watchdog-2.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f2df370cd8e4e18499dd0bfdef476431bcc396108b97195d9448d90924e3131"}, 1163 | {file = "watchdog-2.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ea5d86d1bcf4a9d24610aa2f6f25492f441960cf04aed2bd9a97db439b643a7b"}, 1164 | {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6f5d0f7eac86807275eba40b577c671b306f6f335ba63a5c5a348da151aba0fc"}, 1165 | {file = "watchdog-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b848c71ef2b15d0ef02f69da8cc120d335cec0ed82a3fa7779e27a5a8527225"}, 1166 | {file = "watchdog-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0d9878be36d2b9271e3abaa6f4f051b363ff54dbbe7e7df1af3c920e4311ee43"}, 1167 | {file = "watchdog-2.3.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cd61f98cb37143206818cb1786d2438626aa78d682a8f2ecee239055a9771d5"}, 1168 | {file = "watchdog-2.3.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3d2dbcf1acd96e7a9c9aefed201c47c8e311075105d94ce5e899f118155709fd"}, 1169 | {file = "watchdog-2.3.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:03f342a9432fe08107defbe8e405a2cb922c5d00c4c6c168c68b633c64ce6190"}, 1170 | {file = "watchdog-2.3.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7a596f9415a378d0339681efc08d2249e48975daae391d58f2e22a3673b977cf"}, 1171 | {file = "watchdog-2.3.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:0e1dd6d449267cc7d6935d7fe27ee0426af6ee16578eed93bacb1be9ff824d2d"}, 1172 | {file = "watchdog-2.3.1-py3-none-manylinux2014_i686.whl", hash = "sha256:7a1876f660e32027a1a46f8a0fa5747ad4fcf86cb451860eae61a26e102c8c79"}, 1173 | {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:2caf77ae137935c1466f8cefd4a3aec7017b6969f425d086e6a528241cba7256"}, 1174 | {file = "watchdog-2.3.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:53f3e95081280898d9e4fc51c5c69017715929e4eea1ab45801d5e903dd518ad"}, 1175 | {file = "watchdog-2.3.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:9da7acb9af7e4a272089bd2af0171d23e0d6271385c51d4d9bde91fe918c53ed"}, 1176 | {file = "watchdog-2.3.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:8a4d484e846dcd75e96b96d80d80445302621be40e293bfdf34a631cab3b33dc"}, 1177 | {file = "watchdog-2.3.1-py3-none-win32.whl", hash = "sha256:a74155398434937ac2780fd257c045954de5b11b5c52fc844e2199ce3eecf4cf"}, 1178 | {file = "watchdog-2.3.1-py3-none-win_amd64.whl", hash = "sha256:5defe4f0918a2a1a4afbe4dbb967f743ac3a93d546ea4674567806375b024adb"}, 1179 | {file = "watchdog-2.3.1-py3-none-win_ia64.whl", hash = "sha256:4109cccf214b7e3462e8403ab1e5b17b302ecce6c103eb2fc3afa534a7f27b96"}, 1180 | {file = "watchdog-2.3.1.tar.gz", hash = "sha256:d9f9ed26ed22a9d331820a8432c3680707ea8b54121ddcc9dc7d9f2ceeb36906"}, 1181 | ] 1182 | 1183 | [package.extras] 1184 | watchmedo = ["PyYAML (>=3.10)"] 1185 | 1186 | [[package]] 1187 | name = "zipp" 1188 | version = "3.15.0" 1189 | description = "Backport of pathlib-compatible object wrapper for zip files" 1190 | category = "main" 1191 | optional = false 1192 | python-versions = ">=3.7" 1193 | files = [ 1194 | {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, 1195 | {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, 1196 | ] 1197 | 1198 | [package.extras] 1199 | docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] 1200 | testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] 1201 | 1202 | [metadata] 1203 | lock-version = "2.0" 1204 | python-versions = ">=3.9.12,<3.12" 1205 | content-hash = "8c6ced18bb2c06db2f41ee6a2b8f0f12aada7c31a46a4ab94b5deaae17a2f99f" 1206 | -------------------------------------------------------------------------------- /example/local/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "streamlit-msal-dashboard" 3 | version = "1.0.1" 4 | description = "" 5 | authors = ["Michael Staal-Olsen"] 6 | packages=[{ include="app"},] 7 | 8 | [tool.poetry.dependencies] 9 | python = ">=3.9.12,<=3.12" 10 | streamlit = "*" 11 | msal-streamlit-authentication="1.0.7" 12 | 13 | [tool.poetry.group.dev.dependencies] 14 | pytest = "6.0.1" 15 | 16 | [build-system] 17 | requires = ["poetry-core>=1.0.0"] 18 | build-backend = "poetry.core.masonry.api" 19 | -------------------------------------------------------------------------------- /example/ploomber/.env.example: -------------------------------------------------------------------------------- 1 | ENTRA_CLIENT_ID= 2 | ENTRA_TENANT_ID= 3 | ENTRA_REDIRECT_URI= 4 | -------------------------------------------------------------------------------- /example/ploomber/.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /example/ploomber/README.md: -------------------------------------------------------------------------------- 1 | # Deploy Streamlit with MSAL Protection on Ploomber 2 | 3 | This guide walks you through protecting your Streamlit application with Microsoft Authentication Library (MSAL) using Ploomber deployment. 4 | 5 | ## Prerequisites 6 | - An active Azure/Microsoft Entra ID account 7 | - A Ploomber Cloud account 8 | 9 | ## Step 1: Configure Azure/Microsoft Entra ID 10 | 11 | 1. Register a new Single Page Application in [Microsoft Entra ID](https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-app-registration) 12 | 2. During registration: 13 | - For your callback URI, enter your domain or your Ploomber URL (e.g., `https://entra-demo.ploomber.app`. See 2. to know more about Ploomber URL) 14 | 15 |
16 | Create App in Entra ID 17 |
18 | 19 | ## Step 2: Deploy on Ploomber Cloud 20 | 21 | 1. Navigate to [Ploomber Cloud Platform](https://www.platform.ploomber.io/applications/create?utm_medium=github&utm_source=msal) 22 | 2. Click "New" to create a new deployment 23 | 3. Configure the following: 24 | - Upload this folder as a Zip, and choose the Streamlit Deployment 25 | - Application Name: Match the name entered in Entra ID so your URL match 26 | - If no name is provided, a random one will be assigned 27 | - You'll need to deploy once to get your domain in this case, then redeploy after completing all steps 28 | 4. Add the following secrets in the secrets section as shown bellow: 29 | ``` 30 | ENTRA_CLIENT_ID= 31 | ENTRA_TENANT_ID= 32 | ENTRA_REDIRECT_URI=https://entra-demo.ploomber.app 33 | ``` 34 | 35 |
36 | Ploomber Deployment Configuration 37 |
38 | 39 | > [!TIP] 40 | > **Ploomber supports custom domains & subdomains**: you can bring your own and set it up in the 41 | > application settings after the first deployment. If you choose to do so, instead of `https://entra-demo.ploomber.app`, 42 | > enter your custom domain. 43 | 44 | ## Step 3: Deploy and Verify 45 | 46 | 1. Click "CREATE" to deploy your application 47 | 2. Once the URL is up, navigate to your app, and it will be protected 48 | 49 |
50 | Successful Deployment 51 |
52 | 53 | ## Ressources: 54 | 55 | - [Ploomber Documentation](https://docs.cloud.ploomber.io/en/latest/intro.html?utm_medium=github&utm_source=msal) 56 | - [Ploomber Community](https://ploomber.io/community/?utm_medium=github&utm_source=msal) 57 | 58 | ## Local Development Setup 59 | 60 | 1. Install the required package: 61 | ```bash 62 | pip install python-dotenv 63 | ``` 64 | 65 | 2. Load environment variables at the beginning of your file: 66 | ```python 67 | from dotenv import load_dotenv 68 | load_dotenv() 69 | ``` 70 | 71 | > [!IMPORTANT] 72 | > Don't forget to add your `.env` to your `.gitignore` 73 | -------------------------------------------------------------------------------- /example/ploomber/app.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | import os 3 | 4 | from msal_streamlit_authentication import msal_authentication 5 | 6 | st.title("Streamlit MSAL Anthentication 🔒") 7 | 8 | value = msal_authentication( 9 | auth={ 10 | "clientId": os.getenv("ENTRA_CLIENT_ID"), 11 | "authority": f"https://login.microsoftonline.com/{os.getenv('ENTRA_TENANT_ID')}", 12 | "redirectUri": os.getenv("ENTRA_REDIRECT_URI"), 13 | "postLogoutRedirectUri": "/" 14 | }, 15 | cache={ 16 | "cacheLocation": "sessionStorage", 17 | "storeAuthStateInCookie": False 18 | }, 19 | login_request={ 20 | "scopes": ["https://graph.microsoft.com/.default"] 21 | }, 22 | key="1") 23 | 24 | st.write("Received", value) 25 | -------------------------------------------------------------------------------- /example/ploomber/requirements.txt: -------------------------------------------------------------------------------- 1 | streamlit 2 | msal-streamlit-authentication==1.0.7 3 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | from pathlib import Path 3 | import streamlit.components.v1 as components 4 | 5 | 6 | _USE_WEB_DEV_SERVER = os.getenv("USE_WEB_DEV_SERVER", False) 7 | _WEB_DEV_SERVER_URL = os.getenv("WEB_DEV_SERVER_URL", "http://localhost:5173") 8 | COMPONENT_NAME = "msal_authentication" 9 | 10 | if _USE_WEB_DEV_SERVER: 11 | _component_func = components.declare_component(name=COMPONENT_NAME, url=_WEB_DEV_SERVER_URL) 12 | else: 13 | build_dir = str(Path(__file__).parent / "frontend" / "dist") 14 | _component_func = components.declare_component(name=COMPONENT_NAME, path=build_dir) 15 | 16 | 17 | def msal_authentication( 18 | auth, 19 | cache, 20 | login_request=None, 21 | logout_request=None, 22 | login_button_text="Login", 23 | logout_button_text="Logout", 24 | class_name=None, 25 | html_id=None, 26 | key=None 27 | ): 28 | authenticated_user_profile = _component_func( 29 | auth=auth, 30 | cache=cache, 31 | login_request=login_request, 32 | logout_request=logout_request, 33 | login_button_text=login_button_text, 34 | logout_button_text=logout_button_text, 35 | class_name=class_name, 36 | html_id=html_id, 37 | default=None, 38 | key=str(key) 39 | ) 40 | return authenticated_user_profile 41 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | MSAL Authentication 7 | 8 | 9 |
10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "msal-streamlit-component", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "msal-streamlit-component", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@azure/msal-browser": "^3.26.1", 13 | "react": "^18.3.1", 14 | "react-dom": "^18.3.1", 15 | "streamlit-component-lib": "^2.0.0" 16 | }, 17 | "devDependencies": { 18 | "@types/react": "^18.3.12", 19 | "@types/react-dom": "^18.3.1", 20 | "@vitejs/plugin-react": "^4.3.3", 21 | "typescript": "^5.6.3", 22 | "vite": "^5.4.10" 23 | } 24 | }, 25 | "node_modules/@ampproject/remapping": { 26 | "version": "2.3.0", 27 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 28 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 29 | "dev": true, 30 | "dependencies": { 31 | "@jridgewell/gen-mapping": "^0.3.5", 32 | "@jridgewell/trace-mapping": "^0.3.24" 33 | }, 34 | "engines": { 35 | "node": ">=6.0.0" 36 | } 37 | }, 38 | "node_modules/@azure/msal-browser": { 39 | "version": "3.26.1", 40 | "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.26.1.tgz", 41 | "integrity": "sha512-y78sr9g61aCAH9fcLO1um+oHFXc1/5Ap88RIsUSuzkm0BHzFnN+PXGaQeuM1h5Qf5dTnWNOd6JqkskkMPAhh7Q==", 42 | "dependencies": { 43 | "@azure/msal-common": "14.15.0" 44 | }, 45 | "engines": { 46 | "node": ">=0.8.0" 47 | } 48 | }, 49 | "node_modules/@azure/msal-common": { 50 | "version": "14.15.0", 51 | "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.15.0.tgz", 52 | "integrity": "sha512-ImAQHxmpMneJ/4S8BRFhjt1MZ3bppmpRPYYNyzeQPeFN288YKbb8TmmISQEbtfkQ1BPASvYZU5doIZOPBAqENQ==", 53 | "engines": { 54 | "node": ">=0.8.0" 55 | } 56 | }, 57 | "node_modules/@babel/code-frame": { 58 | "version": "7.26.0", 59 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.0.tgz", 60 | "integrity": "sha512-INCKxTtbXtcNbUZ3YXutwMpEleqttcswhAdee7dhuoVrD2cnuc3PqtERBtxkX5nziX9vnBL8WXmSGwv8CuPV6g==", 61 | "dev": true, 62 | "dependencies": { 63 | "@babel/helper-validator-identifier": "^7.25.9", 64 | "js-tokens": "^4.0.0", 65 | "picocolors": "^1.0.0" 66 | }, 67 | "engines": { 68 | "node": ">=6.9.0" 69 | } 70 | }, 71 | "node_modules/@babel/compat-data": { 72 | "version": "7.26.0", 73 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.0.tgz", 74 | "integrity": "sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==", 75 | "dev": true, 76 | "engines": { 77 | "node": ">=6.9.0" 78 | } 79 | }, 80 | "node_modules/@babel/core": { 81 | "version": "7.26.0", 82 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", 83 | "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", 84 | "dev": true, 85 | "dependencies": { 86 | "@ampproject/remapping": "^2.2.0", 87 | "@babel/code-frame": "^7.26.0", 88 | "@babel/generator": "^7.26.0", 89 | "@babel/helper-compilation-targets": "^7.25.9", 90 | "@babel/helper-module-transforms": "^7.26.0", 91 | "@babel/helpers": "^7.26.0", 92 | "@babel/parser": "^7.26.0", 93 | "@babel/template": "^7.25.9", 94 | "@babel/traverse": "^7.25.9", 95 | "@babel/types": "^7.26.0", 96 | "convert-source-map": "^2.0.0", 97 | "debug": "^4.1.0", 98 | "gensync": "^1.0.0-beta.2", 99 | "json5": "^2.2.3", 100 | "semver": "^6.3.1" 101 | }, 102 | "engines": { 103 | "node": ">=6.9.0" 104 | }, 105 | "funding": { 106 | "type": "opencollective", 107 | "url": "https://opencollective.com/babel" 108 | } 109 | }, 110 | "node_modules/@babel/generator": { 111 | "version": "7.26.0", 112 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.0.tgz", 113 | "integrity": "sha512-/AIkAmInnWwgEAJGQr9vY0c66Mj6kjkE2ZPB1PurTRaRAh3U+J45sAQMjQDJdh4WbR3l0x5xkimXBKyBXXAu2w==", 114 | "dev": true, 115 | "dependencies": { 116 | "@babel/parser": "^7.26.0", 117 | "@babel/types": "^7.26.0", 118 | "@jridgewell/gen-mapping": "^0.3.5", 119 | "@jridgewell/trace-mapping": "^0.3.25", 120 | "jsesc": "^3.0.2" 121 | }, 122 | "engines": { 123 | "node": ">=6.9.0" 124 | } 125 | }, 126 | "node_modules/@babel/helper-compilation-targets": { 127 | "version": "7.25.9", 128 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", 129 | "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", 130 | "dev": true, 131 | "dependencies": { 132 | "@babel/compat-data": "^7.25.9", 133 | "@babel/helper-validator-option": "^7.25.9", 134 | "browserslist": "^4.24.0", 135 | "lru-cache": "^5.1.1", 136 | "semver": "^6.3.1" 137 | }, 138 | "engines": { 139 | "node": ">=6.9.0" 140 | } 141 | }, 142 | "node_modules/@babel/helper-module-imports": { 143 | "version": "7.25.9", 144 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", 145 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", 146 | "dev": true, 147 | "dependencies": { 148 | "@babel/traverse": "^7.25.9", 149 | "@babel/types": "^7.25.9" 150 | }, 151 | "engines": { 152 | "node": ">=6.9.0" 153 | } 154 | }, 155 | "node_modules/@babel/helper-module-transforms": { 156 | "version": "7.26.0", 157 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", 158 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", 159 | "dev": true, 160 | "dependencies": { 161 | "@babel/helper-module-imports": "^7.25.9", 162 | "@babel/helper-validator-identifier": "^7.25.9", 163 | "@babel/traverse": "^7.25.9" 164 | }, 165 | "engines": { 166 | "node": ">=6.9.0" 167 | }, 168 | "peerDependencies": { 169 | "@babel/core": "^7.0.0" 170 | } 171 | }, 172 | "node_modules/@babel/helper-plugin-utils": { 173 | "version": "7.25.9", 174 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", 175 | "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", 176 | "dev": true, 177 | "engines": { 178 | "node": ">=6.9.0" 179 | } 180 | }, 181 | "node_modules/@babel/helper-string-parser": { 182 | "version": "7.25.9", 183 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 184 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 185 | "dev": true, 186 | "engines": { 187 | "node": ">=6.9.0" 188 | } 189 | }, 190 | "node_modules/@babel/helper-validator-identifier": { 191 | "version": "7.25.9", 192 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 193 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 194 | "dev": true, 195 | "engines": { 196 | "node": ">=6.9.0" 197 | } 198 | }, 199 | "node_modules/@babel/helper-validator-option": { 200 | "version": "7.25.9", 201 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", 202 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", 203 | "dev": true, 204 | "engines": { 205 | "node": ">=6.9.0" 206 | } 207 | }, 208 | "node_modules/@babel/helpers": { 209 | "version": "7.26.0", 210 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", 211 | "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", 212 | "dev": true, 213 | "dependencies": { 214 | "@babel/template": "^7.25.9", 215 | "@babel/types": "^7.26.0" 216 | }, 217 | "engines": { 218 | "node": ">=6.9.0" 219 | } 220 | }, 221 | "node_modules/@babel/parser": { 222 | "version": "7.26.1", 223 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.1.tgz", 224 | "integrity": "sha512-reoQYNiAJreZNsJzyrDNzFQ+IQ5JFiIzAHJg9bn94S3l+4++J7RsIhNMoB+lgP/9tpmiAQqspv+xfdxTSzREOw==", 225 | "dev": true, 226 | "dependencies": { 227 | "@babel/types": "^7.26.0" 228 | }, 229 | "bin": { 230 | "parser": "bin/babel-parser.js" 231 | }, 232 | "engines": { 233 | "node": ">=6.0.0" 234 | } 235 | }, 236 | "node_modules/@babel/plugin-transform-react-jsx-self": { 237 | "version": "7.25.9", 238 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", 239 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", 240 | "dev": true, 241 | "dependencies": { 242 | "@babel/helper-plugin-utils": "^7.25.9" 243 | }, 244 | "engines": { 245 | "node": ">=6.9.0" 246 | }, 247 | "peerDependencies": { 248 | "@babel/core": "^7.0.0-0" 249 | } 250 | }, 251 | "node_modules/@babel/plugin-transform-react-jsx-source": { 252 | "version": "7.25.9", 253 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", 254 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", 255 | "dev": true, 256 | "dependencies": { 257 | "@babel/helper-plugin-utils": "^7.25.9" 258 | }, 259 | "engines": { 260 | "node": ">=6.9.0" 261 | }, 262 | "peerDependencies": { 263 | "@babel/core": "^7.0.0-0" 264 | } 265 | }, 266 | "node_modules/@babel/template": { 267 | "version": "7.25.9", 268 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", 269 | "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", 270 | "dev": true, 271 | "dependencies": { 272 | "@babel/code-frame": "^7.25.9", 273 | "@babel/parser": "^7.25.9", 274 | "@babel/types": "^7.25.9" 275 | }, 276 | "engines": { 277 | "node": ">=6.9.0" 278 | } 279 | }, 280 | "node_modules/@babel/traverse": { 281 | "version": "7.25.9", 282 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", 283 | "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", 284 | "dev": true, 285 | "dependencies": { 286 | "@babel/code-frame": "^7.25.9", 287 | "@babel/generator": "^7.25.9", 288 | "@babel/parser": "^7.25.9", 289 | "@babel/template": "^7.25.9", 290 | "@babel/types": "^7.25.9", 291 | "debug": "^4.3.1", 292 | "globals": "^11.1.0" 293 | }, 294 | "engines": { 295 | "node": ">=6.9.0" 296 | } 297 | }, 298 | "node_modules/@babel/types": { 299 | "version": "7.26.0", 300 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", 301 | "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", 302 | "dev": true, 303 | "dependencies": { 304 | "@babel/helper-string-parser": "^7.25.9", 305 | "@babel/helper-validator-identifier": "^7.25.9" 306 | }, 307 | "engines": { 308 | "node": ">=6.9.0" 309 | } 310 | }, 311 | "node_modules/@esbuild/aix-ppc64": { 312 | "version": "0.21.5", 313 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 314 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 315 | "cpu": [ 316 | "ppc64" 317 | ], 318 | "dev": true, 319 | "optional": true, 320 | "os": [ 321 | "aix" 322 | ], 323 | "engines": { 324 | "node": ">=12" 325 | } 326 | }, 327 | "node_modules/@esbuild/android-arm": { 328 | "version": "0.21.5", 329 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 330 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 331 | "cpu": [ 332 | "arm" 333 | ], 334 | "dev": true, 335 | "optional": true, 336 | "os": [ 337 | "android" 338 | ], 339 | "engines": { 340 | "node": ">=12" 341 | } 342 | }, 343 | "node_modules/@esbuild/android-arm64": { 344 | "version": "0.21.5", 345 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 346 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 347 | "cpu": [ 348 | "arm64" 349 | ], 350 | "dev": true, 351 | "optional": true, 352 | "os": [ 353 | "android" 354 | ], 355 | "engines": { 356 | "node": ">=12" 357 | } 358 | }, 359 | "node_modules/@esbuild/android-x64": { 360 | "version": "0.21.5", 361 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 362 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 363 | "cpu": [ 364 | "x64" 365 | ], 366 | "dev": true, 367 | "optional": true, 368 | "os": [ 369 | "android" 370 | ], 371 | "engines": { 372 | "node": ">=12" 373 | } 374 | }, 375 | "node_modules/@esbuild/darwin-arm64": { 376 | "version": "0.21.5", 377 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 378 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 379 | "cpu": [ 380 | "arm64" 381 | ], 382 | "dev": true, 383 | "optional": true, 384 | "os": [ 385 | "darwin" 386 | ], 387 | "engines": { 388 | "node": ">=12" 389 | } 390 | }, 391 | "node_modules/@esbuild/darwin-x64": { 392 | "version": "0.21.5", 393 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 394 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 395 | "cpu": [ 396 | "x64" 397 | ], 398 | "dev": true, 399 | "optional": true, 400 | "os": [ 401 | "darwin" 402 | ], 403 | "engines": { 404 | "node": ">=12" 405 | } 406 | }, 407 | "node_modules/@esbuild/freebsd-arm64": { 408 | "version": "0.21.5", 409 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 410 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 411 | "cpu": [ 412 | "arm64" 413 | ], 414 | "dev": true, 415 | "optional": true, 416 | "os": [ 417 | "freebsd" 418 | ], 419 | "engines": { 420 | "node": ">=12" 421 | } 422 | }, 423 | "node_modules/@esbuild/freebsd-x64": { 424 | "version": "0.21.5", 425 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 426 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 427 | "cpu": [ 428 | "x64" 429 | ], 430 | "dev": true, 431 | "optional": true, 432 | "os": [ 433 | "freebsd" 434 | ], 435 | "engines": { 436 | "node": ">=12" 437 | } 438 | }, 439 | "node_modules/@esbuild/linux-arm": { 440 | "version": "0.21.5", 441 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 442 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 443 | "cpu": [ 444 | "arm" 445 | ], 446 | "dev": true, 447 | "optional": true, 448 | "os": [ 449 | "linux" 450 | ], 451 | "engines": { 452 | "node": ">=12" 453 | } 454 | }, 455 | "node_modules/@esbuild/linux-arm64": { 456 | "version": "0.21.5", 457 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 458 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 459 | "cpu": [ 460 | "arm64" 461 | ], 462 | "dev": true, 463 | "optional": true, 464 | "os": [ 465 | "linux" 466 | ], 467 | "engines": { 468 | "node": ">=12" 469 | } 470 | }, 471 | "node_modules/@esbuild/linux-ia32": { 472 | "version": "0.21.5", 473 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 474 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 475 | "cpu": [ 476 | "ia32" 477 | ], 478 | "dev": true, 479 | "optional": true, 480 | "os": [ 481 | "linux" 482 | ], 483 | "engines": { 484 | "node": ">=12" 485 | } 486 | }, 487 | "node_modules/@esbuild/linux-loong64": { 488 | "version": "0.21.5", 489 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 490 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 491 | "cpu": [ 492 | "loong64" 493 | ], 494 | "dev": true, 495 | "optional": true, 496 | "os": [ 497 | "linux" 498 | ], 499 | "engines": { 500 | "node": ">=12" 501 | } 502 | }, 503 | "node_modules/@esbuild/linux-mips64el": { 504 | "version": "0.21.5", 505 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 506 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 507 | "cpu": [ 508 | "mips64el" 509 | ], 510 | "dev": true, 511 | "optional": true, 512 | "os": [ 513 | "linux" 514 | ], 515 | "engines": { 516 | "node": ">=12" 517 | } 518 | }, 519 | "node_modules/@esbuild/linux-ppc64": { 520 | "version": "0.21.5", 521 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 522 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 523 | "cpu": [ 524 | "ppc64" 525 | ], 526 | "dev": true, 527 | "optional": true, 528 | "os": [ 529 | "linux" 530 | ], 531 | "engines": { 532 | "node": ">=12" 533 | } 534 | }, 535 | "node_modules/@esbuild/linux-riscv64": { 536 | "version": "0.21.5", 537 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 538 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 539 | "cpu": [ 540 | "riscv64" 541 | ], 542 | "dev": true, 543 | "optional": true, 544 | "os": [ 545 | "linux" 546 | ], 547 | "engines": { 548 | "node": ">=12" 549 | } 550 | }, 551 | "node_modules/@esbuild/linux-s390x": { 552 | "version": "0.21.5", 553 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 554 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 555 | "cpu": [ 556 | "s390x" 557 | ], 558 | "dev": true, 559 | "optional": true, 560 | "os": [ 561 | "linux" 562 | ], 563 | "engines": { 564 | "node": ">=12" 565 | } 566 | }, 567 | "node_modules/@esbuild/linux-x64": { 568 | "version": "0.21.5", 569 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 570 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 571 | "cpu": [ 572 | "x64" 573 | ], 574 | "dev": true, 575 | "optional": true, 576 | "os": [ 577 | "linux" 578 | ], 579 | "engines": { 580 | "node": ">=12" 581 | } 582 | }, 583 | "node_modules/@esbuild/netbsd-x64": { 584 | "version": "0.21.5", 585 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 586 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 587 | "cpu": [ 588 | "x64" 589 | ], 590 | "dev": true, 591 | "optional": true, 592 | "os": [ 593 | "netbsd" 594 | ], 595 | "engines": { 596 | "node": ">=12" 597 | } 598 | }, 599 | "node_modules/@esbuild/openbsd-x64": { 600 | "version": "0.21.5", 601 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 602 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 603 | "cpu": [ 604 | "x64" 605 | ], 606 | "dev": true, 607 | "optional": true, 608 | "os": [ 609 | "openbsd" 610 | ], 611 | "engines": { 612 | "node": ">=12" 613 | } 614 | }, 615 | "node_modules/@esbuild/sunos-x64": { 616 | "version": "0.21.5", 617 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 618 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 619 | "cpu": [ 620 | "x64" 621 | ], 622 | "dev": true, 623 | "optional": true, 624 | "os": [ 625 | "sunos" 626 | ], 627 | "engines": { 628 | "node": ">=12" 629 | } 630 | }, 631 | "node_modules/@esbuild/win32-arm64": { 632 | "version": "0.21.5", 633 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 634 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 635 | "cpu": [ 636 | "arm64" 637 | ], 638 | "dev": true, 639 | "optional": true, 640 | "os": [ 641 | "win32" 642 | ], 643 | "engines": { 644 | "node": ">=12" 645 | } 646 | }, 647 | "node_modules/@esbuild/win32-ia32": { 648 | "version": "0.21.5", 649 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 650 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 651 | "cpu": [ 652 | "ia32" 653 | ], 654 | "dev": true, 655 | "optional": true, 656 | "os": [ 657 | "win32" 658 | ], 659 | "engines": { 660 | "node": ">=12" 661 | } 662 | }, 663 | "node_modules/@esbuild/win32-x64": { 664 | "version": "0.21.5", 665 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 666 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 667 | "cpu": [ 668 | "x64" 669 | ], 670 | "dev": true, 671 | "optional": true, 672 | "os": [ 673 | "win32" 674 | ], 675 | "engines": { 676 | "node": ">=12" 677 | } 678 | }, 679 | "node_modules/@jridgewell/gen-mapping": { 680 | "version": "0.3.5", 681 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 682 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 683 | "dev": true, 684 | "dependencies": { 685 | "@jridgewell/set-array": "^1.2.1", 686 | "@jridgewell/sourcemap-codec": "^1.4.10", 687 | "@jridgewell/trace-mapping": "^0.3.24" 688 | }, 689 | "engines": { 690 | "node": ">=6.0.0" 691 | } 692 | }, 693 | "node_modules/@jridgewell/resolve-uri": { 694 | "version": "3.1.2", 695 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 696 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 697 | "dev": true, 698 | "engines": { 699 | "node": ">=6.0.0" 700 | } 701 | }, 702 | "node_modules/@jridgewell/set-array": { 703 | "version": "1.2.1", 704 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 705 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 706 | "dev": true, 707 | "engines": { 708 | "node": ">=6.0.0" 709 | } 710 | }, 711 | "node_modules/@jridgewell/sourcemap-codec": { 712 | "version": "1.5.0", 713 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 714 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 715 | "dev": true 716 | }, 717 | "node_modules/@jridgewell/trace-mapping": { 718 | "version": "0.3.25", 719 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 720 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 721 | "dev": true, 722 | "dependencies": { 723 | "@jridgewell/resolve-uri": "^3.1.0", 724 | "@jridgewell/sourcemap-codec": "^1.4.14" 725 | } 726 | }, 727 | "node_modules/@rollup/rollup-android-arm-eabi": { 728 | "version": "4.24.2", 729 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.2.tgz", 730 | "integrity": "sha512-ufoveNTKDg9t/b7nqI3lwbCG/9IJMhADBNjjz/Jn6LxIZxD7T5L8l2uO/wD99945F1Oo8FvgbbZJRguyk/BdzA==", 731 | "cpu": [ 732 | "arm" 733 | ], 734 | "dev": true, 735 | "optional": true, 736 | "os": [ 737 | "android" 738 | ] 739 | }, 740 | "node_modules/@rollup/rollup-android-arm64": { 741 | "version": "4.24.2", 742 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.2.tgz", 743 | "integrity": "sha512-iZoYCiJz3Uek4NI0J06/ZxUgwAfNzqltK0MptPDO4OR0a88R4h0DSELMsflS6ibMCJ4PnLvq8f7O1d7WexUvIA==", 744 | "cpu": [ 745 | "arm64" 746 | ], 747 | "dev": true, 748 | "optional": true, 749 | "os": [ 750 | "android" 751 | ] 752 | }, 753 | "node_modules/@rollup/rollup-darwin-arm64": { 754 | "version": "4.24.2", 755 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.2.tgz", 756 | "integrity": "sha512-/UhrIxobHYCBfhi5paTkUDQ0w+jckjRZDZ1kcBL132WeHZQ6+S5v9jQPVGLVrLbNUebdIRpIt00lQ+4Z7ys4Rg==", 757 | "cpu": [ 758 | "arm64" 759 | ], 760 | "dev": true, 761 | "optional": true, 762 | "os": [ 763 | "darwin" 764 | ] 765 | }, 766 | "node_modules/@rollup/rollup-darwin-x64": { 767 | "version": "4.24.2", 768 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.2.tgz", 769 | "integrity": "sha512-1F/jrfhxJtWILusgx63WeTvGTwE4vmsT9+e/z7cZLKU8sBMddwqw3UV5ERfOV+H1FuRK3YREZ46J4Gy0aP3qDA==", 770 | "cpu": [ 771 | "x64" 772 | ], 773 | "dev": true, 774 | "optional": true, 775 | "os": [ 776 | "darwin" 777 | ] 778 | }, 779 | "node_modules/@rollup/rollup-freebsd-arm64": { 780 | "version": "4.24.2", 781 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.2.tgz", 782 | "integrity": "sha512-1YWOpFcGuC6iGAS4EI+o3BV2/6S0H+m9kFOIlyFtp4xIX5rjSnL3AwbTBxROX0c8yWtiWM7ZI6mEPTI7VkSpZw==", 783 | "cpu": [ 784 | "arm64" 785 | ], 786 | "dev": true, 787 | "optional": true, 788 | "os": [ 789 | "freebsd" 790 | ] 791 | }, 792 | "node_modules/@rollup/rollup-freebsd-x64": { 793 | "version": "4.24.2", 794 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.2.tgz", 795 | "integrity": "sha512-3qAqTewYrCdnOD9Gl9yvPoAoFAVmPJsBvleabvx4bnu1Kt6DrB2OALeRVag7BdWGWLhP1yooeMLEi6r2nYSOjg==", 796 | "cpu": [ 797 | "x64" 798 | ], 799 | "dev": true, 800 | "optional": true, 801 | "os": [ 802 | "freebsd" 803 | ] 804 | }, 805 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 806 | "version": "4.24.2", 807 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.2.tgz", 808 | "integrity": "sha512-ArdGtPHjLqWkqQuoVQ6a5UC5ebdX8INPuJuJNWRe0RGa/YNhVvxeWmCTFQ7LdmNCSUzVZzxAvUznKaYx645Rig==", 809 | "cpu": [ 810 | "arm" 811 | ], 812 | "dev": true, 813 | "optional": true, 814 | "os": [ 815 | "linux" 816 | ] 817 | }, 818 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 819 | "version": "4.24.2", 820 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.2.tgz", 821 | "integrity": "sha512-B6UHHeNnnih8xH6wRKB0mOcJGvjZTww1FV59HqJoTJ5da9LCG6R4SEBt6uPqzlawv1LoEXSS0d4fBlHNWl6iYw==", 822 | "cpu": [ 823 | "arm" 824 | ], 825 | "dev": true, 826 | "optional": true, 827 | "os": [ 828 | "linux" 829 | ] 830 | }, 831 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 832 | "version": "4.24.2", 833 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.2.tgz", 834 | "integrity": "sha512-kr3gqzczJjSAncwOS6i7fpb4dlqcvLidqrX5hpGBIM1wtt0QEVtf4wFaAwVv8QygFU8iWUMYEoJZWuWxyua4GQ==", 835 | "cpu": [ 836 | "arm64" 837 | ], 838 | "dev": true, 839 | "optional": true, 840 | "os": [ 841 | "linux" 842 | ] 843 | }, 844 | "node_modules/@rollup/rollup-linux-arm64-musl": { 845 | "version": "4.24.2", 846 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.2.tgz", 847 | "integrity": "sha512-TDdHLKCWgPuq9vQcmyLrhg/bgbOvIQ8rtWQK7MRxJ9nvaxKx38NvY7/Lo6cYuEnNHqf6rMqnivOIPIQt6H2AoA==", 848 | "cpu": [ 849 | "arm64" 850 | ], 851 | "dev": true, 852 | "optional": true, 853 | "os": [ 854 | "linux" 855 | ] 856 | }, 857 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 858 | "version": "4.24.2", 859 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.2.tgz", 860 | "integrity": "sha512-xv9vS648T3X4AxFFZGWeB5Dou8ilsv4VVqJ0+loOIgDO20zIhYfDLkk5xoQiej2RiSQkld9ijF/fhLeonrz2mw==", 861 | "cpu": [ 862 | "ppc64" 863 | ], 864 | "dev": true, 865 | "optional": true, 866 | "os": [ 867 | "linux" 868 | ] 869 | }, 870 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 871 | "version": "4.24.2", 872 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.2.tgz", 873 | "integrity": "sha512-tbtXwnofRoTt223WUZYiUnbxhGAOVul/3StZ947U4A5NNjnQJV5irKMm76G0LGItWs6y+SCjUn/Q0WaMLkEskg==", 874 | "cpu": [ 875 | "riscv64" 876 | ], 877 | "dev": true, 878 | "optional": true, 879 | "os": [ 880 | "linux" 881 | ] 882 | }, 883 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 884 | "version": "4.24.2", 885 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.2.tgz", 886 | "integrity": "sha512-gc97UebApwdsSNT3q79glOSPdfwgwj5ELuiyuiMY3pEWMxeVqLGKfpDFoum4ujivzxn6veUPzkGuSYoh5deQ2Q==", 887 | "cpu": [ 888 | "s390x" 889 | ], 890 | "dev": true, 891 | "optional": true, 892 | "os": [ 893 | "linux" 894 | ] 895 | }, 896 | "node_modules/@rollup/rollup-linux-x64-gnu": { 897 | "version": "4.24.2", 898 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.2.tgz", 899 | "integrity": "sha512-jOG/0nXb3z+EM6SioY8RofqqmZ+9NKYvJ6QQaa9Mvd3RQxlH68/jcB/lpyVt4lCiqr04IyaC34NzhUqcXbB5FQ==", 900 | "cpu": [ 901 | "x64" 902 | ], 903 | "dev": true, 904 | "optional": true, 905 | "os": [ 906 | "linux" 907 | ] 908 | }, 909 | "node_modules/@rollup/rollup-linux-x64-musl": { 910 | "version": "4.24.2", 911 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.2.tgz", 912 | "integrity": "sha512-XAo7cJec80NWx9LlZFEJQxqKOMz/lX3geWs2iNT5CHIERLFfd90f3RYLLjiCBm1IMaQ4VOX/lTC9lWfzzQm14Q==", 913 | "cpu": [ 914 | "x64" 915 | ], 916 | "dev": true, 917 | "optional": true, 918 | "os": [ 919 | "linux" 920 | ] 921 | }, 922 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 923 | "version": "4.24.2", 924 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.2.tgz", 925 | "integrity": "sha512-A+JAs4+EhsTjnPQvo9XY/DC0ztaws3vfqzrMNMKlwQXuniBKOIIvAAI8M0fBYiTCxQnElYu7mLk7JrhlQ+HeOw==", 926 | "cpu": [ 927 | "arm64" 928 | ], 929 | "dev": true, 930 | "optional": true, 931 | "os": [ 932 | "win32" 933 | ] 934 | }, 935 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 936 | "version": "4.24.2", 937 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.2.tgz", 938 | "integrity": "sha512-ZhcrakbqA1SCiJRMKSU64AZcYzlZ/9M5LaYil9QWxx9vLnkQ9Vnkve17Qn4SjlipqIIBFKjBES6Zxhnvh0EAEw==", 939 | "cpu": [ 940 | "ia32" 941 | ], 942 | "dev": true, 943 | "optional": true, 944 | "os": [ 945 | "win32" 946 | ] 947 | }, 948 | "node_modules/@rollup/rollup-win32-x64-msvc": { 949 | "version": "4.24.2", 950 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.2.tgz", 951 | "integrity": "sha512-2mLH46K1u3r6uwc95hU+OR9q/ggYMpnS7pSp83Ece1HUQgF9Nh/QwTK5rcgbFnV9j+08yBrU5sA/P0RK2MSBNA==", 952 | "cpu": [ 953 | "x64" 954 | ], 955 | "dev": true, 956 | "optional": true, 957 | "os": [ 958 | "win32" 959 | ] 960 | }, 961 | "node_modules/@types/babel__core": { 962 | "version": "7.20.5", 963 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 964 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 965 | "dev": true, 966 | "dependencies": { 967 | "@babel/parser": "^7.20.7", 968 | "@babel/types": "^7.20.7", 969 | "@types/babel__generator": "*", 970 | "@types/babel__template": "*", 971 | "@types/babel__traverse": "*" 972 | } 973 | }, 974 | "node_modules/@types/babel__generator": { 975 | "version": "7.6.8", 976 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", 977 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", 978 | "dev": true, 979 | "dependencies": { 980 | "@babel/types": "^7.0.0" 981 | } 982 | }, 983 | "node_modules/@types/babel__template": { 984 | "version": "7.4.4", 985 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 986 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 987 | "dev": true, 988 | "dependencies": { 989 | "@babel/parser": "^7.1.0", 990 | "@babel/types": "^7.0.0" 991 | } 992 | }, 993 | "node_modules/@types/babel__traverse": { 994 | "version": "7.20.6", 995 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", 996 | "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", 997 | "dev": true, 998 | "dependencies": { 999 | "@babel/types": "^7.20.7" 1000 | } 1001 | }, 1002 | "node_modules/@types/command-line-args": { 1003 | "version": "5.2.0", 1004 | "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", 1005 | "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==" 1006 | }, 1007 | "node_modules/@types/command-line-usage": { 1008 | "version": "5.0.2", 1009 | "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", 1010 | "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==" 1011 | }, 1012 | "node_modules/@types/estree": { 1013 | "version": "1.0.6", 1014 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 1015 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 1016 | "dev": true 1017 | }, 1018 | "node_modules/@types/flatbuffers": { 1019 | "version": "1.10.3", 1020 | "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.3.tgz", 1021 | "integrity": "sha512-kwJQsAROanCiMXSLjcTLmYVBIJ9Qyuqs92SaDIcj2EII2KnDgZbiU7it1Z/JfZd1gmxw/lAahMysQ6ZM+j3Ryw==" 1022 | }, 1023 | "node_modules/@types/node": { 1024 | "version": "18.7.23", 1025 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", 1026 | "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==" 1027 | }, 1028 | "node_modules/@types/pad-left": { 1029 | "version": "2.1.1", 1030 | "resolved": "https://registry.npmjs.org/@types/pad-left/-/pad-left-2.1.1.tgz", 1031 | "integrity": "sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==" 1032 | }, 1033 | "node_modules/@types/prop-types": { 1034 | "version": "15.7.5", 1035 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 1036 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 1037 | "dev": true 1038 | }, 1039 | "node_modules/@types/react": { 1040 | "version": "18.3.12", 1041 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", 1042 | "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", 1043 | "dev": true, 1044 | "dependencies": { 1045 | "@types/prop-types": "*", 1046 | "csstype": "^3.0.2" 1047 | } 1048 | }, 1049 | "node_modules/@types/react-dom": { 1050 | "version": "18.3.1", 1051 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", 1052 | "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", 1053 | "dev": true, 1054 | "dependencies": { 1055 | "@types/react": "*" 1056 | } 1057 | }, 1058 | "node_modules/@vitejs/plugin-react": { 1059 | "version": "4.3.3", 1060 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", 1061 | "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", 1062 | "dev": true, 1063 | "dependencies": { 1064 | "@babel/core": "^7.25.2", 1065 | "@babel/plugin-transform-react-jsx-self": "^7.24.7", 1066 | "@babel/plugin-transform-react-jsx-source": "^7.24.7", 1067 | "@types/babel__core": "^7.20.5", 1068 | "react-refresh": "^0.14.2" 1069 | }, 1070 | "engines": { 1071 | "node": "^14.18.0 || >=16.0.0" 1072 | }, 1073 | "peerDependencies": { 1074 | "vite": "^4.2.0 || ^5.0.0" 1075 | } 1076 | }, 1077 | "node_modules/ansi-styles": { 1078 | "version": "3.2.1", 1079 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1080 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1081 | "dependencies": { 1082 | "color-convert": "^1.9.0" 1083 | }, 1084 | "engines": { 1085 | "node": ">=4" 1086 | } 1087 | }, 1088 | "node_modules/apache-arrow": { 1089 | "version": "11.0.0", 1090 | "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-11.0.0.tgz", 1091 | "integrity": "sha512-M8J4y+DimIyS44w2KOmVfzNHbTroR1oDpBKK6BYnlu8xVB41lxTz0yLmapo8/WJVAt5XcinAxMm14M771dm/rA==", 1092 | "dependencies": { 1093 | "@types/command-line-args": "5.2.0", 1094 | "@types/command-line-usage": "5.0.2", 1095 | "@types/flatbuffers": "*", 1096 | "@types/node": "18.7.23", 1097 | "@types/pad-left": "2.1.1", 1098 | "command-line-args": "5.2.1", 1099 | "command-line-usage": "6.1.3", 1100 | "flatbuffers": "2.0.4", 1101 | "json-bignum": "^0.0.3", 1102 | "pad-left": "^2.1.0", 1103 | "tslib": "^2.4.0" 1104 | }, 1105 | "bin": { 1106 | "arrow2csv": "bin/arrow2csv.js" 1107 | } 1108 | }, 1109 | "node_modules/array-back": { 1110 | "version": "3.1.0", 1111 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", 1112 | "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", 1113 | "engines": { 1114 | "node": ">=6" 1115 | } 1116 | }, 1117 | "node_modules/browserslist": { 1118 | "version": "4.24.2", 1119 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", 1120 | "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", 1121 | "dev": true, 1122 | "funding": [ 1123 | { 1124 | "type": "opencollective", 1125 | "url": "https://opencollective.com/browserslist" 1126 | }, 1127 | { 1128 | "type": "tidelift", 1129 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1130 | }, 1131 | { 1132 | "type": "github", 1133 | "url": "https://github.com/sponsors/ai" 1134 | } 1135 | ], 1136 | "dependencies": { 1137 | "caniuse-lite": "^1.0.30001669", 1138 | "electron-to-chromium": "^1.5.41", 1139 | "node-releases": "^2.0.18", 1140 | "update-browserslist-db": "^1.1.1" 1141 | }, 1142 | "bin": { 1143 | "browserslist": "cli.js" 1144 | }, 1145 | "engines": { 1146 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1147 | } 1148 | }, 1149 | "node_modules/caniuse-lite": { 1150 | "version": "1.0.30001674", 1151 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz", 1152 | "integrity": "sha512-jOsKlZVRnzfhLojb+Ykb+gyUSp9Xb57So+fAiFlLzzTKpqg8xxSav0e40c8/4F/v9N8QSvrRRaLeVzQbLqomYw==", 1153 | "dev": true, 1154 | "funding": [ 1155 | { 1156 | "type": "opencollective", 1157 | "url": "https://opencollective.com/browserslist" 1158 | }, 1159 | { 1160 | "type": "tidelift", 1161 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1162 | }, 1163 | { 1164 | "type": "github", 1165 | "url": "https://github.com/sponsors/ai" 1166 | } 1167 | ] 1168 | }, 1169 | "node_modules/chalk": { 1170 | "version": "2.4.2", 1171 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1172 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1173 | "dependencies": { 1174 | "ansi-styles": "^3.2.1", 1175 | "escape-string-regexp": "^1.0.5", 1176 | "supports-color": "^5.3.0" 1177 | }, 1178 | "engines": { 1179 | "node": ">=4" 1180 | } 1181 | }, 1182 | "node_modules/color-convert": { 1183 | "version": "1.9.3", 1184 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1185 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1186 | "dependencies": { 1187 | "color-name": "1.1.3" 1188 | } 1189 | }, 1190 | "node_modules/color-name": { 1191 | "version": "1.1.3", 1192 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1193 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 1194 | }, 1195 | "node_modules/command-line-args": { 1196 | "version": "5.2.1", 1197 | "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", 1198 | "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", 1199 | "dependencies": { 1200 | "array-back": "^3.1.0", 1201 | "find-replace": "^3.0.0", 1202 | "lodash.camelcase": "^4.3.0", 1203 | "typical": "^4.0.0" 1204 | }, 1205 | "engines": { 1206 | "node": ">=4.0.0" 1207 | } 1208 | }, 1209 | "node_modules/command-line-usage": { 1210 | "version": "6.1.3", 1211 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", 1212 | "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", 1213 | "dependencies": { 1214 | "array-back": "^4.0.2", 1215 | "chalk": "^2.4.2", 1216 | "table-layout": "^1.0.2", 1217 | "typical": "^5.2.0" 1218 | }, 1219 | "engines": { 1220 | "node": ">=8.0.0" 1221 | } 1222 | }, 1223 | "node_modules/command-line-usage/node_modules/array-back": { 1224 | "version": "4.0.2", 1225 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", 1226 | "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", 1227 | "engines": { 1228 | "node": ">=8" 1229 | } 1230 | }, 1231 | "node_modules/command-line-usage/node_modules/typical": { 1232 | "version": "5.2.0", 1233 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 1234 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 1235 | "engines": { 1236 | "node": ">=8" 1237 | } 1238 | }, 1239 | "node_modules/convert-source-map": { 1240 | "version": "2.0.0", 1241 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1242 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1243 | "dev": true 1244 | }, 1245 | "node_modules/csstype": { 1246 | "version": "3.1.1", 1247 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", 1248 | "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", 1249 | "dev": true 1250 | }, 1251 | "node_modules/debug": { 1252 | "version": "4.3.7", 1253 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 1254 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 1255 | "dev": true, 1256 | "dependencies": { 1257 | "ms": "^2.1.3" 1258 | }, 1259 | "engines": { 1260 | "node": ">=6.0" 1261 | }, 1262 | "peerDependenciesMeta": { 1263 | "supports-color": { 1264 | "optional": true 1265 | } 1266 | } 1267 | }, 1268 | "node_modules/deep-extend": { 1269 | "version": "0.6.0", 1270 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1271 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1272 | "engines": { 1273 | "node": ">=4.0.0" 1274 | } 1275 | }, 1276 | "node_modules/electron-to-chromium": { 1277 | "version": "1.5.49", 1278 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.49.tgz", 1279 | "integrity": "sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==", 1280 | "dev": true 1281 | }, 1282 | "node_modules/esbuild": { 1283 | "version": "0.21.5", 1284 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1285 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1286 | "dev": true, 1287 | "hasInstallScript": true, 1288 | "bin": { 1289 | "esbuild": "bin/esbuild" 1290 | }, 1291 | "engines": { 1292 | "node": ">=12" 1293 | }, 1294 | "optionalDependencies": { 1295 | "@esbuild/aix-ppc64": "0.21.5", 1296 | "@esbuild/android-arm": "0.21.5", 1297 | "@esbuild/android-arm64": "0.21.5", 1298 | "@esbuild/android-x64": "0.21.5", 1299 | "@esbuild/darwin-arm64": "0.21.5", 1300 | "@esbuild/darwin-x64": "0.21.5", 1301 | "@esbuild/freebsd-arm64": "0.21.5", 1302 | "@esbuild/freebsd-x64": "0.21.5", 1303 | "@esbuild/linux-arm": "0.21.5", 1304 | "@esbuild/linux-arm64": "0.21.5", 1305 | "@esbuild/linux-ia32": "0.21.5", 1306 | "@esbuild/linux-loong64": "0.21.5", 1307 | "@esbuild/linux-mips64el": "0.21.5", 1308 | "@esbuild/linux-ppc64": "0.21.5", 1309 | "@esbuild/linux-riscv64": "0.21.5", 1310 | "@esbuild/linux-s390x": "0.21.5", 1311 | "@esbuild/linux-x64": "0.21.5", 1312 | "@esbuild/netbsd-x64": "0.21.5", 1313 | "@esbuild/openbsd-x64": "0.21.5", 1314 | "@esbuild/sunos-x64": "0.21.5", 1315 | "@esbuild/win32-arm64": "0.21.5", 1316 | "@esbuild/win32-ia32": "0.21.5", 1317 | "@esbuild/win32-x64": "0.21.5" 1318 | } 1319 | }, 1320 | "node_modules/escalade": { 1321 | "version": "3.2.0", 1322 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1323 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1324 | "dev": true, 1325 | "engines": { 1326 | "node": ">=6" 1327 | } 1328 | }, 1329 | "node_modules/escape-string-regexp": { 1330 | "version": "1.0.5", 1331 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1332 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1333 | "engines": { 1334 | "node": ">=0.8.0" 1335 | } 1336 | }, 1337 | "node_modules/find-replace": { 1338 | "version": "3.0.0", 1339 | "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", 1340 | "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", 1341 | "dependencies": { 1342 | "array-back": "^3.0.1" 1343 | }, 1344 | "engines": { 1345 | "node": ">=4.0.0" 1346 | } 1347 | }, 1348 | "node_modules/flatbuffers": { 1349 | "version": "2.0.4", 1350 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-2.0.4.tgz", 1351 | "integrity": "sha512-4rUFVDPjSoP0tOII34oQf+72NKU7E088U5oX7kwICahft0UB2kOQ9wUzzCp+OHxByERIfxRDCgX5mP8Pjkfl0g==" 1352 | }, 1353 | "node_modules/fsevents": { 1354 | "version": "2.3.3", 1355 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1356 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1357 | "dev": true, 1358 | "hasInstallScript": true, 1359 | "optional": true, 1360 | "os": [ 1361 | "darwin" 1362 | ], 1363 | "engines": { 1364 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1365 | } 1366 | }, 1367 | "node_modules/gensync": { 1368 | "version": "1.0.0-beta.2", 1369 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1370 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1371 | "dev": true, 1372 | "engines": { 1373 | "node": ">=6.9.0" 1374 | } 1375 | }, 1376 | "node_modules/globals": { 1377 | "version": "11.12.0", 1378 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1379 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1380 | "dev": true, 1381 | "engines": { 1382 | "node": ">=4" 1383 | } 1384 | }, 1385 | "node_modules/has-flag": { 1386 | "version": "3.0.0", 1387 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1388 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1389 | "engines": { 1390 | "node": ">=4" 1391 | } 1392 | }, 1393 | "node_modules/hoist-non-react-statics": { 1394 | "version": "3.3.2", 1395 | "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", 1396 | "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", 1397 | "dependencies": { 1398 | "react-is": "^16.7.0" 1399 | } 1400 | }, 1401 | "node_modules/js-tokens": { 1402 | "version": "4.0.0", 1403 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1404 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1405 | }, 1406 | "node_modules/jsesc": { 1407 | "version": "3.0.2", 1408 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", 1409 | "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", 1410 | "dev": true, 1411 | "bin": { 1412 | "jsesc": "bin/jsesc" 1413 | }, 1414 | "engines": { 1415 | "node": ">=6" 1416 | } 1417 | }, 1418 | "node_modules/json-bignum": { 1419 | "version": "0.0.3", 1420 | "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", 1421 | "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", 1422 | "engines": { 1423 | "node": ">=0.8" 1424 | } 1425 | }, 1426 | "node_modules/json5": { 1427 | "version": "2.2.3", 1428 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1429 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1430 | "dev": true, 1431 | "bin": { 1432 | "json5": "lib/cli.js" 1433 | }, 1434 | "engines": { 1435 | "node": ">=6" 1436 | } 1437 | }, 1438 | "node_modules/lodash.camelcase": { 1439 | "version": "4.3.0", 1440 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1441 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" 1442 | }, 1443 | "node_modules/loose-envify": { 1444 | "version": "1.4.0", 1445 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1446 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1447 | "dependencies": { 1448 | "js-tokens": "^3.0.0 || ^4.0.0" 1449 | }, 1450 | "bin": { 1451 | "loose-envify": "cli.js" 1452 | } 1453 | }, 1454 | "node_modules/lru-cache": { 1455 | "version": "5.1.1", 1456 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 1457 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1458 | "dev": true, 1459 | "dependencies": { 1460 | "yallist": "^3.0.2" 1461 | } 1462 | }, 1463 | "node_modules/ms": { 1464 | "version": "2.1.3", 1465 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1466 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1467 | "dev": true 1468 | }, 1469 | "node_modules/nanoid": { 1470 | "version": "3.3.7", 1471 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1472 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1473 | "dev": true, 1474 | "funding": [ 1475 | { 1476 | "type": "github", 1477 | "url": "https://github.com/sponsors/ai" 1478 | } 1479 | ], 1480 | "bin": { 1481 | "nanoid": "bin/nanoid.cjs" 1482 | }, 1483 | "engines": { 1484 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1485 | } 1486 | }, 1487 | "node_modules/node-releases": { 1488 | "version": "2.0.18", 1489 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", 1490 | "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", 1491 | "dev": true 1492 | }, 1493 | "node_modules/object-assign": { 1494 | "version": "4.1.1", 1495 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1496 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1497 | "engines": { 1498 | "node": ">=0.10.0" 1499 | } 1500 | }, 1501 | "node_modules/pad-left": { 1502 | "version": "2.1.0", 1503 | "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", 1504 | "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", 1505 | "dependencies": { 1506 | "repeat-string": "^1.5.4" 1507 | }, 1508 | "engines": { 1509 | "node": ">=0.10.0" 1510 | } 1511 | }, 1512 | "node_modules/picocolors": { 1513 | "version": "1.1.1", 1514 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1515 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1516 | "dev": true 1517 | }, 1518 | "node_modules/postcss": { 1519 | "version": "8.4.47", 1520 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", 1521 | "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", 1522 | "dev": true, 1523 | "funding": [ 1524 | { 1525 | "type": "opencollective", 1526 | "url": "https://opencollective.com/postcss/" 1527 | }, 1528 | { 1529 | "type": "tidelift", 1530 | "url": "https://tidelift.com/funding/github/npm/postcss" 1531 | }, 1532 | { 1533 | "type": "github", 1534 | "url": "https://github.com/sponsors/ai" 1535 | } 1536 | ], 1537 | "dependencies": { 1538 | "nanoid": "^3.3.7", 1539 | "picocolors": "^1.1.0", 1540 | "source-map-js": "^1.2.1" 1541 | }, 1542 | "engines": { 1543 | "node": "^10 || ^12 || >=14" 1544 | } 1545 | }, 1546 | "node_modules/prop-types": { 1547 | "version": "15.8.1", 1548 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 1549 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 1550 | "dependencies": { 1551 | "loose-envify": "^1.4.0", 1552 | "object-assign": "^4.1.1", 1553 | "react-is": "^16.13.1" 1554 | } 1555 | }, 1556 | "node_modules/react": { 1557 | "version": "18.3.1", 1558 | "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", 1559 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 1560 | "dependencies": { 1561 | "loose-envify": "^1.1.0" 1562 | }, 1563 | "engines": { 1564 | "node": ">=0.10.0" 1565 | } 1566 | }, 1567 | "node_modules/react-dom": { 1568 | "version": "18.3.1", 1569 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", 1570 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", 1571 | "dependencies": { 1572 | "loose-envify": "^1.1.0", 1573 | "scheduler": "^0.23.2" 1574 | }, 1575 | "peerDependencies": { 1576 | "react": "^18.3.1" 1577 | } 1578 | }, 1579 | "node_modules/react-is": { 1580 | "version": "16.13.1", 1581 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 1582 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 1583 | }, 1584 | "node_modules/react-refresh": { 1585 | "version": "0.14.2", 1586 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", 1587 | "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", 1588 | "dev": true, 1589 | "engines": { 1590 | "node": ">=0.10.0" 1591 | } 1592 | }, 1593 | "node_modules/reduce-flatten": { 1594 | "version": "2.0.0", 1595 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", 1596 | "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", 1597 | "engines": { 1598 | "node": ">=6" 1599 | } 1600 | }, 1601 | "node_modules/repeat-string": { 1602 | "version": "1.6.1", 1603 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1604 | "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", 1605 | "engines": { 1606 | "node": ">=0.10" 1607 | } 1608 | }, 1609 | "node_modules/rollup": { 1610 | "version": "4.24.2", 1611 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.2.tgz", 1612 | "integrity": "sha512-do/DFGq5g6rdDhdpPq5qb2ecoczeK6y+2UAjdJ5trjQJj5f1AiVdLRWRc9A9/fFukfvJRgM0UXzxBIYMovm5ww==", 1613 | "dev": true, 1614 | "dependencies": { 1615 | "@types/estree": "1.0.6" 1616 | }, 1617 | "bin": { 1618 | "rollup": "dist/bin/rollup" 1619 | }, 1620 | "engines": { 1621 | "node": ">=18.0.0", 1622 | "npm": ">=8.0.0" 1623 | }, 1624 | "optionalDependencies": { 1625 | "@rollup/rollup-android-arm-eabi": "4.24.2", 1626 | "@rollup/rollup-android-arm64": "4.24.2", 1627 | "@rollup/rollup-darwin-arm64": "4.24.2", 1628 | "@rollup/rollup-darwin-x64": "4.24.2", 1629 | "@rollup/rollup-freebsd-arm64": "4.24.2", 1630 | "@rollup/rollup-freebsd-x64": "4.24.2", 1631 | "@rollup/rollup-linux-arm-gnueabihf": "4.24.2", 1632 | "@rollup/rollup-linux-arm-musleabihf": "4.24.2", 1633 | "@rollup/rollup-linux-arm64-gnu": "4.24.2", 1634 | "@rollup/rollup-linux-arm64-musl": "4.24.2", 1635 | "@rollup/rollup-linux-powerpc64le-gnu": "4.24.2", 1636 | "@rollup/rollup-linux-riscv64-gnu": "4.24.2", 1637 | "@rollup/rollup-linux-s390x-gnu": "4.24.2", 1638 | "@rollup/rollup-linux-x64-gnu": "4.24.2", 1639 | "@rollup/rollup-linux-x64-musl": "4.24.2", 1640 | "@rollup/rollup-win32-arm64-msvc": "4.24.2", 1641 | "@rollup/rollup-win32-ia32-msvc": "4.24.2", 1642 | "@rollup/rollup-win32-x64-msvc": "4.24.2", 1643 | "fsevents": "~2.3.2" 1644 | } 1645 | }, 1646 | "node_modules/scheduler": { 1647 | "version": "0.23.2", 1648 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", 1649 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", 1650 | "dependencies": { 1651 | "loose-envify": "^1.1.0" 1652 | } 1653 | }, 1654 | "node_modules/semver": { 1655 | "version": "6.3.1", 1656 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1657 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1658 | "dev": true, 1659 | "bin": { 1660 | "semver": "bin/semver.js" 1661 | } 1662 | }, 1663 | "node_modules/source-map-js": { 1664 | "version": "1.2.1", 1665 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1666 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1667 | "dev": true, 1668 | "engines": { 1669 | "node": ">=0.10.0" 1670 | } 1671 | }, 1672 | "node_modules/streamlit-component-lib": { 1673 | "version": "2.0.0", 1674 | "resolved": "https://registry.npmjs.org/streamlit-component-lib/-/streamlit-component-lib-2.0.0.tgz", 1675 | "integrity": "sha512-ekLjskU4Cz+zSLkTC9jpppv2hb8jlA3z2h+TtwGUGuwMKrGLrvTpzLJI1ibPuI+bZ60mLHVI1GP/OyNb7K7UjA==", 1676 | "dependencies": { 1677 | "apache-arrow": "^11.0.0", 1678 | "hoist-non-react-statics": "^3.3.2", 1679 | "react": "^16.14.0", 1680 | "react-dom": "^16.14.0" 1681 | } 1682 | }, 1683 | "node_modules/streamlit-component-lib/node_modules/react": { 1684 | "version": "16.14.0", 1685 | "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", 1686 | "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", 1687 | "dependencies": { 1688 | "loose-envify": "^1.1.0", 1689 | "object-assign": "^4.1.1", 1690 | "prop-types": "^15.6.2" 1691 | }, 1692 | "engines": { 1693 | "node": ">=0.10.0" 1694 | } 1695 | }, 1696 | "node_modules/streamlit-component-lib/node_modules/react-dom": { 1697 | "version": "16.14.0", 1698 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", 1699 | "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", 1700 | "dependencies": { 1701 | "loose-envify": "^1.1.0", 1702 | "object-assign": "^4.1.1", 1703 | "prop-types": "^15.6.2", 1704 | "scheduler": "^0.19.1" 1705 | }, 1706 | "peerDependencies": { 1707 | "react": "^16.14.0" 1708 | } 1709 | }, 1710 | "node_modules/streamlit-component-lib/node_modules/scheduler": { 1711 | "version": "0.19.1", 1712 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", 1713 | "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", 1714 | "dependencies": { 1715 | "loose-envify": "^1.1.0", 1716 | "object-assign": "^4.1.1" 1717 | } 1718 | }, 1719 | "node_modules/supports-color": { 1720 | "version": "5.5.0", 1721 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1722 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1723 | "dependencies": { 1724 | "has-flag": "^3.0.0" 1725 | }, 1726 | "engines": { 1727 | "node": ">=4" 1728 | } 1729 | }, 1730 | "node_modules/table-layout": { 1731 | "version": "1.0.2", 1732 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", 1733 | "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", 1734 | "dependencies": { 1735 | "array-back": "^4.0.1", 1736 | "deep-extend": "~0.6.0", 1737 | "typical": "^5.2.0", 1738 | "wordwrapjs": "^4.0.0" 1739 | }, 1740 | "engines": { 1741 | "node": ">=8.0.0" 1742 | } 1743 | }, 1744 | "node_modules/table-layout/node_modules/array-back": { 1745 | "version": "4.0.2", 1746 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", 1747 | "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", 1748 | "engines": { 1749 | "node": ">=8" 1750 | } 1751 | }, 1752 | "node_modules/table-layout/node_modules/typical": { 1753 | "version": "5.2.0", 1754 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 1755 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 1756 | "engines": { 1757 | "node": ">=8" 1758 | } 1759 | }, 1760 | "node_modules/tslib": { 1761 | "version": "2.8.0", 1762 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", 1763 | "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" 1764 | }, 1765 | "node_modules/typescript": { 1766 | "version": "5.6.3", 1767 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", 1768 | "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", 1769 | "dev": true, 1770 | "bin": { 1771 | "tsc": "bin/tsc", 1772 | "tsserver": "bin/tsserver" 1773 | }, 1774 | "engines": { 1775 | "node": ">=14.17" 1776 | } 1777 | }, 1778 | "node_modules/typical": { 1779 | "version": "4.0.0", 1780 | "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", 1781 | "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", 1782 | "engines": { 1783 | "node": ">=8" 1784 | } 1785 | }, 1786 | "node_modules/update-browserslist-db": { 1787 | "version": "1.1.1", 1788 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", 1789 | "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", 1790 | "dev": true, 1791 | "funding": [ 1792 | { 1793 | "type": "opencollective", 1794 | "url": "https://opencollective.com/browserslist" 1795 | }, 1796 | { 1797 | "type": "tidelift", 1798 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1799 | }, 1800 | { 1801 | "type": "github", 1802 | "url": "https://github.com/sponsors/ai" 1803 | } 1804 | ], 1805 | "dependencies": { 1806 | "escalade": "^3.2.0", 1807 | "picocolors": "^1.1.0" 1808 | }, 1809 | "bin": { 1810 | "update-browserslist-db": "cli.js" 1811 | }, 1812 | "peerDependencies": { 1813 | "browserslist": ">= 4.21.0" 1814 | } 1815 | }, 1816 | "node_modules/vite": { 1817 | "version": "5.4.10", 1818 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", 1819 | "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", 1820 | "dev": true, 1821 | "dependencies": { 1822 | "esbuild": "^0.21.3", 1823 | "postcss": "^8.4.43", 1824 | "rollup": "^4.20.0" 1825 | }, 1826 | "bin": { 1827 | "vite": "bin/vite.js" 1828 | }, 1829 | "engines": { 1830 | "node": "^18.0.0 || >=20.0.0" 1831 | }, 1832 | "funding": { 1833 | "url": "https://github.com/vitejs/vite?sponsor=1" 1834 | }, 1835 | "optionalDependencies": { 1836 | "fsevents": "~2.3.3" 1837 | }, 1838 | "peerDependencies": { 1839 | "@types/node": "^18.0.0 || >=20.0.0", 1840 | "less": "*", 1841 | "lightningcss": "^1.21.0", 1842 | "sass": "*", 1843 | "sass-embedded": "*", 1844 | "stylus": "*", 1845 | "sugarss": "*", 1846 | "terser": "^5.4.0" 1847 | }, 1848 | "peerDependenciesMeta": { 1849 | "@types/node": { 1850 | "optional": true 1851 | }, 1852 | "less": { 1853 | "optional": true 1854 | }, 1855 | "lightningcss": { 1856 | "optional": true 1857 | }, 1858 | "sass": { 1859 | "optional": true 1860 | }, 1861 | "sass-embedded": { 1862 | "optional": true 1863 | }, 1864 | "stylus": { 1865 | "optional": true 1866 | }, 1867 | "sugarss": { 1868 | "optional": true 1869 | }, 1870 | "terser": { 1871 | "optional": true 1872 | } 1873 | } 1874 | }, 1875 | "node_modules/wordwrapjs": { 1876 | "version": "4.0.1", 1877 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", 1878 | "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", 1879 | "dependencies": { 1880 | "reduce-flatten": "^2.0.0", 1881 | "typical": "^5.2.0" 1882 | }, 1883 | "engines": { 1884 | "node": ">=8.0.0" 1885 | } 1886 | }, 1887 | "node_modules/wordwrapjs/node_modules/typical": { 1888 | "version": "5.2.0", 1889 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 1890 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 1891 | "engines": { 1892 | "node": ">=8" 1893 | } 1894 | }, 1895 | "node_modules/yallist": { 1896 | "version": "3.1.1", 1897 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1898 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 1899 | "dev": true 1900 | } 1901 | } 1902 | } 1903 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "msal-streamlit-component", 3 | "version": "1.0.0", 4 | "description": "msal-streamlit-component", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "preview": "vite preview" 10 | }, 11 | "author": "", 12 | "license": "MIT", 13 | "dependencies": { 14 | "react": "^18.3.1", 15 | "react-dom": "^18.3.1", 16 | "@azure/msal-browser": "^3.26.1", 17 | "streamlit-component-lib": "^2.0.0" 18 | }, 19 | "devDependencies": { 20 | "@types/react": "^18.3.12", 21 | "@types/react-dom": "^18.3.1", 22 | "@vitejs/plugin-react": "^4.3.3", 23 | "typescript": "^5.6.3", 24 | "vite": "^5.4.10" 25 | } 26 | } -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/src/Authentication.tsx: -------------------------------------------------------------------------------- 1 | import React, { useCallback, useEffect, useState } from "react" 2 | import { 3 | withStreamlitConnection, 4 | Streamlit, 5 | ComponentProps, 6 | } from "streamlit-component-lib" 7 | import { useMsalInstance } from "./auth/msal-auth"; 8 | 9 | const Authentication = ({ args }: ComponentProps) => { 10 | const msalInstance = useMsalInstance(args["auth"], args["cache"]) 11 | const loginRequest = args["login_request"] ?? undefined 12 | const logoutRequest = args["logout_request"] ?? undefined 13 | const loginButtonText = args["login_button_text"] ?? "" 14 | const logoutButtonText = args["logout_button_text"] ?? "" 15 | const buttonClass = args["class_name"] ?? "" 16 | const buttonId = args["html_id"] ?? "" 17 | 18 | const [loginToken, setLoginToken] = useState(null) 19 | const isAuthenticated = useCallback(() => { 20 | return msalInstance.getAllAccounts().length > 0 21 | }, []) 22 | 23 | useEffect(() => { 24 | if (msalInstance.getAllAccounts().length > 0) { 25 | msalInstance.acquireTokenSilent({ 26 | ...loginRequest, 27 | account: msalInstance.getAllAccounts()[0] 28 | }).then(function (response) { 29 | // @ts-ignore 30 | setLoginToken(response) 31 | }) 32 | } else { 33 | setLoginToken(null) 34 | } 35 | }, []) 36 | 37 | useEffect(() => { 38 | Streamlit.setComponentValue(loginToken) 39 | Streamlit.setFrameHeight() 40 | Streamlit.setComponentReady() 41 | }, [loginToken]) 42 | 43 | const loginPopup = useCallback(() => { 44 | msalInstance.loginPopup(loginRequest).then(function (response) { 45 | // @ts-ignore 46 | setLoginToken(response) 47 | }).catch(console.error) 48 | }, []) 49 | 50 | const logoutPopup = useCallback(() => { 51 | // @ts-ignore 52 | msalInstance.logoutPopup(logoutRequest).then(function (response) { 53 | setLoginToken(null) 54 | }).catch(console.error) 55 | }, []) 56 | 57 | return ( 58 |
59 | 62 |
63 | ) 64 | 65 | } 66 | 67 | export default withStreamlitConnection(Authentication) 68 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/src/auth/msal-auth.tsx: -------------------------------------------------------------------------------- 1 | import {BrowserAuthOptions, CacheOptions, LogLevel, PublicClientApplication} from "@azure/msal-browser"; 2 | 3 | export const useMsalInstance = function (auth_config: BrowserAuthOptions, cache_config: CacheOptions) { 4 | const instance = new PublicClientApplication({ 5 | auth: auth_config, 6 | cache: cache_config, 7 | system: { 8 | loggerOptions: { 9 | loggerCallback: (level: LogLevel, message: string, containsPii: any) => { 10 | if (containsPii) { 11 | return; 12 | } 13 | switch (level) { 14 | case LogLevel.Error: 15 | console.error(message); 16 | return; 17 | case LogLevel.Info: 18 | return; 19 | case LogLevel.Verbose: 20 | console.debug(message); 21 | return; 22 | case LogLevel.Warning: 23 | console.warn(message); 24 | return; 25 | default: 26 | return; 27 | } 28 | } 29 | } 30 | } 31 | }); 32 | instance.initialize() 33 | return instance; 34 | } 35 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/src/index.css: -------------------------------------------------------------------------------- 1 | #root { 2 | padding: 0.5rem; 3 | } 4 | 5 | :root { 6 | font-family: Inter, Avenir, Helvetica, Arial, sans-serif; 7 | 8 | color-scheme: light dark; 9 | 10 | } 11 | 12 | button { 13 | border-radius: 8px; 14 | border: 1px solid; 15 | padding: 0.6em 1.2em; 16 | font-size: inherit; 17 | font-weight: inherit; 18 | font-family: inherit; 19 | color: inherit; 20 | background-color: inherit; 21 | cursor: pointer; 22 | } 23 | button:hover { 24 | border-color: #646cff; 25 | } 26 | button:focus, 27 | button:focus-visible { 28 | outline: 4px auto -webkit-focus-ring-color; 29 | } 30 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import Authentication from './Authentication' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": false, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "Node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"], 20 | "references": [{ "path": "./tsconfig.node.json" }] 21 | } 22 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "allowSyntheticDefaultImports": true 7 | }, 8 | "include": ["vite.config.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /msal_streamlit_authentication/frontend/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | base: "./", 7 | plugins: [react()], 8 | }) 9 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "msal_streamlit_authentication" 3 | version = "1.1.0" 4 | description = "Streamlit Authentication library based on MSAL.JS" 5 | readme = "README.md" 6 | repository = "https://github.com/ploomber/msal_streamlit_authentication" 7 | authors = ["Michael Staal-Olsen"] 8 | packages=[ 9 | { include="msal_streamlit_authentication" } 10 | ] 11 | include = ["msal_streamlit_authentication/frontend/dist/**/*"] 12 | exclude = [ 13 | "msal_streamlit_authentication/frontend/index.html", 14 | "msal_streamlit_authentication/frontend/public", 15 | "msal_streamlit_authentication/frontend/src", 16 | "msal_streamlit_authentication/frontend/tsconfig.json", 17 | "msal_streamlit_authentication/frontend/tsconfig.node.json", 18 | "msal_streamlit_authentication/frontend/package.json", 19 | "msal_streamlit_authentication/frontend/package-lock.json", 20 | "msal_streamlit_authentication/frontend/vite.config.ts", 21 | ] 22 | 23 | [tool.poetry.dependencies] 24 | python = ">=3.9" 25 | streamlit = "*" 26 | 27 | [tool.poetry.group.dev.dependencies] 28 | pytest = "6.0.1" 29 | 30 | [build-system] 31 | requires = ["poetry-core>=1.0.0"] 32 | build-backend = "poetry.core.masonry.api" 33 | --------------------------------------------------------------------------------