diff --git a/.circleci/config.yml b/.circleci/config.yml index 26d714f9d..d155823c6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -40,7 +40,9 @@ jobs: pip install "httpx==0.24.1" pip install "gunicorn==21.2.0" pip install "anyio==3.7.1" + pip install "aiodynamo==23.10.1" pip install "asyncio==3.4.3" + pip install "apscheduler==3.10.4" pip install "PyGithub==1.59.1" - save_cache: paths: @@ -96,6 +98,43 @@ jobs: command: | sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io + - run: + name: Install Python 3.9 + command: | + curl https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh --output miniconda.sh + bash miniconda.sh -b -p $HOME/miniconda + export PATH="$HOME/miniconda/bin:$PATH" + conda init bash + source ~/.bashrc + conda create -n myenv python=3.9 -y + conda activate myenv + python --version + - run: + name: Install Dependencies + command: | + pip install "pytest==7.3.1" + pip install "pytest-asyncio==0.21.1" + pip install aiohttp + pip install openai + python -m pip install --upgrade pip + python -m pip install -r .circleci/requirements.txt + pip install "pytest==7.3.1" + pip install "pytest-asyncio==0.21.1" + pip install mypy + pip install "google-generativeai>=0.3.2" + pip install "google-cloud-aiplatform>=1.38.0" + pip install "boto3>=1.28.57" + pip install langchain + pip install "langfuse>=2.0.0" + pip install numpydoc + pip install prisma + pip install "httpx==0.24.1" + pip install "gunicorn==21.2.0" + pip install "anyio==3.7.1" + pip install "aiodynamo==23.10.1" + pip install "asyncio==3.4.3" + pip install "PyGithub==1.59.1" + # Run pytest and generate JUnit XML report - run: name: Build Docker image command: docker build -t my-app:latest -f Dockerfile.database . @@ -105,15 +144,20 @@ jobs: docker run -d \ -p 4000:4000 \ -e DATABASE_URL=$PROXY_DOCKER_DB_URL \ - -e AZURE_API_KEY=$AZURE_FRANCE_API_KEY \ + -e AZURE_API_KEY=$AZURE_API_KEY \ -e AZURE_FRANCE_API_KEY=$AZURE_FRANCE_API_KEY \ -e AZURE_EUROPE_API_KEY=$AZURE_EUROPE_API_KEY \ + -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ + -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ + -e AWS_REGION_NAME=$AWS_REGION_NAME \ --name my-app \ -v $(pwd)/proxy_server_config.yaml:/app/config.yaml \ my-app:latest \ --config /app/config.yaml \ --port 4000 \ - --num_workers 8 + --num_workers 8 \ + --detailed_debug \ + --run_gunicorn \ - run: name: Install curl and dockerize command: | @@ -124,63 +168,22 @@ jobs: sudo rm dockerize-linux-amd64-v0.6.1.tar.gz - run: name: Start outputting logs - command: | - while true; do - docker logs my-app - sleep 10 - done + command: docker logs -f my-app background: true - run: name: Wait for app to be ready command: dockerize -wait http://localhost:4000 -timeout 1m - run: - name: Test the application + name: Run tests command: | - mkdir -p /tmp/responses - for i in {1..10}; do - status_file="/tmp/responses/status_${i}.txt" - response_file="/tmp/responses/response_${i}.json" + pwd + ls + python -m pytest -vv tests/ -x --junitxml=test-results/junit.xml --durations=5 + no_output_timeout: 120m - (curl --location --request POST 'http://0.0.0.0:4000/key/generate' \ - --header 'Authorization: Bearer sk-1234' \ - --header 'Content-Type: application/json' \ - --data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' \ - --silent --output "${response_file}" --write-out '%{http_code}' > "${status_file}") & - - # Capture PIDs of background processes - pids[${i}]=$! - done - - # Wait for all background processes to finish - for pid in ${pids[*]}; do - wait $pid - done - - # Check all responses and status codes - fail=false - for i in {1..10}; do - status=$(cat "/tmp/responses/status_${i}.txt") - - # Here, we need to set the correct response file path for each iteration - response_file="/tmp/responses/response_${i}.json" # This was missing in the provided script - - response=$(cat "${response_file}") - echo "Response ${i} (Status code: ${status}):" - echo "${response}" # Use echo here to print the contents - echo # Additional newline for readability - - if [ "$status" -ne 200 ]; then - echo "A request did not return a 200 status code: $status" - fail=true - fi - done - - # If any request did not return status code 200, fail the job - if [ "$fail" = true ]; then - exit 1 - fi - - echo "All requests returned a 200 status code." + # Store test results + - store_test_results: + path: test-results publish_to_pypi: docker: diff --git a/.github/workflows/ghcr_deploy.yml b/.github/workflows/ghcr_deploy.yml index 7b4122c69..5e8d85f47 100644 --- a/.github/workflows/ghcr_deploy.yml +++ b/.github/workflows/ghcr_deploy.yml @@ -41,6 +41,7 @@ jobs: push: true file: Dockerfile.database tags: litellm/litellm-database:${{ github.event.inputs.tag || 'latest' }} + build-and-push-image: runs-on: ubuntu-latest # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. @@ -74,7 +75,9 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta.outputs.tags }}-latest # if a tag is provided, use that, otherwise use the release tag, and if neither is available, use 'latest' labels: ${{ steps.meta.outputs.labels }} - build-and-push-image-alpine: + platform: local, linux/amd64,linux/arm64,linux/arm64/v8 + + build-and-push-image-ui: runs-on: ubuntu-latest permissions: contents: read @@ -90,20 +93,21 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Extract metadata (tags, labels) for Alpine Dockerfile - id: meta-alpine + - name: Extract metadata (tags, labels) for UI Dockerfile + id: meta-ui uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-alpine + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ui - - name: Build and push Alpine Docker image + - name: Build and push UI Docker image uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 with: - context: . - file: Dockerfile.alpine + context: ui/ + file: ui/Dockerfile push: true - tags: ${{ steps.meta-alpine.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta-alpine.outputs.tags }}-latest - labels: ${{ steps.meta-alpine.outputs.labels }} + tags: ${{ steps.meta-ui.outputs.tags }}-${{ github.event.inputs.tag || 'latest' }}, ${{ steps.meta-ui.outputs.tags }}-latest + labels: ${{ steps.meta-ui.outputs.labels }} + platform: local, linux/amd64,linux/arm64,linux/arm64/v8 build-and-push-image-database: runs-on: ubuntu-latest permissions: @@ -168,3 +172,14 @@ jobs: } catch (error) { core.setFailed(error.message); } + - name: Github Releases To Discord + uses: SethCohen/github-releases-to-discord@v1.13.1 + with: + webhook_url: ${{ secrets.WEBHOOK_URL }} + color: "2105893" + username: "Release Changelog" + avatar_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png" + content: "||@everyone||" + footer_title: "Changelog" + footer_icon_url: "https://cdn.discordapp.com/avatars/487431320314576937/bd64361e4ba6313d561d54e78c9e7171.png" + footer_timestamp: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index 618e3d874..863e9c641 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,11 @@ proxy_server_config_@.yaml proxy_server_config_2.yaml litellm/proxy/secret_managers/credentials.json hosted_config.yaml +litellm/proxy/tests/node_modules +litellm/proxy/tests/package.json +litellm/proxy/tests/package-lock.json +ui/litellm-dashboard/.next +ui/litellm-dashboard/node_modules +ui/litellm-dashboard/next-env.d.ts +ui/litellm-dashboard/package.json +ui/litellm-dashboard/package-lock.json \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 183f06205..0de52b8e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -52,4 +52,4 @@ RUN chmod +x entrypoint.sh EXPOSE 4000/tcp ENTRYPOINT ["litellm"] -CMD ["--port", "4000"] \ No newline at end of file +CMD ["--port", "4000", "--config", "./proxy_server_config.yaml", "--detailed_debug", "--run_gunicorn"] \ No newline at end of file diff --git a/Dockerfile.database b/Dockerfile.database index 5c0c4ad36..9e9fb7fc4 100644 --- a/Dockerfile.database +++ b/Dockerfile.database @@ -56,4 +56,4 @@ EXPOSE 4000/tcp # # Set your entrypoint and command ENTRYPOINT ["litellm"] -CMD ["--port", "4000"] +CMD ["--port", "4000", "--run_gunicorn"] diff --git a/cookbook/misc/dev_release.txt b/cookbook/misc/dev_release.txt new file mode 100644 index 000000000..717a6da54 --- /dev/null +++ b/cookbook/misc/dev_release.txt @@ -0,0 +1,2 @@ +python3 -m build +twine upload --verbose dist/litellm-1.18.13.dev4.tar.gz -u __token__ - \ No newline at end of file diff --git a/cookbook/misc/openai_timeouts.py b/cookbook/misc/openai_timeouts.py new file mode 100644 index 000000000..0192d7054 --- /dev/null +++ b/cookbook/misc/openai_timeouts.py @@ -0,0 +1,34 @@ +import os +from openai import OpenAI +from dotenv import load_dotenv +import httpx +import concurrent.futures + +load_dotenv() + +client = OpenAI( + # This is the default and can be omitted + api_key=os.environ.get("OPENAI_API_KEY"), +) + + +def create_chat_completion(): + return client.chat.completions.create( + messages=[ + { + "role": "user", + "content": "Say this is a test. Respond in 20 lines", + } + ], + model="gpt-3.5-turbo", + ) + + +with concurrent.futures.ThreadPoolExecutor() as executor: + # Set a timeout of 10 seconds + future = executor.submit(create_chat_completion) + try: + chat_completion = future.result(timeout=0.00001) + print(chat_completion) + except concurrent.futures.TimeoutError: + print("Operation timed out.") diff --git a/cookbook/misc/sagmaker_streaming.py b/cookbook/misc/sagmaker_streaming.py new file mode 100644 index 000000000..81d857b07 --- /dev/null +++ b/cookbook/misc/sagmaker_streaming.py @@ -0,0 +1,61 @@ +# Notes - on how to do sagemaker streaming using boto3 +import json +import boto3 + +import sys, os +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os, io + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm + +import io +import json + + +class TokenIterator: + def __init__(self, stream): + self.byte_iterator = iter(stream) + self.buffer = io.BytesIO() + self.read_pos = 0 + + def __iter__(self): + return self + + def __next__(self): + while True: + self.buffer.seek(self.read_pos) + line = self.buffer.readline() + if line and line[-1] == ord("\n"): + self.read_pos += len(line) + 1 + full_line = line[:-1].decode("utf-8") + line_data = json.loads(full_line.lstrip("data:").rstrip("/n")) + return line_data["token"]["text"] + chunk = next(self.byte_iterator) + self.buffer.seek(0, io.SEEK_END) + self.buffer.write(chunk["PayloadPart"]["Bytes"]) + + +payload = { + "inputs": "How do I build a website?", + "parameters": {"max_new_tokens": 256}, + "stream": True, +} + +import boto3 + +client = boto3.client("sagemaker-runtime", region_name="us-west-2") +response = client.invoke_endpoint_with_response_stream( + EndpointName="berri-benchmarking-Llama-2-70b-chat-hf-4", + Body=json.dumps(payload), + ContentType="application/json", +) + +# for token in TokenIterator(response["Body"]): +# print(token) diff --git a/dist/litellm-1.16.21.dev1-py3-none-any.whl b/dist/litellm-1.16.21.dev1-py3-none-any.whl new file mode 100644 index 000000000..889690a17 Binary files /dev/null and b/dist/litellm-1.16.21.dev1-py3-none-any.whl differ diff --git a/dist/litellm-1.16.21.dev1.tar.gz b/dist/litellm-1.16.21.dev1.tar.gz new file mode 100644 index 000000000..17d0c0b76 Binary files /dev/null and b/dist/litellm-1.16.21.dev1.tar.gz differ diff --git a/dist/litellm-1.16.21.dev2-py3-none-any.whl b/dist/litellm-1.16.21.dev2-py3-none-any.whl new file mode 100644 index 000000000..c174f2628 Binary files /dev/null and b/dist/litellm-1.16.21.dev2-py3-none-any.whl differ diff --git a/dist/litellm-1.16.21.dev2.tar.gz b/dist/litellm-1.16.21.dev2.tar.gz new file mode 100644 index 000000000..7f81f4553 Binary files /dev/null and b/dist/litellm-1.16.21.dev2.tar.gz differ diff --git a/dist/litellm-1.16.21.dev3-py3-none-any.whl b/dist/litellm-1.16.21.dev3-py3-none-any.whl new file mode 100644 index 000000000..3ce32c6ac Binary files /dev/null and b/dist/litellm-1.16.21.dev3-py3-none-any.whl differ diff --git a/dist/litellm-1.16.21.dev3.tar.gz b/dist/litellm-1.16.21.dev3.tar.gz new file mode 100644 index 000000000..757044faf Binary files /dev/null and b/dist/litellm-1.16.21.dev3.tar.gz differ diff --git a/docker-compose.example.yml b/docker-compose.example.yml deleted file mode 100644 index 6fdaf1506..000000000 --- a/docker-compose.example.yml +++ /dev/null @@ -1,12 +0,0 @@ -version: "3.9" -services: - litellm: - image: ghcr.io/berriai/litellm:main - ports: - - "8000:8000" # Map the container port to the host, change the host port if necessary - volumes: - - ./litellm-config.yaml:/app/config.yaml # Mount the local configuration file - # You can change the port or number of workers as per your requirements or pass any new supported CLI augument. Make sure the port passed here matches with the container port defined above in `ports` value - command: [ "--config", "/app/config.yaml", "--port", "8000", "--num_workers", "8" ] - -# ...rest of your docker-compose config if any diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..36d5d3976 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: "3.9" +services: + litellm: + image: ghcr.io/berriai/litellm:main-latest + volumes: + - ./proxy_server_config.yaml:/app/proxy_server_config.yaml # mount your litellm config.yaml + ports: + - "4000:4000" + environment: + - AZURE_API_KEY=sk-123 + litellm-ui: + image: ghcr.io/berriai/litellm-ui:main-latest + + + diff --git a/docs/my-website/docs/caching/redis_cache.md b/docs/my-website/docs/caching/redis_cache.md index 3d70c5e3d..8a580f087 100644 --- a/docs/my-website/docs/caching/redis_cache.md +++ b/docs/my-website/docs/caching/redis_cache.md @@ -204,6 +204,7 @@ def __init__( s3_bucket_name: Optional[str] = None, s3_region_name: Optional[str] = None, s3_api_version: Optional[str] = None, + s3_path: Optional[str] = None, # if you wish to save to a spefic path s3_use_ssl: Optional[bool] = True, s3_verify: Optional[Union[bool, str]] = None, s3_endpoint_url: Optional[str] = None, diff --git a/docs/my-website/docs/completion/token_usage.md b/docs/my-website/docs/completion/token_usage.md index 3760c3311..626973c57 100644 --- a/docs/my-website/docs/completion/token_usage.md +++ b/docs/my-website/docs/completion/token_usage.md @@ -150,5 +150,12 @@ litellm.register_model(model_cost= "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json") ``` +**Don't pull hosted model_cost_map** +If you have firewalls, and want to just use the local copy of the model cost map, you can do so like this: +```bash +export LITELLM_LOCAL_MODEL_COST_MAP="True" +``` + +Note: this means you will need to upgrade to get updated pricing, and newer models. diff --git a/docs/my-website/docs/embedding/supported_embedding.md b/docs/my-website/docs/embedding/supported_embedding.md index 462cc1e70..d864c5796 100644 --- a/docs/my-website/docs/embedding/supported_embedding.md +++ b/docs/my-website/docs/embedding/supported_embedding.md @@ -13,8 +13,8 @@ response = embedding(model='text-embedding-ada-002', input=["good morning from l - `model`: *string* - ID of the model to use. `model='text-embedding-ada-002'` -- `input`: *array* - Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less. -``` +- `input`: *string or array* - Input text to embed, encoded as a string or array of tokens. To embed multiple inputs in a single request, pass an array of strings or array of token arrays. The input must not exceed the max input tokens for the model (8192 tokens for text-embedding-ada-002), cannot be an empty string, and any array must be 2048 dimensions or less. +```python input=["good morning from litellm"] ``` @@ -22,7 +22,11 @@ input=["good morning from litellm"] - `user`: *string (optional)* A unique identifier representing your end-user, -- `timeout`: *integer* - The maximum time, in seconds, to wait for the API to respond. Defaults to 600 seconds (10 minutes). +- `dimensions`: *integer (Optional)* The number of dimensions the resulting output embeddings should have. Only supported in OpenAI/Azure text-embedding-3 and later models. + +- `encoding_format`: *string (Optional)* The format to return the embeddings in. Can be either `"float"` or `"base64"`. Defaults to `encoding_format="float"` + +- `timeout`: *integer (Optional)* - The maximum time, in seconds, to wait for the API to respond. Defaults to 600 seconds (10 minutes). - `api_base`: *string (optional)* - The api endpoint you want to call the model with @@ -66,11 +70,18 @@ input=["good morning from litellm"] from litellm import embedding import os os.environ['OPENAI_API_KEY'] = "" -response = embedding('text-embedding-ada-002', input=["good morning from litellm"]) +response = embedding( + model="text-embedding-3-small", + input=["good morning from litellm", "this is another item"], + metadata={"anything": "good day"}, + dimensions=5 # Only supported in text-embedding-3 and later models. +) ``` | Model Name | Function Call | Required OS Variables | |----------------------|---------------------------------------------|--------------------------------------| +| text-embedding-3-small | `embedding('text-embedding-3-small', input)` | `os.environ['OPENAI_API_KEY']` | +| text-embedding-3-large | `embedding('text-embedding-3-large', input)` | `os.environ['OPENAI_API_KEY']` | | text-embedding-ada-002 | `embedding('text-embedding-ada-002', input)` | `os.environ['OPENAI_API_KEY']` | ## Azure OpenAI Embedding Models diff --git a/docs/my-website/docs/image_generation.md b/docs/my-website/docs/image_generation.md index 7d436148f..002d95c03 100644 --- a/docs/my-website/docs/image_generation.md +++ b/docs/my-website/docs/image_generation.md @@ -57,7 +57,7 @@ print(f"response: {response}") - `api_type`: *string (optional)* - The type of API to use. -### Output from `litellm.embedding()` +### Output from `litellm.image_generation()` ```json @@ -85,7 +85,7 @@ response = image_generation(model='dall-e-2', prompt="cute baby otter") | Model Name | Function Call | Required OS Variables | |----------------------|---------------------------------------------|--------------------------------------| | dall-e-2 | `image_generation(model='dall-e-2', prompt="cute baby otter")` | `os.environ['OPENAI_API_KEY']` | -| dall-e-3 | `image_generation(model='dall-e-2', prompt="cute baby otter")` | `os.environ['OPENAI_API_KEY']` | +| dall-e-3 | `image_generation(model='dall-e-3', prompt="cute baby otter")` | `os.environ['OPENAI_API_KEY']` | ## Azure OpenAI Image Generation Models @@ -130,4 +130,24 @@ response = image_generation( api_base="http://0.0.0.0:8000/" # set API Base of your Custom OpenAI Endpoint prompt="cute baby otter" ) +``` + +## Bedrock - Stable Diffusion +Use this for stable diffusion on bedrock + + +### Usage +```python +import os +from litellm import image_generation + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + +response = image_generation( + prompt="A cute baby sea otter", + model="bedrock/stability.stable-diffusion-xl-v0", + ) +print(f"response: {response}") ``` \ No newline at end of file diff --git a/docs/my-website/docs/observability/langsmith_integration.md b/docs/my-website/docs/observability/langsmith_integration.md index 247cb8015..ca0421b15 100644 --- a/docs/my-website/docs/observability/langsmith_integration.md +++ b/docs/my-website/docs/observability/langsmith_integration.md @@ -28,6 +28,8 @@ import litellm import os os.environ["LANGSMITH_API_KEY"] = "" +os.environ["LANGSMITH_PROJECT"] = "" # defaults to litellm-completion +os.environ["LANGSMITH_DEFAULT_RUN_NAME"] = "" # defaults to LLMRun # LLM API Keys os.environ['OPENAI_API_KEY']="" diff --git a/docs/my-website/docs/providers/azure.md b/docs/my-website/docs/providers/azure.md index 9e799bc7c..4895b2b1c 100644 --- a/docs/my-website/docs/providers/azure.md +++ b/docs/my-website/docs/providers/azure.md @@ -116,6 +116,57 @@ response = completion( ``` +### Usage - with Azure Vision enhancements + +Note: **Azure requires the `base_url` to be set with `/extensions`** + +Example +```python +base_url=https://gpt-4-vision-resource.openai.azure.com/openai/deployments/gpt-4-vision/extensions +# base_url="{azure_endpoint}/openai/deployments/{azure_deployment}/extensions" +``` + +**Usage** +```python +import os +from litellm import completion + +os.environ["AZURE_API_KEY"] = "your-api-key" + +# azure call +response = completion( + model="azure/gpt-4-vision", + timeout=5, + messages=[ + { + "role": "user", + "content": [ + {"type": "text", "text": "Whats in this image?"}, + { + "type": "image_url", + "image_url": { + "url": "https://avatars.githubusercontent.com/u/29436595?v=4" + }, + }, + ], + } + ], + base_url="https://gpt-4-vision-resource.openai.azure.com/openai/deployments/gpt-4-vision/extensions", + api_key=os.getenv("AZURE_VISION_API_KEY"), + enhancements={"ocr": {"enabled": True}, "grounding": {"enabled": True}}, + dataSources=[ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "https://gpt-4-vision-enhancement.cognitiveservices.azure.com/", + "key": os.environ["AZURE_VISION_ENHANCE_KEY"], + }, + } + ], +) +``` + + ## Advanced ### Azure API Load-Balancing diff --git a/docs/my-website/docs/providers/bedrock.md b/docs/my-website/docs/providers/bedrock.md index 6aff5ee82..85810f067 100644 --- a/docs/my-website/docs/providers/bedrock.md +++ b/docs/my-website/docs/providers/bedrock.md @@ -195,6 +195,81 @@ response = completion( ) ``` +### SSO Login (AWS Profile) +- Set `AWS_PROFILE` environment variable +- Make bedrock completion call +```python +import os +from litellm import completion + +response = completion( + model="bedrock/anthropic.claude-instant-v1", + messages=[{ "content": "Hello, how are you?","role": "user"}] +) +``` + +### STS based Auth + +- Set `aws_role_name` and `aws_session_name` in completion() / embedding() function + +Make the bedrock completion call +```python +from litellm import completion + +response = completion( + model="bedrock/anthropic.claude-instant-v1", + messages=messages, + max_tokens=10, + temperature=0.1, + aws_role_name=aws_role_name, + aws_session_name="my-test-session", + ) +``` + +If you also need to dynamically set the aws user accessing the role, add the additional args in the completion()/embedding() function + +```python +from litellm import completion + +response = completion( + model="bedrock/anthropic.claude-instant-v1", + messages=messages, + max_tokens=10, + temperature=0.1, + aws_region_name=aws_region_name, + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_role_name=aws_role_name, + aws_session_name="my-test-session", + ) +``` + +## Provisioned throughput models +To use provisioned throughput Bedrock models pass +- `model=bedrock/`, example `model=bedrock/anthropic.claude-v2`. Set `model` to any of the [Supported AWS models](#supported-aws-bedrock-models) +- `model_id=provisioned-model-arn` + +Completion +```python +import litellm +response = litellm.completion( + model="bedrock/anthropic.claude-instant-v1", + model_id="provisioned-model-arn", + messages=[{"content": "Hello, how are you?", "role": "user"}] +) +``` + +Embedding +```python +import litellm +response = litellm.embedding( + model="bedrock/amazon.titan-embed-text-v1", + model_id="provisioned-model-arn", + input=["hi"], +) +``` + + ## Supported AWS Bedrock Models Here's an example of using a bedrock model with LiteLLM @@ -240,3 +315,50 @@ print(response) | Titan Embeddings - G1 | `embedding(model="bedrock/amazon.titan-embed-text-v1", input=input)` | | Cohere Embeddings - English | `embedding(model="bedrock/cohere.embed-english-v3", input=input)` | | Cohere Embeddings - Multilingual | `embedding(model="bedrock/cohere.embed-multilingual-v3", input=input)` | + +## Image Generation +Use this for stable diffusion on bedrock + + +### Usage +```python +import os +from litellm import image_generation + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + +response = image_generation( + prompt="A cute baby sea otter", + model="bedrock/stability.stable-diffusion-xl-v0", + ) +print(f"response: {response}") +``` + +**Set optional params** +```python +import os +from litellm import image_generation + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + +response = image_generation( + prompt="A cute baby sea otter", + model="bedrock/stability.stable-diffusion-xl-v0", + ### OPENAI-COMPATIBLE ### + size="128x512", # width=128, height=512 + ### PROVIDER-SPECIFIC ### see `AmazonStabilityConfig` in bedrock.py for all params + seed=30 + ) +print(f"response: {response}") +``` + +## Supported AWS Bedrock Image Generation Models + +| Model Name | Function Call | +|----------------------|---------------------------------------------| +| Stable Diffusion - v0 | `embedding(model="bedrock/stability.stable-diffusion-xl-v0", prompt=prompt)` | +| Stable Diffusion - v0 | `embedding(model="bedrock/stability.stable-diffusion-xl-v1", prompt=prompt)` | \ No newline at end of file diff --git a/docs/my-website/docs/providers/gemini.md b/docs/my-website/docs/providers/gemini.md index b50a85087..9d5eb298b 100644 --- a/docs/my-website/docs/providers/gemini.md +++ b/docs/my-website/docs/providers/gemini.md @@ -6,7 +6,7 @@ # Gemini-Pro ## Sample Usage ```python -import litellm +from litellm import completion import os os.environ['GEMINI_API_KEY'] = "" @@ -24,7 +24,7 @@ LiteLLM Supports the following image types passed in `url` ## Sample Usage ```python import os -import litellm +import litellm from dotenv import load_dotenv # Load the environment variables from .env file diff --git a/docs/my-website/docs/providers/openai.md b/docs/my-website/docs/providers/openai.md index 1a515dea3..dd026661d 100644 --- a/docs/my-website/docs/providers/openai.md +++ b/docs/my-website/docs/providers/openai.md @@ -34,6 +34,7 @@ os.environ["OPENAI_API_BASE"] = "openaiai-api-base" # OPTIONAL | Model Name | Function Call | |-----------------------|-----------------------------------------------------------------| +| gpt-4-0125-preview | `response = completion(model="gpt-4-0125-preview", messages=messages)` | | gpt-4-1106-preview | `response = completion(model="gpt-4-1106-preview", messages=messages)` | | gpt-3.5-turbo-1106 | `response = completion(model="gpt-3.5-turbo-1106", messages=messages)` | | gpt-3.5-turbo | `response = completion(model="gpt-3.5-turbo", messages=messages)` | @@ -173,6 +174,31 @@ response = completion( messages=[{ "content": "Hello, how are you?","role": "user"}] ) ``` + +### Set `ssl_verify=False` + +This is done by setting your own `httpx.Client` + +- For `litellm.completion` set `litellm.client_session=httpx.Client(verify=False)` +- For `litellm.acompletion` set `litellm.aclient_session=AsyncClient.Client(verify=False)` +```python +import litellm, httpx + +# for completion +litellm.client_session = httpx.Client(verify=False) +response = litellm.completion( + model="gpt-3.5-turbo", + messages=messages, +) + +# for acompletion +litellm.aclient_session = httpx.AsyncClient(verify=False) +response = litellm.acompletion( + model="gpt-3.5-turbo", + messages=messages, +) +``` + ### Using Helicone Proxy with LiteLLM ```python import os diff --git a/docs/my-website/docs/providers/palm.md b/docs/my-website/docs/providers/palm.md index 39fcc207c..b41465b5f 100644 --- a/docs/my-website/docs/providers/palm.md +++ b/docs/my-website/docs/providers/palm.md @@ -5,7 +5,7 @@ ## Sample Usage ```python -import litellm +from litellm import completion import os os.environ['PALM_API_KEY'] = "" @@ -17,7 +17,7 @@ response = completion( ## Sample Usage - Streaming ```python -import litellm +from litellm import completion import os os.environ['PALM_API_KEY'] = "" diff --git a/docs/my-website/docs/providers/vertex.md b/docs/my-website/docs/providers/vertex.md index f71aa0ada..d44410ffc 100644 --- a/docs/my-website/docs/providers/vertex.md +++ b/docs/my-website/docs/providers/vertex.md @@ -1,4 +1,4 @@ -# VertexAI - Google [Gemini] +# VertexAI - Google [Gemini, Model Garden] Open In Colab @@ -17,7 +17,28 @@ import litellm litellm.vertex_project = "hardy-device-38811" # Your Project ID litellm.vertex_location = "us-central1" # proj location -response = completion(model="gemini-pro", messages=[{"role": "user", "content": "write code for saying hi from LiteLLM"}]) +response = litellm.completion(model="gemini-pro", messages=[{"role": "user", "content": "write code for saying hi from LiteLLM"}]) +``` + +## OpenAI Proxy Usage + +1. Modify the config.yaml + +```yaml +litellm_settings: + vertex_project: "hardy-device-38811" # Your Project ID + vertex_location: "us-central1" # proj location + +model_list: + -model_name: team1-gemini-pro + litellm_params: + model: gemini-pro +``` + +2. Start the proxy + +```bash +$ litellm --config /path/to/config.yaml ``` ## Set Vertex Project & Vertex Location @@ -46,16 +67,39 @@ os.environ["VERTEXAI_LOCATION"] = "us-central1 # Your Location # set directly on module litellm.vertex_location = "us-central1 # Your Location ``` +## Model Garden +| Model Name | Function Call | +|------------------|--------------------------------------| +| llama2 | `completion('vertex_ai/', messages)` | + +#### Using Model Garden + +```python +from litellm import completion +import os + +## set ENV variables +os.environ["VERTEXAI_PROJECT"] = "hardy-device-38811" +os.environ["VERTEXAI_LOCATION"] = "us-central1" + +response = completion( + model="vertex_ai/", + messages=[{ "content": "Hello, how are you?","role": "user"}] +) +``` ## Gemini Pro | Model Name | Function Call | |------------------|--------------------------------------| -| gemini-pro | `completion('gemini-pro', messages)` | +| gemini-pro | `completion('gemini-pro', messages)`, `completion('vertex_ai/gemini-pro', messages)` | ## Gemini Pro Vision | Model Name | Function Call | |------------------|--------------------------------------| -| gemini-pro-vision | `completion('gemini-pro-vision', messages)` | +| gemini-pro-vision | `completion('gemini-pro-vision', messages)`, `completion('vertex_ai/gemini-pro-vision', messages)`| + + + #### Using Gemini Pro Vision @@ -93,6 +137,7 @@ response = litellm.completion( print(response) ``` + ## Chat Models | Model Name | Function Call | |------------------|--------------------------------------| diff --git a/docs/my-website/docs/providers/vllm.md b/docs/my-website/docs/providers/vllm.md index df9e07ef7..b8285da71 100644 --- a/docs/my-website/docs/providers/vllm.md +++ b/docs/my-website/docs/providers/vllm.md @@ -11,7 +11,7 @@ pip install litellm vllm ```python import litellm -response = completion( +response = litellm.completion( model="vllm/facebook/opt-125m", # add a vllm prefix so litellm knows the custom_llm_provider==vllm messages=messages, temperature=0.2, @@ -29,7 +29,7 @@ In order to use litellm to call a hosted vllm server add the following to your c ```python import litellm -response = completion( +response = litellm.completion( model="openai/facebook/opt-125m", # pass the vllm model name messages=messages, api_base="https://hosted-vllm-api.co", diff --git a/docs/my-website/docs/proxy/alerting.md b/docs/my-website/docs/proxy/alerting.md index 699f6d6ff..e99f43524 100644 --- a/docs/my-website/docs/proxy/alerting.md +++ b/docs/my-website/docs/proxy/alerting.md @@ -1,6 +1,13 @@ # Slack Alerting -Get alerts for failed db read/writes, hanging api calls, failed api calls. +Get alerts for: +- hanging LLM api calls +- failed LLM api calls +- slow LLM api calls +- budget Tracking per key/user: + - When a User/Key crosses their Budget + - When a User/Key is 15% away from crossing their Budget +- failed db read/writes ## Quick Start diff --git a/docs/my-website/docs/proxy/call_hooks.md b/docs/my-website/docs/proxy/call_hooks.md index a92b94a86..ee49e395f 100644 --- a/docs/my-website/docs/proxy/call_hooks.md +++ b/docs/my-website/docs/proxy/call_hooks.md @@ -1,4 +1,4 @@ -# Modify Incoming Data +# Modify / Reject Incoming Requests Modify data just before making litellm completion calls call on proxy diff --git a/docs/my-website/docs/proxy/cli.md b/docs/my-website/docs/proxy/cli.md index 006e49697..d366f1f6b 100644 --- a/docs/my-website/docs/proxy/cli.md +++ b/docs/my-website/docs/proxy/cli.md @@ -1,31 +1,46 @@ # CLI Arguments Cli arguments, --host, --port, --num_workers -#### --host +## --host - **Default:** `'0.0.0.0'` - The host for the server to listen on. - **Usage:** ```shell litellm --host 127.0.0.1 ``` + - **Usage - set Environment Variable:** `HOST` + ```shell + export HOST=127.0.0.1 + litellm + ``` -#### --port +## --port - **Default:** `8000` - The port to bind the server to. - **Usage:** ```shell litellm --port 8080 ``` + - **Usage - set Environment Variable:** `PORT` + ```shell + export PORT=8080 + litellm + ``` -#### --num_workers +## --num_workers - **Default:** `1` - The number of uvicorn workers to spin up. - **Usage:** ```shell litellm --num_workers 4 ``` + - **Usage - set Environment Variable:** `NUM_WORKERS` + ```shell + export NUM_WORKERS=4 + litellm + ``` -#### --api_base +## --api_base - **Default:** `None` - The API base for the model litellm should call. - **Usage:** @@ -33,7 +48,7 @@ Cli arguments, --host, --port, --num_workers litellm --model huggingface/tinyllama --api_base https://k58ory32yinf1ly0.us-east-1.aws.endpoints.huggingface.cloud ``` -#### --api_version +## --api_version - **Default:** `None` - For Azure services, specify the API version. - **Usage:** @@ -41,7 +56,7 @@ Cli arguments, --host, --port, --num_workers litellm --model azure/gpt-deployment --api_version 2023-08-01 --api_base https://" ``` -#### --model or -m +## --model or -m - **Default:** `None` - The model name to pass to Litellm. - **Usage:** @@ -49,7 +64,7 @@ Cli arguments, --host, --port, --num_workers litellm --model gpt-3.5-turbo ``` -#### --test +## --test - **Type:** `bool` (Flag) - Proxy chat completions URL to make a test request. - **Usage:** @@ -57,7 +72,7 @@ Cli arguments, --host, --port, --num_workers litellm --test ``` -#### --health +## --health - **Type:** `bool` (Flag) - Runs a health check on all models in config.yaml - **Usage:** @@ -65,7 +80,7 @@ Cli arguments, --host, --port, --num_workers litellm --health ``` -#### --alias +## --alias - **Default:** `None` - An alias for the model, for user-friendly reference. - **Usage:** @@ -73,7 +88,7 @@ Cli arguments, --host, --port, --num_workers litellm --alias my-gpt-model ``` -#### --debug +## --debug - **Default:** `False` - **Type:** `bool` (Flag) - Enable debugging mode for the input. @@ -81,15 +96,25 @@ Cli arguments, --host, --port, --num_workers ```shell litellm --debug ``` + - **Usage - set Environment Variable:** `DEBUG` + ```shell + export DEBUG=True + litellm + ``` -#### --detailed_debug +## --detailed_debug - **Default:** `False` - **Type:** `bool` (Flag) - Enable debugging mode for the input. - **Usage:** ```shell litellm --detailed_debug - `` + ``` + - **Usage - set Environment Variable:** `DETAILED_DEBUG` + ```shell + export DETAILED_DEBUG=True + litellm + ``` #### --temperature - **Default:** `None` @@ -100,7 +125,7 @@ Cli arguments, --host, --port, --num_workers litellm --temperature 0.7 ``` -#### --max_tokens +## --max_tokens - **Default:** `None` - **Type:** `int` - Set the maximum number of tokens for the model output. @@ -109,7 +134,7 @@ Cli arguments, --host, --port, --num_workers litellm --max_tokens 50 ``` -#### --request_timeout +## --request_timeout - **Default:** `600` - **Type:** `int` - Set the timeout in seconds for completion calls. @@ -118,7 +143,7 @@ Cli arguments, --host, --port, --num_workers litellm --request_timeout 300 ``` -#### --drop_params +## --drop_params - **Type:** `bool` (Flag) - Drop any unmapped params. - **Usage:** @@ -126,7 +151,7 @@ Cli arguments, --host, --port, --num_workers litellm --drop_params ``` -#### --add_function_to_prompt +## --add_function_to_prompt - **Type:** `bool` (Flag) - If a function passed but unsupported, pass it as a part of the prompt. - **Usage:** @@ -134,14 +159,14 @@ Cli arguments, --host, --port, --num_workers litellm --add_function_to_prompt ``` -#### --config +## --config - Configure Litellm by providing a configuration file path. - **Usage:** ```shell litellm --config path/to/config.yaml ``` -#### --telemetry +## --telemetry - **Default:** `True` - **Type:** `bool` - Help track usage of this feature. diff --git a/docs/my-website/docs/proxy/configs.md b/docs/my-website/docs/proxy/configs.md index b3fc93105..c68c1d4eb 100644 --- a/docs/my-website/docs/proxy/configs.md +++ b/docs/my-website/docs/proxy/configs.md @@ -22,18 +22,22 @@ Set a model alias for your deployments. In the `config.yaml` the model_name parameter is the user-facing name to use for your deployment. -In the config below requests with: +In the config below: +- `model_name`: the name to pass TO litellm from the external client +- `litellm_params.model`: the model string passed to the litellm.completion() function + +E.g.: - `model=vllm-models` will route to `openai/facebook/opt-125m`. - `model=gpt-3.5-turbo` will load balance between `azure/gpt-turbo-small-eu` and `azure/gpt-turbo-small-ca` ```yaml model_list: - - model_name: gpt-3.5-turbo # user-facing model alias + - model_name: gpt-3.5-turbo ### RECEIVED MODEL NAME ### litellm_params: # all params accepted by litellm.completion() - https://docs.litellm.ai/docs/completion/input - model: azure/gpt-turbo-small-eu + model: azure/gpt-turbo-small-eu ### MODEL NAME sent to `litellm.completion()` ### api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ api_key: "os.environ/AZURE_API_KEY_EU" # does os.getenv("AZURE_API_KEY_EU") - rpm: 6 # Rate limit for this deployment: in requests per minute (rpm) + rpm: 6 # [OPTIONAL] Rate limit for this deployment: in requests per minute (rpm) - model_name: bedrock-claude-v1 litellm_params: model: bedrock/anthropic.claude-instant-v1 @@ -43,6 +47,11 @@ model_list: api_base: https://my-endpoint-canada-berri992.openai.azure.com/ api_key: "os.environ/AZURE_API_KEY_CA" rpm: 6 + - model_name: anthropic-claude + litellm_params: + model="bedrock/anthropic.claude-instant-v1" + ### [OPTIONAL] SET AWS REGION ### + aws_region_name="us-east-1" - model_name: vllm-models litellm_params: model: openai/facebook/opt-125m # the `openai/` prefix tells litellm it's openai compatible @@ -58,6 +67,11 @@ litellm_settings: # module level litellm settings - https://github.com/BerriAI/l general_settings: master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) ``` +:::info + +For more provider-specific info, [go here](../providers/) + +::: #### Step 2: Start Proxy with config @@ -188,7 +202,7 @@ print(response) -## Save Model-specific params (API Base, API Keys, Temperature, Max Tokens, Seed, Headers etc.) +## Save Model-specific params (API Base, API Keys, Temperature, Max Tokens, Seed, Organization, Headers etc.) You can use the config to save model-specific information like api_base, api_key, temperature, max_tokens, etc. [**All input params**](https://docs.litellm.ai/docs/completion/input#input-params-1) @@ -210,6 +224,12 @@ model_list: api_key: sk-123 api_base: https://openai-gpt-4-test-v-2.openai.azure.com/ temperature: 0.2 + - model_name: openai-gpt-3.5 + litellm_params: + model: openai/gpt-3.5-turbo + api_key: sk-123 + organization: org-ikDc4ex8NB + temperature: 0.2 - model_name: mistral-7b litellm_params: model: ollama/mistral @@ -318,6 +338,26 @@ See supported Embedding Providers & Models [here](https://docs.litellm.ai/docs/e #### Create Config.yaml + + +```yaml +model_list: + - model_name: bedrock-cohere + litellm_params: + model: "bedrock/cohere.command-text-v14" + aws_region_name: "us-west-2" + - model_name: bedrock-cohere + litellm_params: + model: "bedrock/cohere.command-text-v14" + aws_region_name: "us-east-2" + - model_name: bedrock-cohere + litellm_params: + model: "bedrock/cohere.command-text-v14" + aws_region_name: "us-east-1" + +``` + + @@ -430,20 +470,26 @@ model_list: #### Start Proxy + ```shell litellm --config config.yaml ``` #### Make Request -Sends Request to `deployed-codebert-base` +Sends Request to `bedrock-cohere` ```shell -curl --location 'http://0.0.0.0:8000/embeddings' \ +curl --location 'http://0.0.0.0:8000/chat/completions' \ --header 'Content-Type: application/json' \ --data ' { - "model": "deployed-codebert-base", - "input": ["write a litellm poem"] - }' + "model": "bedrock-cohere", + "messages": [ + { + "role": "user", + "content": "gm" + } + ] +}' ``` @@ -483,3 +529,55 @@ general_settings: max_parallel_requests: 100 # max parallel requests for a user = 100 ``` +## All settings + +```python +{ + "environment_variables": {}, + "model_list": [ + { + "model_name": "string", + "litellm_params": {}, + "model_info": { + "id": "string", + "mode": "embedding", + "input_cost_per_token": 0, + "output_cost_per_token": 0, + "max_tokens": 2048, + "base_model": "gpt-4-1106-preview", + "additionalProp1": {} + } + } + ], + "litellm_settings": {}, # ALL (https://github.com/BerriAI/litellm/blob/main/litellm/__init__.py) + "general_settings": { + "completion_model": "string", + "key_management_system": "google_kms", # either google_kms or azure_kms + "master_key": "string", + "database_url": "string", + "database_type": "dynamo_db", + "database_args": { + "billing_mode": "PROVISIONED_THROUGHPUT", + "read_capacity_units": 0, + "write_capacity_units": 0, + "ssl_verify": true, + "region_name": "string", + "user_table_name": "LiteLLM_UserTable", + "key_table_name": "LiteLLM_VerificationToken", + "config_table_name": "LiteLLM_Config", + "spend_table_name": "LiteLLM_SpendLogs" + }, + "otel": true, + "custom_auth": "string", + "max_parallel_requests": 0, + "infer_model_from_keys": true, + "background_health_checks": true, + "health_check_interval": 300, + "alerting": [ + "string" + ], + "alerting_threshold": 0 + } +} +``` + diff --git a/docs/my-website/docs/proxy/custom_pricing.md b/docs/my-website/docs/proxy/custom_pricing.md new file mode 100644 index 000000000..cfc804dd7 --- /dev/null +++ b/docs/my-website/docs/proxy/custom_pricing.md @@ -0,0 +1,115 @@ +import Image from '@theme/IdealImage'; + +# Custom Pricing - Sagemaker, etc. + +Use this to register custom pricing for models. + +There's 2 ways to track cost: +- cost per token +- cost per second + +By default, the response cost is accessible in the logging object via `kwargs["response_cost"]` on success (sync + async). [**Learn More**](../observability/custom_callback.md) + +## Quick Start + +Register custom pricing for sagemaker completion model. + +For cost per second pricing, you **just** need to register `input_cost_per_second`. + +```python +# !pip install boto3 +from litellm import completion, completion_cost + +os.environ["AWS_ACCESS_KEY_ID"] = "" +os.environ["AWS_SECRET_ACCESS_KEY"] = "" +os.environ["AWS_REGION_NAME"] = "" + + +def test_completion_sagemaker(): + try: + print("testing sagemaker") + response = completion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=[{"role": "user", "content": "Hey, how's it going?"}], + input_cost_per_second=0.000420, + ) + # Add any assertions here to check the response + print(response) + cost = completion_cost(completion_response=response) + print(cost) + except Exception as e: + raise Exception(f"Error occurred: {e}") + +``` + +### Usage with OpenAI Proxy Server + +**Step 1: Add pricing to config.yaml** +```yaml +model_list: + - model_name: sagemaker-completion-model + litellm_params: + model: sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4 + input_cost_per_second: 0.000420 + - model_name: sagemaker-embedding-model + litellm_params: + model: sagemaker/berri-benchmarking-gpt-j-6b-fp16 + input_cost_per_second: 0.000420 +``` + +**Step 2: Start proxy** + +```bash +litellm /path/to/config.yaml +``` + +**Step 3: View Spend Logs** + + + +## Cost Per Token (e.g. Azure) + + +```python +# !pip install boto3 +from litellm import completion, completion_cost + +## set ENV variables +os.environ["AZURE_API_KEY"] = "" +os.environ["AZURE_API_BASE"] = "" +os.environ["AZURE_API_VERSION"] = "" + + +def test_completion_azure_model(): + try: + print("testing azure custom pricing") + # azure call + response = completion( + model = "azure/", + messages = [{ "content": "Hello, how are you?","role": "user"}] + input_cost_per_token=0.005, + output_cost_per_token=1, + ) + # Add any assertions here to check the response + print(response) + cost = completion_cost(completion_response=response) + print(cost) + except Exception as e: + raise Exception(f"Error occurred: {e}") + +test_completion_azure_model() +``` + +### Usage with OpenAI Proxy Server + +```yaml +model_list: + - model_name: azure-model + litellm_params: + model: azure/ + api_key: os.environ/AZURE_API_KEY + api_base: os.environ/AZURE_API_BASE + api_version: os.envrion/AZURE_API_VERSION + input_cost_per_token: 0.000421 # 👈 ONLY to track cost per token + output_cost_per_token: 0.000520 # 👈 ONLY to track cost per token +``` \ No newline at end of file diff --git a/docs/my-website/docs/proxy/debugging.md b/docs/my-website/docs/proxy/debugging.md new file mode 100644 index 000000000..c5653d90f --- /dev/null +++ b/docs/my-website/docs/proxy/debugging.md @@ -0,0 +1,34 @@ +# Debugging + +2 levels of debugging supported. + +- debug (prints info logs) +- detailed debug (prints debug logs) + +## `debug` + +**via cli** + +```bash +$ litellm --debug +``` + +**via env** + +```python +os.environ["LITELLM_LOG"] = "INFO" +``` + +## `detailed debug` + +**via cli** + +```bash +$ litellm --detailed_debug +``` + +**via env** + +```python +os.environ["LITELLM_LOG"] = "DEBUG" +``` \ No newline at end of file diff --git a/docs/my-website/docs/proxy/health.md b/docs/my-website/docs/proxy/health.md index d724bdaca..5c73de4af 100644 --- a/docs/my-website/docs/proxy/health.md +++ b/docs/my-website/docs/proxy/health.md @@ -5,8 +5,10 @@ Use this to health check all LLMs defined in your config.yaml The proxy exposes: * a /health endpoint which returns the health of the LLM APIs -* a /test endpoint which makes a ping to the litellm server +* a /health/readiness endpoint for returning if the proxy is ready to accept requests +* a /health/liveliness endpoint for returning if the proxy is alive +## `/health` #### Request Make a GET Request to `/health` on the proxy ```shell @@ -39,7 +41,7 @@ litellm --health } ``` -## Background Health Checks +### Background Health Checks You can enable model health checks being run in the background, to prevent each model from being queried too frequently via `/health`. @@ -61,7 +63,7 @@ $ litellm /path/to/config.yaml curl --location 'http://0.0.0.0:8000/health' ``` -## Embedding Models +### Embedding Models We need some way to know if the model is an embedding model when running checks, if you have this in your config, specifying mode it makes an embedding health check @@ -77,3 +79,69 @@ model_list: mode: embedding # 👈 ADD THIS ``` +### Text Completion Models + +We need some way to know if the model is a text completion model when running checks, if you have this in your config, specifying mode it makes an embedding health check + +```yaml +model_list: + - model_name: azure-text-completion + litellm_params: + model: azure/text-davinci-003 + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: "2023-07-01-preview" + model_info: + mode: completion # 👈 ADD THIS +``` + +## `/health/readiness` + +Unprotected endpoint for checking if proxy is ready to accept requests + +Example Request: + +```bash +curl --location 'http://0.0.0.0:8000/health/readiness' +``` + +Example Response: + +*If proxy connected to a database* + +```json +{ + "status": "healthy", + "db": "connected", + "litellm_version":"1.19.2", +} +``` + +*If proxy not connected to a database* + +```json +{ + "status": "healthy", + "db": "Not connected", + "litellm_version":"1.19.2", +} +``` + +## `/health/liveliness` + +Unprotected endpoint for checking if proxy is alive + + +Example Request: + +``` +curl -X 'GET' \ + 'http://0.0.0.0:8000/health/liveliness' \ + -H 'accept: application/json' +``` + +Example Response: + +```json +"I'm alive!" +``` \ No newline at end of file diff --git a/docs/my-website/docs/proxy/load_balancing.md b/docs/my-website/docs/proxy/load_balancing.md index e223c2d5a..bc40ff2c7 100644 --- a/docs/my-website/docs/proxy/load_balancing.md +++ b/docs/my-website/docs/proxy/load_balancing.md @@ -1,5 +1,4 @@ - -# Load Balancing - Multiple Instances of 1 model +# Multiple Instances of 1 model Load balance multiple instances of the same model The proxy will handle routing requests (using LiteLLM's Router). **Set `rpm` in the config if you want maximize throughput** diff --git a/docs/my-website/docs/proxy/logging.md b/docs/my-website/docs/proxy/logging.md index 8bf0fcee2..0c5fd6bb9 100644 --- a/docs/my-website/docs/proxy/logging.md +++ b/docs/my-website/docs/proxy/logging.md @@ -435,6 +435,7 @@ print(response) + ## Logging Proxy Input/Output - s3 Buckets We will use the `--config` to set @@ -490,6 +491,34 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \ Your logs should be available on the specified s3 Bucket +## Team-based Logging + +Set success callbacks (e.g. langfuse), for a specific team-id. + +```yaml +litellm_settings: + default_team_settings: + - team_id: my-secret-project + success_callback: ["langfuse"] + langfuse_public_key: os.environ/LANGFUSE_PUB_KEY_2 + langfuse_secret: os.environ/LANGFUSE_PRIVATE_KEY_2 + - team_id: ishaans-secret-project + success_callback: ["langfuse"] + langfuse_public_key: os.environ/LANGFUSE_PUB_KEY_3 + langfuse_secret: os.environ/LANGFUSE_SECRET_3 +``` + +Now, when you [generate keys](./virtual_keys.md) for this team-id + +```bash +curl -X POST 'http://0.0.0.0:8000/key/generate' \ +-H 'Authorization: Bearer sk-1234' \ +-H 'Content-Type: application/json' \ +-D '{"team_id": "ishaans-secret-project"}' +``` + +All requests made with these keys will log data to their team-specific logging. + ## Logging Proxy Input/Output - DynamoDB We will use the `--config` to set diff --git a/docs/my-website/docs/proxy/quick_start.md b/docs/my-website/docs/proxy/quick_start.md index fec578c96..82acfc79b 100644 --- a/docs/my-website/docs/proxy/quick_start.md +++ b/docs/my-website/docs/proxy/quick_start.md @@ -40,115 +40,6 @@ litellm --test This will now automatically route any requests for gpt-3.5-turbo to bigcode starcoder, hosted on huggingface inference endpoints. -### Using LiteLLM Proxy - Curl Request, OpenAI Package, Langchain - - - - -```shell -curl --location 'http://0.0.0.0:8000/chat/completions' \ ---header 'Content-Type: application/json' \ ---data ' { - "model": "gpt-3.5-turbo", - "messages": [ - { - "role": "user", - "content": "what llm are you" - } - ] - } -' -``` - - - -```python -import openai -client = openai.OpenAI( - api_key="anything", - base_url="http://0.0.0.0:8000" -) - -# request sent to model set on litellm proxy, `litellm --model` -response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ - { - "role": "user", - "content": "this is a test request, write a short poem" - } -]) - -print(response) - -``` - - - -```python -from langchain.chat_models import ChatOpenAI -from langchain.prompts.chat import ( - ChatPromptTemplate, - HumanMessagePromptTemplate, - SystemMessagePromptTemplate, -) -from langchain.schema import HumanMessage, SystemMessage - -chat = ChatOpenAI( - openai_api_base="http://0.0.0.0:8000", # set openai_api_base to the LiteLLM Proxy - model = "gpt-3.5-turbo", - temperature=0.1 -) - -messages = [ - SystemMessage( - content="You are a helpful assistant that im using to make a test request to." - ), - HumanMessage( - content="test from litellm. tell me why it's amazing in 1 sentence" - ), -] -response = chat(messages) - -print(response) -``` - - - - -```python -from langchain.embeddings import OpenAIEmbeddings - -embeddings = OpenAIEmbeddings(model="sagemaker-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") - - -text = "This is a test document." - -query_result = embeddings.embed_query(text) - -print(f"SAGEMAKER EMBEDDINGS") -print(query_result[:5]) - -embeddings = OpenAIEmbeddings(model="bedrock-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") - -text = "This is a test document." - -query_result = embeddings.embed_query(text) - -print(f"BEDROCK EMBEDDINGS") -print(query_result[:5]) - -embeddings = OpenAIEmbeddings(model="bedrock-titan-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") - -text = "This is a test document." - -query_result = embeddings.embed_query(text) - -print(f"TITAN EMBEDDINGS") -print(query_result[:5]) -``` - - - - ### Supported LLMs All LiteLLM supported LLMs are supported on the Proxy. Seel all [supported llms](https://docs.litellm.ai/docs/providers) @@ -331,6 +222,113 @@ $ litellm --model command-nightly +### Using LiteLLM Proxy - Curl Request, OpenAI Package, Langchain + + + + +```shell +curl --location 'http://0.0.0.0:8000/chat/completions' \ +--header 'Content-Type: application/json' \ +--data ' { + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ] + } +' +``` + + + +```python +import openai +client = openai.OpenAI( + api_key="anything", + base_url="http://0.0.0.0:8000" +) + +# request sent to model set on litellm proxy, `litellm --model` +response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } +]) + +print(response) + +``` + + + +```python +from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage + +chat = ChatOpenAI( + openai_api_base="http://0.0.0.0:8000", # set openai_api_base to the LiteLLM Proxy + model = "gpt-3.5-turbo", + temperature=0.1 +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response) +``` + + + + +```python +from langchain.embeddings import OpenAIEmbeddings + +embeddings = OpenAIEmbeddings(model="sagemaker-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") + + +text = "This is a test document." + +query_result = embeddings.embed_query(text) + +print(f"SAGEMAKER EMBEDDINGS") +print(query_result[:5]) + +embeddings = OpenAIEmbeddings(model="bedrock-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") + +text = "This is a test document." + +query_result = embeddings.embed_query(text) + +print(f"BEDROCK EMBEDDINGS") +print(query_result[:5]) + +embeddings = OpenAIEmbeddings(model="bedrock-titan-embeddings", openai_api_base="http://0.0.0.0:8000", openai_api_key="temp-key") + +text = "This is a test document." + +query_result = embeddings.embed_query(text) + +print(f"TITAN EMBEDDINGS") +print(query_result[:5]) +``` + + ## Quick Start - LiteLLM Proxy + Config.yaml diff --git a/docs/my-website/docs/proxy/rules.md b/docs/my-website/docs/proxy/rules.md index 1e963577f..415607b61 100644 --- a/docs/my-website/docs/proxy/rules.md +++ b/docs/my-website/docs/proxy/rules.md @@ -8,9 +8,12 @@ Use this to fail a request based on the output of an llm api call. ```python def my_custom_rule(input): # receives the model response - if len(input) < 5: # trigger fallback if the model response is too short - return False - return True + if len(input) < 5: + return { + "decision": False, + "message": "This violates LiteLLM Proxy Rules. Response too short" + } + return {"decision": True} # message not required since, request will pass ``` ### Step 2. Point it to your proxy @@ -18,7 +21,6 @@ def my_custom_rule(input): # receives the model response ```python litellm_settings: post_call_rules: post_call_rules.my_custom_rule - num_retries: 3 ``` ### Step 3. Start + test your proxy @@ -32,7 +34,7 @@ curl --location 'http://0.0.0.0:8000/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer sk-1234' \ --data '{ - "model": "deepseek-coder", + "model": "gpt-3.5-turbo", "messages": [{"role":"user","content":"What llm are you?"}], "temperature": 0.7, "max_tokens": 10, @@ -40,4 +42,20 @@ curl --location 'http://0.0.0.0:8000/v1/chat/completions' \ ``` --- -This will now check if a response is > len 5, and if it fails, it'll retry a call 3 times before failing. \ No newline at end of file +This will now check if a response is > len 5, and if it fails, it'll retry a call 3 times before failing. + +### Response that fail the rule + +This is the response from LiteLLM Proxy on failing a rule + +```json +{ + "error": + { + "message":"This violates LiteLLM Proxy Rules. Response too short", + "type":null, + "param":null, + "code":500 + } +} +``` \ No newline at end of file diff --git a/docs/my-website/docs/proxy/ui.md b/docs/my-website/docs/proxy/ui.md index ca056e8a5..a7703c854 100644 --- a/docs/my-website/docs/proxy/ui.md +++ b/docs/my-website/docs/proxy/ui.md @@ -1,8 +1,8 @@ import Image from '@theme/IdealImage'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; -# [BETA] Self-serve UI - -Allow your users to create their own keys through a UI +# [BETA] Admin UI :::info @@ -10,40 +10,89 @@ This is in beta, so things may change. If you have feedback, [let us know](https ::: +Allow your users to create, view their own keys through a UI + + + + + ## Quick Start -Requirements: +## 1. Setup SSO/Auth for UI -- Need to a SMTP server connection to send emails (e.g. [Resend](https://resend.com/docs/send-with-smtp)) + -[**See code**](https://github.com/BerriAI/litellm/blob/61cd800b9ffbb02c286481d2056b65c7fb5447bf/litellm/proxy/proxy_server.py#L1782) + -### Step 1. Save SMTP server credentials +Set the following in your .env on the Proxy -```env -export SMTP_HOST="my-smtp-host" -export SMTP_USERNAME="my-smtp-password" -export SMTP_PASSWORD="my-smtp-password" -export SMTP_SENDER_EMAIL="krrish@berri.ai" +```shell +UI_USERNAME=ishaan-litellm +UI_PASSWORD=langchain ``` -### Step 2. Enable user auth +On accessing the LiteLLM UI, you will be prompted to enter your username, password -In your config.yaml, + -```yaml -general_settings: - # other changes - allow_user_auth: true + + +- Create a new Oauth 2.0 Client on https://console.cloud.google.com/ + +**Required .env variables on your Proxy** +```shell +# for Google SSO Login +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= ``` -This will enable: -* Users to create keys via `/key/generate` (by default, only admin can create keys) -* The `/user/auth` endpoint to send user's emails with their login credentials (key + user id) +- Set Redirect URL on your Oauth 2.0 Client on https://console.cloud.google.com/ + - Set a redirect url = `/sso/callback` + ```shell + https://litellm-production-7002.up.railway.app/sso/callback + ``` -### Step 3. Connect to UI + -You can use our hosted UI (https://dashboard.litellm.ai/) or [self-host your own](https://github.com/BerriAI/litellm/tree/main/ui). + + +- Create a new App Registration on https://portal.azure.com/ +- Create a client Secret for your App Registration + +**Required .env variables on your Proxy** +```shell +MICROSOFT_CLIENT_ID="84583a4d-" +MICROSOFT_CLIENT_SECRET="nbk8Q~" +MICROSOFT_TENANT="5a39737 +``` +- Set Redirect URI on your App Registration on https://portal.azure.com/ + - Set a redirect url = `/sso/callback` + ```shell + http://localhost:4000/sso/callback + ``` + + + + + +## 2. Start Proxy Server + +```shell +litellm --config proxy_config.yaml --port 4000 + +# start proxy on port 4000 +``` + +## 3. Get Admin UI Link to you on Swagger + +Your Proxy Swagger is available on the root of the Proxy: `http://localhost:4000/` + + + + + + + + diff --git a/docs/my-website/docs/proxy/users.md b/docs/my-website/docs/proxy/users.md index bce596a5b..c5f2ca358 100644 --- a/docs/my-website/docs/proxy/users.md +++ b/docs/my-website/docs/proxy/users.md @@ -1,4 +1,7 @@ -# 💰 Budgets, Rate Limits per user +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# 💰 Budgets, Rate Limits Requirements: @@ -6,17 +9,74 @@ Requirements: ## Set Budgets -LiteLLM exposes a `/user/new` endpoint to create budgets for users, that persist across multiple keys. -This is documented in the swagger (live on your server root endpoint - e.g. `http://0.0.0.0:8000/`). Here's an example request. +You can set budgets at 3 levels: +- For the proxy +- For a user +- For a key + + + + +Apply a budget across all calls on the proxy + +**Step 1. Modify config.yaml** + +```yaml +general_settings: + master_key: sk-1234 + +litellm_settings: + # other litellm settings + max_budget: 0 # (float) sets max budget as $0 USD + budget_duration: 30d # (str) frequency of reset - You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). +``` + +**Step 2. Start proxy** + +```bash +litellm /path/to/config.yaml +``` + +**Step 3. Send test call** + +```bash +curl --location 'http://0.0.0.0:8000/chat/completions' \ + --header 'Autherization: Bearer sk-1234' \ + --header 'Content-Type: application/json' \ + --data '{ + "model": "gpt-3.5-turbo", + "messages": [ + { + "role": "user", + "content": "what llm are you" + } + ], +}' +``` + + + +Apply a budget across multiple keys. + +LiteLLM exposes a `/user/new` endpoint to create budgets for this. + +You can: +- Add budgets to users [**Jump**](#add-budgets-to-users) +- Add budget durations, to reset spend [**Jump**](#add-budget-duration-to-users) + +By default the `max_budget` is set to `null` and is not checked for keys + +### **Add budgets to users** ```shell curl --location 'http://localhost:8000/user/new' \ --header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ --data-raw '{"models": ["azure-models"], "max_budget": 0, "user_id": "krrish3@berri.ai"}' ``` -The request is a normal `/key/generate` request body + a `max_budget` field. + +[**See Swagger**](https://litellm-api.up.railway.app/#/user%20management/new_user_user_new_post) **Sample Response** @@ -29,14 +89,201 @@ The request is a normal `/key/generate` request body + a `max_budget` field. } ``` +### **Add budget duration to users** + +`budget_duration`: Budget is reset at the end of specified duration. If not set, budget is never reset. You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). + +``` +curl 'http://0.0.0.0:8000/user/new' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "team_id": "core-infra", # [OPTIONAL] + "max_budget": 10, + "budget_duration": 10s, +}' +``` + +### Create new keys for existing user + +Now you can just call `/key/generate` with that user_id (i.e. krrish3@berri.ai) and: +- **Budget Check**: krrish3@berri.ai's budget (i.e. $10) will be checked for this key +- **Spend Tracking**: spend for this key will update krrish3@berri.ai's spend as well + +```bash +curl --location 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data '{"models": ["azure-models"], "user_id": "krrish3@berri.ai"}' +``` + + + + +Apply a budget on a key. + +You can: +- Add budgets to keys [**Jump**](#add-budgets-to-keys) +- Add budget durations, to reset spend [**Jump**](#add-budget-duration-to-keys) + +**Expected Behaviour** +- Costs Per key get auto-populated in `LiteLLM_VerificationToken` Table +- After the key crosses it's `max_budget`, requests fail +- If duration set, spend is reset at the end of the duration + +By default the `max_budget` is set to `null` and is not checked for keys + +### **Add budgets to keys** + +```bash +curl 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "team_id": "core-infra", # [OPTIONAL] + "max_budget": 10, +}' +``` + +Example Request to `/chat/completions` when key has crossed budget + +```shell +curl --location 'http://0.0.0.0:8000/chat/completions' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --data ' { + "model": "azure-gpt-3.5", + "user": "e09b4da8-ed80-4b05-ac93-e16d9eb56fca", + "messages": [ + { + "role": "user", + "content": "respond in 50 lines" + } + ], +}' +``` + + +Expected Response from `/chat/completions` when key has crossed budget +```shell +{ + "detail":"Authentication Error, ExceededTokenBudget: Current spend for token: 7.2e-05; Max Budget for Token: 2e-07" +} +``` + +### **Add budget duration to keys** + +`budget_duration`: Budget is reset at the end of specified duration. If not set, budget is never reset. You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). + +``` +curl 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "team_id": "core-infra", # [OPTIONAL] + "max_budget": 10, + "budget_duration": 10s, +}' +``` + + + ## Set Rate Limits -Set max parallel requests a user can make, when you create user keys - `/key/generate`. +You can set: +- max parallel requests +- tpm limits +- rpm limits + + + + +Use `/user/new`, to persist rate limits across multiple keys. + + +```shell +curl --location 'http://0.0.0.0:8000/user/new' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{"user_id": "krrish@berri.ai", "max_parallel_requests": 10, "tpm_limit": 20, "rpm_limit": 4}' +``` + +[**See Swagger**](https://litellm-api.up.railway.app/#/user%20management/new_user_user_new_post) + +**Expected Response** + +```json +{ + "key": "sk-sA7VDkyhlQ7m8Gt77Mbt3Q", + "expires": "2024-01-19T01:21:12.816168", + "user_id": "krrish@berri.ai", +} +``` + + + + +Use `/key/generate`, if you want them for just that key. ```shell curl --location 'http://0.0.0.0:8000/key/generate' \ --header 'Authorization: Bearer sk-1234' \ --header 'Content-Type: application/json' \ ---data '{"duration": "20m", "max_parallel_requests": 1}' # 👈 max parallel requests = 1 +--data '{"max_parallel_requests": 10, "tpm_limit": 20, "rpm_limit": 4}' +``` + +**Expected Response** + +```json +{ + "key": "sk-ulGNRXWtv7M0lFnnsQk0wQ", + "expires": "2024-01-18T20:48:44.297973", + "user_id": "78c2c8fc-c233-43b9-b0c3-eb931da27b84" // 👈 auto-generated +} +``` + + + + +## Grant Access to new model + +Use model access groups to give users access to select models, and add new ones to it over time (e.g. mistral, llama-2, etc.). + +Difference between doing this with `/key/generate` vs. `/user/new`? If you do it on `/user/new` it'll persist across multiple keys generated for that user. + +**Step 1. Assign model, access group in config.yaml** + +```yaml +model_list: + - model_name: text-embedding-ada-002 + litellm_params: + model: azure/azure-embedding-model + api_base: "os.environ/AZURE_API_BASE" + api_key: "os.environ/AZURE_API_KEY" + api_version: "2023-07-01-preview" + model_info: + access_groups: ["beta-models"] # 👈 Model Access Group +``` + +**Step 2. Create key with access group** + +```bash +curl --location 'http://localhost:8000/user/new' \ +-H 'Authorization: Bearer ' \ +-H 'Content-Type: application/json' \ +-d '{"models": ["beta-models"], # 👈 Model Access Group + "max_budget": 0}' +``` + + +## Create new keys for existing user + +Just include user_id in the `/key/generate` request. + +```bash +curl --location 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data '{"models": ["azure-models"], "user_id": "krrish@berri.ai"}' ``` \ No newline at end of file diff --git a/docs/my-website/docs/proxy/virtual_keys.md b/docs/my-website/docs/proxy/virtual_keys.md index e69b74e5a..dd5edc6da 100644 --- a/docs/my-website/docs/proxy/virtual_keys.md +++ b/docs/my-website/docs/proxy/virtual_keys.md @@ -1,4 +1,4 @@ -# Key Management +# Virtual Keys, Users Track Spend, Set budgets and create virtual keys for the proxy Grant other's temporary access to your proxy, with keys that expire after a set duration. @@ -12,7 +12,7 @@ Grant other's temporary access to your proxy, with keys that expire after a set ::: -## Quick Start +## Setup Requirements: @@ -56,38 +56,55 @@ litellm --config /path/to/config.yaml ```shell curl 'http://0.0.0.0:8000/key/generate' \ ---header 'Authorization: Bearer sk-1234' \ +--header 'Authorization: Bearer ' \ --header 'Content-Type: application/json' \ ---data-raw '{"models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], "duration": "20m","metadata": {"user": "ishaan@berri.ai", "team": "core-infra"}}' +--data-raw '{"models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], "duration": "20m","metadata": {"user": "ishaan@berri.ai"}}' ``` -- `models`: *list or null (optional)* - Specify the models a token has access too. If null, then token has access to all models on server. -- `duration`: *str or null (optional)* Specify the length of time the token is valid for. If null, default is set to 1 hour. You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). +## /key/generate -- `metadata`: *dict or null (optional)* Pass metadata for the created token. If null defaults to {} +### Request +```shell +curl 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], + "duration": "20m", + "metadata": {"user": "ishaan@berri.ai"}, + "team_id": "core-infra", + "max_budget": 10, +}' +``` -Expected response: + +Request Params: + +- `duration`: *Optional[str]* - Specify the length of time the token is valid for. You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). +- `key_alias`: *Optional[str]* - User defined key alias +- `team_id`: *Optional[str]* - The team id of the user +- `models`: *Optional[list]* - Model_name's a user is allowed to call. (if empty, key is allowed to call all models) +- `aliases`: *Optional[dict]* - Any alias mappings, on top of anything in the config.yaml model list. - https://docs.litellm.ai/docs/proxy/virtual_keys#managing-auth---upgradedowngrade-models +- `config`: *Optional[dict]* - any key-specific configs, overrides config in config.yaml +- `spend`: *Optional[int]* - Amount spent by key. Default is 0. Will be updated by proxy whenever key is used. https://docs.litellm.ai/docs/proxy/virtual_keys#managing-auth---tracking-spend +- `max_budget`: *Optional[float]* - Specify max budget for a given key. +- `max_parallel_requests`: *Optional[int]* - Rate limit a user based on the number of parallel requests. Raises 429 error, if user's parallel requests > x. +- `metadata`: *Optional[dict]* - Metadata for key, store information for key. Example metadata = {"team": "core-infra", "app": "app2", "email": "ishaan@berri.ai" } + + +### Response ```python { "key": "sk-kdEXbIqZRwEeEiHwdg7sFA", # Bearer token "expires": "2023-11-19T01:38:25.838000+00:00" # datetime object + "key_name": "sk-...7sFA" # abbreviated key string, ONLY stored in db if `allow_user_auth: true` set - [see](./ui.md) + ... } ``` -## Keys that don't expire - -Just set duration to None. - -```bash -curl --location 'http://0.0.0.0:8000/key/generate' \ ---header 'Authorization: Bearer sk-1234' \ ---header 'Content-Type: application/json' \ ---data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' -``` - -## Upgrade/Downgrade Models +### Upgrade/Downgrade Models If a user is expected to use a given model (i.e. gpt3-5), and you want to: @@ -124,7 +141,7 @@ model_list: ```bash curl -X POST "https://0.0.0.0:8000/key/generate" \ --H "Authorization: Bearer sk-1234" \ +-H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "models": ["my-free-tier"], @@ -136,6 +153,291 @@ curl -X POST "https://0.0.0.0:8000/key/generate" \ - **How to upgrade / downgrade request?** Change the alias mapping - **How are routing between diff keys/api bases done?** litellm handles this by shuffling between different models in the model list with the same model_name. [**See Code**](https://github.com/BerriAI/litellm/blob/main/litellm/router.py) + +### Grant Access to new model + +Use model access groups to give users access to select models, and add new ones to it over time (e.g. mistral, llama-2, etc.) + +**Step 1. Assign model, access group in config.yaml** + +```yaml +model_list: + - model_name: text-embedding-ada-002 + litellm_params: + model: azure/azure-embedding-model + api_base: "os.environ/AZURE_API_BASE" + api_key: "os.environ/AZURE_API_KEY" + api_version: "2023-07-01-preview" + model_info: + access_groups: ["beta-models"] # 👈 Model Access Group +``` + +**Step 2. Create key with access group** + +```bash +curl --location 'http://localhost:8000/key/generate' \ +-H 'Authorization: Bearer ' \ +-H 'Content-Type: application/json' \ +-d '{"models": ["beta-models"], # 👈 Model Access Group + "max_budget": 0,}' +``` + + +## /key/info + +### Request +```shell +curl -X GET "http://0.0.0.0:8000/key/info?key=sk-02Wr4IAlN3NvPXvL5JVvDA" \ +-H "Authorization: Bearer sk-1234" +``` + +Request Params: +- key: str - The key you want the info for + +### Response + +`token` is the hashed key (The DB stores the hashed key for security) +```json +{ + "key": "sk-02Wr4IAlN3NvPXvL5JVvDA", + "info": { + "token": "80321a12d03412c527f2bd9db5fabd746abead2e1d50b435a534432fbaca9ef5", + "spend": 0.0, + "expires": "2024-01-18T23:52:09.125000+00:00", + "models": ["azure-gpt-3.5", "azure-embedding-model"], + "aliases": {}, + "config": {}, + "user_id": "ishaan2@berri.ai", + "team_id": "None", + "max_parallel_requests": null, + "metadata": {} + } +} + + +``` + +## /key/update + +### Request +```shell +curl 'http://0.0.0.0:8000/key/update' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "key": "sk-kdEXbIqZRwEeEiHwdg7sFA", + "models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], + "metadata": {"user": "ishaan@berri.ai"}, + "team_id": "core-infra" +}' +``` + +Request Params: +- key: str - The key that needs to be updated. + +- models: list or null (optional) - Specify the models a token has access to. If null, then the token has access to all models on the server. + +- metadata: dict or null (optional) - Pass metadata for the updated token. If null, defaults to an empty dictionary. + +- team_id: str or null (optional) - Specify the team_id for the associated key. + +### Response + +```json +{ + "key": "sk-kdEXbIqZRwEeEiHwdg7sFA", + "models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], + "metadata": { + "user": "ishaan@berri.ai" + } +} + +``` + + +## /key/delete + +### Request +```shell +curl 'http://0.0.0.0:8000/key/delete' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "keys": ["sk-kdEXbIqZRwEeEiHwdg7sFA"] +}' +``` + +Request Params: +- keys: List[str] - List of keys to delete + +### Response + +```json +{ + "deleted_keys": ["sk-kdEXbIqZRwEeEiHwdg7sFA"] +} +``` + +## /user/new + +### Request + +All [key/generate params supported](#keygenerate) for creating a user +```shell +curl 'http://0.0.0.0:4000/user/new' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "user_id": "ishaan1", + "user_email": "ishaan@litellm.ai", + "user_role": "admin", + "team_id": "cto-team", + "max_budget": 20, + "budget_duration": "1h" + +}' +``` + +Request Params: + +- user_id: str (optional - defaults to uuid) - The unique identifier for the user. +- user_email: str (optional - defaults to "") - The email address associated with the user. +- user_role: str (optional - defaults to "app_user") - The role assigned to the user. Can be "admin", "app_owner", "app_user" + +**Possible `user_role` values** +``` +"admin" - Maintaining the proxy and owning the overall budget +"app_owner" - employees maintaining the apps, each owner may own more than one app +"app_user" - users who know nothing about the proxy. These users get created when you pass `user` to /chat/completions +``` +- team_id: str (optional - defaults to "") - The identifier for the team to which the user belongs. +- max_budget: float (optional - defaults to `null`) - The maximum budget allocated for the user. No budget checks done if `max_budget==null` +- budget_duration: str (optional - defaults to `null`) - The duration for which the budget is valid, e.g., "1h", "1d" + +### Response +A key will be generated for the new user created + +```shell +{ + "models": [], + "spend": 0.0, + "max_budget": null, + "user_id": "ishaan1", + "team_id": null, + "max_parallel_requests": null, + "metadata": {}, + "tpm_limit": null, + "rpm_limit": null, + "budget_duration": null, + "allowed_cache_controls": [], + "key_alias": null, + "duration": null, + "aliases": {}, + "config": {}, + "key": "sk-JflB33ucTqc2NYvNAgiBCA", + "key_name": null, + "expires": null +} + +``` + +Request Params: +- keys: List[str] - List of keys to delete + +### Response + +```json +{ + "deleted_keys": ["sk-kdEXbIqZRwEeEiHwdg7sFA"] +} +``` + +## Default /key/generate params +Use this, if you need to control the default `max_budget` or any `key/generate` param per key. + +When a `/key/generate` request does not specify `max_budget`, it will use the `max_budget` specified in `default_key_generate_params` + +Set `litellm_settings:default_key_generate_params`: +```yaml +litellm_settings: + default_key_generate_params: + max_budget: 1.5000 + models: ["azure-gpt-3.5"] + duration: # blank means `null` + metadata: {"setting":"default"} + team_id: "core-infra" +``` +## Set Budgets - Per Key + +Set `max_budget` in (USD $) param in the `key/generate` request. By default the `max_budget` is set to `null` and is not checked for keys + +```shell +curl 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "metadata": {"user": "ishaan@berri.ai"}, + "team_id": "core-infra", + "max_budget": 10, +}' +``` + +#### Expected Behaviour +- Costs Per key get auto-populated in `LiteLLM_VerificationToken` Table +- After the key crosses it's `max_budget`, requests fail + +Example Request to `/chat/completions` when key has crossed budget + +```shell +curl --location 'http://0.0.0.0:8000/chat/completions' \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer sk-ULl_IKCVFy2EZRzQB16RUA' \ + --data ' { + "model": "azure-gpt-3.5", + "user": "e09b4da8-ed80-4b05-ac93-e16d9eb56fca", + "messages": [ + { + "role": "user", + "content": "respond in 50 lines" + } + ], +}' +``` + + +Expected Response from `/chat/completions` when key has crossed budget +```shell +{ + "detail":"Authentication Error, ExceededTokenBudget: Current spend for token: 7.2e-05; Max Budget for Token: 2e-07" +} +``` + + +## Set Budgets - Per User + +LiteLLM exposes a `/user/new` endpoint to create budgets for users, that persist across multiple keys. + +This is documented in the swagger (live on your server root endpoint - e.g. `http://0.0.0.0:8000/`). Here's an example request. + +```shell +curl --location 'http://localhost:8000/user/new' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data-raw '{"models": ["azure-models"], "max_budget": 0, "user_id": "krrish3@berri.ai"}' +``` +The request is a normal `/key/generate` request body + a `max_budget` field. + +**Sample Response** + +```shell +{ + "key": "sk-YF2OxDbrgd1y2KgwxmEA2w", + "expires": "2023-12-22T09:53:13.861000Z", + "user_id": "krrish3@berri.ai", + "max_budget": 0.0 +} +``` + ## Tracking Spend You can get spend for a key by using the `/key/info` endpoint. @@ -171,32 +473,6 @@ This is automatically updated (in USD) when calls are made to /completions, /cha ``` - -## Set Budgets - -LiteLLM exposes a `/user/new` endpoint to create budgets for users, that persist across multiple keys. - -This is documented in the swagger (live on your server root endpoint - e.g. `http://0.0.0.0:8000/`). Here's an example request. - -```curl -curl --location 'http://localhost:8000/user/new' \ ---header 'Authorization: Bearer ' \ ---header 'Content-Type: application/json' \ ---data-raw '{"models": ["azure-models"], "max_budget": 0, "user_id": "krrish3@berri.ai"}' -``` -The request is a normal `/key/generate` request body + a `max_budget` field. - -**Sample Response** - -```curl -{ - "key": "sk-YF2OxDbrgd1y2KgwxmEA2w", - "expires": "2023-12-22T09:53:13.861000Z", - "user_id": "krrish3@berri.ai", - "max_budget": 0.0 -} -``` - ## Custom Auth You can now override the default api key auth. @@ -242,7 +518,133 @@ general_settings: [**Implementation Code**](https://github.com/BerriAI/litellm/blob/caf2a6b279ddbe89ebd1d8f4499f65715d684851/litellm/proxy/utils.py#L122) ### 3. Start the proxy -```bash +```shell $ litellm --config /path/to/config.yaml ``` +## Custom /key/generate + +If you need to add custom logic before generating a Proxy API Key (Example Validating `team_id`) + +### 1. Write a custom `custom_generate_key_fn` + + +The input to the custom_generate_key_fn function is a single parameter: `data` [(Type: GenerateKeyRequest)](https://github.com/BerriAI/litellm/blob/main/litellm/proxy/_types.py#L125) + +The output of your `custom_generate_key_fn` should be a dictionary with the following structure +```python +{ + "decision": False, + "message": "This violates LiteLLM Proxy Rules. No team id provided.", +} + +``` + +- decision (Type: bool): A boolean value indicating whether the key generation is allowed (True) or not (False). + +- message (Type: str, Optional): An optional message providing additional information about the decision. This field is included when the decision is False. + + +```python +async def custom_generate_key_fn(data: GenerateKeyRequest)-> dict: + """ + Asynchronous function for generating a key based on the input data. + + Args: + data (GenerateKeyRequest): The input data for key generation. + + Returns: + dict: A dictionary containing the decision and an optional message. + { + "decision": False, + "message": "This violates LiteLLM Proxy Rules. No team id provided.", + } + """ + + # decide if a key should be generated or not + print("using custom auth function!") + data_json = data.json() # type: ignore + + # Unpacking variables + team_id = data_json.get("team_id") + duration = data_json.get("duration") + models = data_json.get("models") + aliases = data_json.get("aliases") + config = data_json.get("config") + spend = data_json.get("spend") + user_id = data_json.get("user_id") + max_parallel_requests = data_json.get("max_parallel_requests") + metadata = data_json.get("metadata") + tpm_limit = data_json.get("tpm_limit") + rpm_limit = data_json.get("rpm_limit") + + if team_id is not None and team_id == "litellm-core-infra@gmail.com": + # only team_id="litellm-core-infra@gmail.com" can make keys + return { + "decision": True, + } + else: + print("Failed custom auth") + return { + "decision": False, + "message": "This violates LiteLLM Proxy Rules. No team id provided.", + } +``` + + +### 2. Pass the filepath (relative to the config.yaml) + +Pass the filepath to the config.yaml + +e.g. if they're both in the same dir - `./config.yaml` and `./custom_auth.py`, this is what it looks like: +```yaml +model_list: + - model_name: "openai-model" + litellm_params: + model: "gpt-3.5-turbo" + +litellm_settings: + drop_params: True + set_verbose: True + +general_settings: + custom_key_generate: custom_auth.custom_generate_key_fn +``` + + + + +## [BETA] Dynamo DB + +Only live in `v1.16.21.dev1`. + +### Step 1. Save keys to env + +```shell +AWS_ACCESS_KEY_ID = "your-aws-access-key-id" +AWS_SECRET_ACCESS_KEY = "your-aws-secret-access-key" +``` + +### Step 2. Add details to config + +```yaml +general_settings: + master_key: sk-1234 + database_type: "dynamo_db" + database_args: { # 👈 all args - https://github.com/BerriAI/litellm/blob/befbcbb7ac8f59835ce47415c128decf37aac328/litellm/proxy/_types.py#L190 + "billing_mode": "PAY_PER_REQUEST", + "region_name": "us-west-2" + "user_table_name": "your-user-table", + "key_table_name": "your-token-table", + "config_table_name": "your-config-table" + } +``` + +### Step 3. Generate Key + +```bash +curl --location 'http://0.0.0.0:8000/key/generate' \ +--header 'Authorization: Bearer sk-1234' \ +--header 'Content-Type: application/json' \ +--data '{"models": ["azure-models"], "aliases": {"mistral-7b": "gpt-3.5-turbo"}, "duration": null}' +``` \ No newline at end of file diff --git a/docs/my-website/docs/routing.md b/docs/my-website/docs/routing.md index 2115e2802..151065d76 100644 --- a/docs/my-website/docs/routing.md +++ b/docs/my-website/docs/routing.md @@ -302,6 +302,7 @@ asyncio.run(router_acompletion()) The timeout set in router is for the entire length of the call, and is passed down to the completion() call level as well. +**Global Timeouts** ```python from litellm import Router @@ -313,6 +314,36 @@ router = Router(model_list=model_list, print(response) ``` +**Timeouts per model** + +```python +from litellm import Router +import asyncio + +model_list = [{ + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + "timeout": 300 # sets a 5 minute timeout + "stream_timeout": 30 # sets a 30s timeout for streaming calls + } +}] + +# init router +router = Router(model_list=model_list, routing_strategy="least-busy") +async def router_acompletion(): + response = await router.acompletion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "Hey, how's it going?"}] + ) + print(response) + return response + +asyncio.run(router_acompletion()) +``` ### Cooldowns Set the limit for how many calls a model is allowed to fail in a minute, before being cooled down for a minute. @@ -574,6 +605,49 @@ response = router.completion(model="gpt-3.5-turbo", messages=messages) print(f"response: {response}") ``` +## Custom Callbacks - Track API Key, API Endpoint, Model Used + +If you need to track the api_key, api endpoint, model, custom_llm_provider used for each completion call, you can setup a [custom callback](https://docs.litellm.ai/docs/observability/custom_callback) + +### Usage + +```python +import litellm +from litellm.integrations.custom_logger import CustomLogger + +class MyCustomHandler(CustomLogger): + def log_success_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Success") + print("kwargs=", kwargs) + litellm_params= kwargs.get("litellm_params") + api_key = litellm_params.get("api_key") + api_base = litellm_params.get("api_base") + custom_llm_provider= litellm_params.get("custom_llm_provider") + response_cost = kwargs.get("response_cost") + + # print the values + print("api_key=", api_key) + print("api_base=", api_base) + print("custom_llm_provider=", custom_llm_provider) + print("response_cost=", response_cost) + + def log_failure_event(self, kwargs, response_obj, start_time, end_time): + print(f"On Failure") + print("kwargs=") + +customHandler = MyCustomHandler() + +litellm.callbacks = [customHandler] + +# Init Router +router = Router(model_list=model_list, routing_strategy="simple-shuffle") + +# router completion call +response = router.completion( + model="gpt-3.5-turbo", + messages=[{ "role": "user", "content": "Hi who are you"}] +) +``` ## Deploy Router @@ -602,17 +676,63 @@ def __init__( num_retries: int = 0, timeout: Optional[float] = None, default_litellm_params={}, # default params for Router.chat.completion.create - set_verbose: bool = False, fallbacks: List = [], - allowed_fails: Optional[int] = None, + allowed_fails: Optional[int] = None, # Number of times a deployment can failbefore being added to cooldown + cooldown_time: float = 1, # (seconds) time to cooldown a deployment after failure context_window_fallbacks: List = [], model_group_alias: Optional[dict] = {}, - retry_after: int = 0, # min time to wait before retrying a failed request + retry_after: int = 0, # (min) time to wait before retrying a failed request routing_strategy: Literal[ "simple-shuffle", "least-busy", "usage-based-routing", "latency-based-routing", ] = "simple-shuffle", + + ## DEBUGGING ## + set_verbose: bool = False, # set this to True for seeing logs + debug_level: Literal["DEBUG", "INFO"] = "INFO", # set this to "DEBUG" for detailed debugging ): -``` \ No newline at end of file +``` + +## Debugging Router +### Basic Debugging +Set `Router(set_verbose=True)` + +```python +from litellm import Router + +router = Router( + model_list=model_list, + set_verbose=True +) +``` + +### Detailed Debugging +Set `Router(set_verbose=True,debug_level="DEBUG")` + +```python +from litellm import Router + +router = Router( + model_list=model_list, + set_verbose=True, + debug_level="DEBUG" # defaults to INFO +) +``` + +### Very Detailed Debugging +Set `litellm.set_verbose=True` and `Router(set_verbose=True,debug_level="DEBUG")` + +```python +from litellm import Router +import litellm + +litellm.set_verbose = True + +router = Router( + model_list=model_list, + set_verbose=True, + debug_level="DEBUG" # defaults to INFO +) +``` diff --git a/docs/my-website/img/admin_ui_2.png b/docs/my-website/img/admin_ui_2.png new file mode 100644 index 000000000..7108d1f09 Binary files /dev/null and b/docs/my-website/img/admin_ui_2.png differ diff --git a/docs/my-website/img/google_oauth2.png b/docs/my-website/img/google_oauth2.png new file mode 100644 index 000000000..d5cf951e4 Binary files /dev/null and b/docs/my-website/img/google_oauth2.png differ diff --git a/docs/my-website/img/google_redirect.png b/docs/my-website/img/google_redirect.png new file mode 100644 index 000000000..4e25a075e Binary files /dev/null and b/docs/my-website/img/google_redirect.png differ diff --git a/docs/my-website/img/spend_logs_table.png b/docs/my-website/img/spend_logs_table.png new file mode 100644 index 000000000..a0f259244 Binary files /dev/null and b/docs/my-website/img/spend_logs_table.png differ diff --git a/docs/my-website/img/spend_per_api_key.png b/docs/my-website/img/spend_per_api_key.png new file mode 100644 index 000000000..2c46b3ba6 Binary files /dev/null and b/docs/my-website/img/spend_per_api_key.png differ diff --git a/docs/my-website/img/spend_per_user.png b/docs/my-website/img/spend_per_user.png new file mode 100644 index 000000000..066c4baaf Binary files /dev/null and b/docs/my-website/img/spend_per_user.png differ diff --git a/docs/my-website/img/ui_link.png b/docs/my-website/img/ui_link.png new file mode 100644 index 000000000..648020e3a Binary files /dev/null and b/docs/my-website/img/ui_link.png differ diff --git a/docs/my-website/sidebars.js b/docs/my-website/sidebars.js index facda0e98..023367172 100644 --- a/docs/my-website/sidebars.js +++ b/docs/my-website/sidebars.js @@ -104,24 +104,49 @@ const sidebars = { items: [ "proxy/quick_start", "proxy/configs", + { + type: 'link', + label: '📖 All Endpoints', + href: 'https://litellm-api.up.railway.app/', + }, "proxy/user_keys", - "proxy/load_balancing", "proxy/virtual_keys", - "proxy/ui", "proxy/users", + "proxy/ui", "proxy/model_management", - "proxy/reliability", - "proxy/caching", - "proxy/logging", "proxy/health", - "proxy/call_hooks", - "proxy/rules", - "proxy/alerting", - "proxy/streaming_logging", + "proxy/debugging", + { + "type": "category", + "label": "🔥 Load Balancing", + "items": [ + "proxy/load_balancing", + "proxy/reliability", + ] + }, + { + "type": "category", + "label": "Logging, Alerting, Caching", + "items": [ + "proxy/logging", + "proxy/alerting", + "proxy/streaming_logging", + "proxy/caching", + ] + }, + { + "type": "category", + "label": "Admin Controls", + "items": [ + "proxy/call_hooks", + "proxy/rules", + ] + }, "proxy/deploy", "proxy/cli", ] }, + "proxy/custom_pricing", "routing", "rules", "set_keys", diff --git a/litellm/__init__.py b/litellm/__init__.py index 837e54434..6bdfe5e10 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -1,11 +1,17 @@ ### INIT VARIABLES ### -import threading, requests +import threading, requests, os from typing import Callable, List, Optional, Dict, Union, Any from litellm.caching import Cache -from litellm._logging import set_verbose +from litellm._logging import set_verbose, _turn_on_debug, verbose_logger from litellm.proxy._types import KeyManagementSystem import httpx +import dotenv +dotenv.load_dotenv() +############################################# +if set_verbose == True: + _turn_on_debug() +############################################# input_callback: List[Union[str, Callable]] = [] success_callback: List[Union[str, Callable]] = [] failure_callback: List[Union[str, Callable]] = [] @@ -58,6 +64,9 @@ cache: Optional[ model_alias_map: Dict[str, str] = {} model_group_alias_map: Dict[str, str] = {} max_budget: float = 0.0 # set the max budget across all providers +budget_duration: Optional[ + str +] = None # proxy only - resets budget after fixed duration. You can set duration as seconds ("30s"), minutes ("30m"), hours ("30h"), days ("30d"). _openai_completion_params = [ "functions", "function_call", @@ -136,6 +145,8 @@ model_cost_map_url: str = "https://raw.githubusercontent.com/BerriAI/litellm/mai suppress_debug_info = False dynamodb_table_name: Optional[str] = None s3_callback_params: Optional[Dict] = None +default_key_generate_params: Optional[Dict] = None +default_team_settings: Optional[List] = None #### RELIABILITY #### request_timeout: Optional[float] = 6000 num_retries: Optional[int] = None # per model endpoint @@ -155,6 +166,19 @@ _key_management_system: Optional[KeyManagementSystem] = None def get_model_cost_map(url: str): + if ( + os.getenv("LITELLM_LOCAL_MODEL_COST_MAP", False) == True + or os.getenv("LITELLM_LOCAL_MODEL_COST_MAP", False) == "True" + ): + import importlib.resources + import json + + with importlib.resources.open_text( + "litellm", "model_prices_and_context_window_backup.json" + ) as f: + content = json.load(f) + return content + try: with requests.get( url, timeout=5 @@ -210,6 +234,7 @@ vertex_chat_models: List = [] vertex_code_chat_models: List = [] vertex_text_models: List = [] vertex_code_text_models: List = [] +vertex_embedding_models: List = [] ai21_models: List = [] nlp_cloud_models: List = [] aleph_alpha_models: List = [] @@ -239,6 +264,8 @@ for key, value in model_cost.items(): vertex_chat_models.append(key) elif value.get("litellm_provider") == "vertex_ai-code-chat-models": vertex_code_chat_models.append(key) + elif value.get("litellm_provider") == "vertex_ai-embedding-models": + vertex_embedding_models.append(key) elif value.get("litellm_provider") == "ai21": ai21_models.append(key) elif value.get("litellm_provider") == "nlp_cloud": @@ -475,7 +502,10 @@ bedrock_embedding_models: List = [ ] all_embedding_models = ( - open_ai_embedding_models + cohere_embedding_models + bedrock_embedding_models + open_ai_embedding_models + + cohere_embedding_models + + bedrock_embedding_models + + vertex_embedding_models ) ####### IMAGE GENERATION MODELS ################### @@ -530,6 +560,7 @@ from .llms.bedrock import ( AmazonAnthropicConfig, AmazonCohereConfig, AmazonLlamaConfig, + AmazonStabilityConfig, ) from .llms.openai import OpenAIConfig, OpenAITextCompletionConfig from .llms.azure import AzureOpenAIConfig, AzureOpenAIError diff --git a/litellm/_logging.py b/litellm/_logging.py index e3b54a012..438fa9743 100644 --- a/litellm/_logging.py +++ b/litellm/_logging.py @@ -7,20 +7,14 @@ handler = logging.StreamHandler() handler.setLevel(logging.DEBUG) # Create a formatter and set it for the handler +formatter = logging.Formatter( + "\033[92m%(asctime)s - %(name)s:%(levelname)s\033[0m: %(message)s", + datefmt="%H:%M:%S", +) -formatter = logging.Formatter("\033[92m%(name)s - %(levelname)s\033[0m: %(message)s") handler.setFormatter(formatter) - -def print_verbose(print_statement): - try: - if set_verbose: - print(print_statement) # noqa - except: - pass - - verbose_proxy_logger = logging.getLogger("LiteLLM Proxy") verbose_router_logger = logging.getLogger("LiteLLM Router") verbose_logger = logging.getLogger("LiteLLM") @@ -28,3 +22,18 @@ verbose_logger = logging.getLogger("LiteLLM") # Add the handler to the logger verbose_router_logger.addHandler(handler) verbose_proxy_logger.addHandler(handler) +verbose_logger.addHandler(handler) + + +def _turn_on_debug(): + verbose_logger.setLevel(level=logging.DEBUG) # set package log to debug + verbose_router_logger.setLevel(level=logging.DEBUG) # set router logs to debug + verbose_proxy_logger.setLevel(level=logging.DEBUG) # set proxy logs to debug + + +def print_verbose(print_statement): + try: + if set_verbose: + print(print_statement) # noqa + except: + pass diff --git a/litellm/budget_manager.py b/litellm/budget_manager.py index 4a3bb2cae..841015753 100644 --- a/litellm/budget_manager.py +++ b/litellm/budget_manager.py @@ -1,3 +1,12 @@ +# +-----------------------------------------------+ +# | | +# | NOT PROXY BUDGET MANAGER | +# | proxy budget manager is in proxy_server.py | +# | | +# +-----------------------------------------------+ +# +# Thank you users! We ❤️ you! - Krrish & Ishaan + import os, json, time import litellm from litellm.utils import ModelResponse @@ -11,10 +20,12 @@ class BudgetManager: project_name: str, client_type: str = "local", api_base: Optional[str] = None, + headers: Optional[dict] = None, ): self.client_type = client_type self.project_name = project_name self.api_base = api_base or "https://api.litellm.ai" + self.headers = headers or {"Content-Type": "application/json"} ## load the data or init the initial dictionaries self.load_data() @@ -43,7 +54,7 @@ class BudgetManager: url = self.api_base + "/get_budget" headers = {"Content-Type": "application/json"} data = {"project_name": self.project_name} - response = requests.post(url, headers=headers, json=data) + response = requests.post(url, headers=self.headers, json=data) response = response.json() if response["status"] == "error": self.user_dict = ( @@ -201,6 +212,6 @@ class BudgetManager: url = self.api_base + "/set_budget" headers = {"Content-Type": "application/json"} data = {"project_name": self.project_name, "user_dict": self.user_dict} - response = requests.post(url, headers=headers, json=data) + response = requests.post(url, headers=self.headers, json=data) response = response.json() return response diff --git a/litellm/caching.py b/litellm/caching.py index c3fbaad6d..d0721fe9a 100644 --- a/litellm/caching.py +++ b/litellm/caching.py @@ -12,10 +12,12 @@ import time, logging, asyncio import json, traceback, ast, hashlib from typing import Optional, Literal, List, Union, Any from openai._models import BaseModel as OpenAIObject +from litellm._logging import verbose_logger def print_verbose(print_statement): try: + verbose_logger.debug(print_statement) if litellm.set_verbose: print(print_statement) # noqa except: @@ -81,9 +83,14 @@ class InMemoryCache(BaseCache): self.cache_dict.clear() self.ttl_dict.clear() + async def disconnect(self): pass + def delete_cache(self, key): + self.cache_dict.pop(key, None) + self.ttl_dict.pop(key, None) + class RedisCache(BaseCache): # if users don't provider one, use the default litellm cache @@ -210,9 +217,14 @@ class RedisCache(BaseCache): def flush_cache(self): self.redis_client.flushall() + async def disconnect(self): pass + def delete_cache(self, key): + self.redis_client.delete(key) + + class S3Cache(BaseCache): def __init__( @@ -227,11 +239,13 @@ class S3Cache(BaseCache): s3_aws_secret_access_key=None, s3_aws_session_token=None, s3_config=None, + s3_path=None, **kwargs, ): import boto3 self.bucket_name = s3_bucket_name + self.key_prefix = s3_path.rstrip("/") + "/" if s3_path else "" # Create an S3 client with custom endpoint URL self.s3_client = boto3.client( "s3", @@ -253,6 +267,8 @@ class S3Cache(BaseCache): ttl = kwargs.get("ttl", None) # Convert value to JSON before storing in S3 serialized_value = json.dumps(value) + key = self.key_prefix + key + if ttl is not None: cache_control = f"immutable, max-age={ttl}, s-maxage={ttl}" import datetime @@ -294,6 +310,8 @@ class S3Cache(BaseCache): import boto3, botocore try: + key = self.key_prefix + key + print_verbose(f"Get S3 Cache: key: {key}") # Download the data from S3 cached_response = self.s3_client.get_object( @@ -400,6 +418,12 @@ class DualCache(BaseCache): if self.redis_cache is not None: self.redis_cache.flush_cache() + def delete_cache(self, key): + if self.in_memory_cache is not None: + self.in_memory_cache.delete_cache(key) + if self.redis_cache is not None: + self.redis_cache.delete_cache(key) + #### LiteLLM.Completion / Embedding Cache #### class Cache: diff --git a/litellm/exceptions.py b/litellm/exceptions.py index 4f9629e71..09b375811 100644 --- a/litellm/exceptions.py +++ b/litellm/exceptions.py @@ -21,6 +21,7 @@ from openai import ( APIConnectionError, APIResponseValidationError, UnprocessableEntityError, + PermissionDeniedError, ) import httpx @@ -82,6 +83,17 @@ class Timeout(APITimeoutError): # type: ignore ) # Call the base class constructor with the parameters it needs +class PermissionDeniedError(PermissionDeniedError): # type:ignore + def __init__(self, message, llm_provider, model, response: httpx.Response): + self.status_code = 403 + self.message = message + self.llm_provider = llm_provider + self.model = model + super().__init__( + self.message, response=response, body=None + ) # Call the base class constructor with the parameters it needs + + class RateLimitError(RateLimitError): # type: ignore def __init__(self, message, llm_provider, model, response: httpx.Response): self.status_code = 429 diff --git a/litellm/integrations/helicone.py b/litellm/integrations/helicone.py index f9dff85db..cb8663773 100644 --- a/litellm/integrations/helicone.py +++ b/litellm/integrations/helicone.py @@ -2,6 +2,7 @@ # On success, logs events to Helicone import dotenv, os import requests +import litellm dotenv.load_dotenv() # Loading env variables using dotenv import traceback @@ -56,6 +57,10 @@ class HeliconeLogger: else "gpt-3.5-turbo" ) provider_request = {"model": model, "messages": messages} + if isinstance(response_obj, litellm.EmbeddingResponse) or isinstance( + response_obj, litellm.ModelResponse + ): + response_obj = response_obj.json() if "claude" in model: provider_request, response_obj = self.claude_mapping( diff --git a/litellm/integrations/langfuse.py b/litellm/integrations/langfuse.py index db410d986..cd37a93a3 100644 --- a/litellm/integrations/langfuse.py +++ b/litellm/integrations/langfuse.py @@ -8,11 +8,13 @@ from datetime import datetime dotenv.load_dotenv() # Loading env variables using dotenv import traceback from packaging.version import Version +from litellm._logging import verbose_logger +import litellm class LangFuseLogger: # Class variables or attributes - def __init__(self): + def __init__(self, langfuse_public_key=None, langfuse_secret=None): try: from langfuse import Langfuse except Exception as e: @@ -20,8 +22,8 @@ class LangFuseLogger: f"\033[91mLangfuse not installed, try running 'pip install langfuse' to fix this error: {e}\033[0m" ) # Instance variables - self.secret_key = os.getenv("LANGFUSE_SECRET_KEY") - self.public_key = os.getenv("LANGFUSE_PUBLIC_KEY") + self.secret_key = langfuse_secret or os.getenv("LANGFUSE_SECRET_KEY") + self.public_key = langfuse_public_key or os.getenv("LANGFUSE_PUBLIC_KEY") self.langfuse_host = os.getenv("LANGFUSE_HOST", "https://cloud.langfuse.com") self.langfuse_release = os.getenv("LANGFUSE_RELEASE") self.langfuse_debug = os.getenv("LANGFUSE_DEBUG") @@ -33,6 +35,26 @@ class LangFuseLogger: debug=self.langfuse_debug, ) + if os.getenv("UPSTREAM_LANGFUSE_SECRET_KEY") is not None: + self.upstream_langfuse_secret_key = os.getenv( + "UPSTREAM_LANGFUSE_SECRET_KEY" + ) + self.upstream_langfuse_public_key = os.getenv( + "UPSTREAM_LANGFUSE_PUBLIC_KEY" + ) + self.upstream_langfuse_host = os.getenv("UPSTREAM_LANGFUSE_HOST") + self.upstream_langfuse_release = os.getenv("UPSTREAM_LANGFUSE_RELEASE") + self.upstream_langfuse_debug = os.getenv("UPSTREAM_LANGFUSE_DEBUG") + self.upstream_langfuse = Langfuse( + public_key=self.upstream_langfuse_public_key, + secret_key=self.upstream_langfuse_secret_key, + host=self.upstream_langfuse_host, + release=self.upstream_langfuse_release, + debug=self.upstream_langfuse_debug, + ) + else: + self.upstream_langfuse = None + def log_event( self, kwargs, response_obj, start_time, end_time, user_id, print_verbose ): @@ -62,11 +84,15 @@ class LangFuseLogger: pass # end of processing langfuse ######################## - input = prompt - output = response_obj["choices"][0]["message"].json() - print_verbose( - f"OUTPUT IN LANGFUSE: {output}; original: {response_obj['choices'][0]['message']}" - ) + if kwargs.get("call_type", None) == "embedding" or isinstance( + response_obj, litellm.EmbeddingResponse + ): + input = prompt + output = response_obj["data"] + else: + input = prompt + output = response_obj["choices"][0]["message"].json() + print_verbose(f"OUTPUT IN LANGFUSE: {output}; original: {response_obj}") self._log_langfuse_v2( user_id, metadata, @@ -77,6 +103,7 @@ class LangFuseLogger: optional_params, input, response_obj, + print_verbose, ) if self._is_langfuse_v2() else self._log_langfuse_v1( user_id, metadata, @@ -93,6 +120,7 @@ class LangFuseLogger: print_verbose( f"Langfuse Layer Logging - final response object: {response_obj}" ) + verbose_logger.info(f"Langfuse Layer Logging - logging success") except: traceback.print_exc() print_verbose(f"Langfuse Layer Error - {traceback.format_exc()}") @@ -165,18 +193,46 @@ class LangFuseLogger: optional_params, input, response_obj, + print_verbose, ): - trace = self.Langfuse.trace( - name=metadata.get("generation_name", "litellm-completion"), - input=input, - output=output, - user_id=metadata.get("trace_user_id", user_id), - id=metadata.get("trace_id", None), - ) + import langfuse + tags = [] + supports_tags = Version(langfuse.version.__version__) >= Version("2.6.3") + supports_costs = Version(langfuse.version.__version__) >= Version("2.7.3") + + print_verbose(f"Langfuse Layer Logging - logging to langfuse v2 ") + + generation_name = metadata.get("generation_name", None) + if generation_name is None: + # just log `litellm-{call_type}` as the generation name + generation_name = f"litellm-{kwargs.get('call_type', 'completion')}" + + trace_params = { + "name": generation_name, + "input": input, + "output": output, + "user_id": metadata.get("trace_user_id", user_id), + "id": metadata.get("trace_id", None), + } + cost = kwargs["response_cost"] + print_verbose(f"trace: {cost}") + if supports_tags: + for key, value in metadata.items(): + tags.append(f"{key}:{value}") + if "cache_hit" in kwargs: + tags.append(f"cache_hit:{kwargs['cache_hit']}") + trace_params.update({"tags": tags}) + + trace = self.Langfuse.trace(**trace_params) + + # get generation_id + generation_id = None + if response_obj.get("id", None) is not None: + generation_id = litellm.utils.get_logging_id(start_time, response_obj) trace.generation( - name=metadata.get("generation_name", "litellm-completion"), - id=metadata.get("generation_id", None), + name=generation_name, + id=metadata.get("generation_id", generation_id), startTime=start_time, endTime=end_time, model=kwargs["model"], @@ -186,6 +242,7 @@ class LangFuseLogger: usage={ "prompt_tokens": response_obj["usage"]["prompt_tokens"], "completion_tokens": response_obj["usage"]["completion_tokens"], + "total_cost": cost if supports_costs else None, }, metadata=metadata, ) diff --git a/litellm/integrations/langsmith.py b/litellm/integrations/langsmith.py index d951d6924..4c76ba80b 100644 --- a/litellm/integrations/langsmith.py +++ b/litellm/integrations/langsmith.py @@ -13,19 +13,22 @@ class LangsmithLogger: # Class variables or attributes def __init__(self): self.langsmith_api_key = os.getenv("LANGSMITH_API_KEY") + self.langsmith_project = os.getenv("LANGSMITH_PROJECT", "litellm-completion") + self.langsmith_default_run_name = os.getenv( + "LANGSMITH_DEFAULT_RUN_NAME", "LLMRun" + ) def log_event(self, kwargs, response_obj, start_time, end_time, print_verbose): # Method definition # inspired by Langsmith http api here: https://github.com/langchain-ai/langsmith-cookbook/blob/main/tracing-examples/rest/rest.ipynb - metadata = {} - if "litellm_params" in kwargs: - metadata = kwargs["litellm_params"].get("metadata", {}) + metadata = kwargs.get('litellm_params', {}).get("metadata", {}) or {} # if metadata is None + # set project name and run_name for langsmith logging # users can pass project_name and run name to litellm.completion() # Example: litellm.completion(model, messages, metadata={"project_name": "my-litellm-project", "run_name": "my-langsmith-run"}) - # if not set litellm will use default project_name = litellm-completion, run_name = LLMRun - project_name = metadata.get("project_name", "litellm-completion") - run_name = metadata.get("run_name", "LLMRun") + # if not set litellm will fallback to the environment variable LANGSMITH_PROJECT, then to the default project_name = litellm-completion, run_name = LLMRun + project_name = metadata.get("project_name", self.langsmith_project) + run_name = metadata.get("run_name", self.langsmith_default_run_name) print_verbose( f"Langsmith Logging - project_name: {project_name}, run_name {run_name}" ) diff --git a/litellm/integrations/s3.py b/litellm/integrations/s3.py index 0187d13d6..e25b39777 100644 --- a/litellm/integrations/s3.py +++ b/litellm/integrations/s3.py @@ -8,7 +8,7 @@ dotenv.load_dotenv() # Loading env variables using dotenv import traceback import datetime, subprocess, sys import litellm, uuid -from litellm._logging import print_verbose +from litellm._logging import print_verbose, verbose_logger class S3Logger: @@ -16,6 +16,7 @@ class S3Logger: def __init__( self, s3_bucket_name=None, + s3_path=None, s3_region_name=None, s3_api_version=None, s3_use_ssl=True, @@ -30,7 +31,9 @@ class S3Logger: import boto3 try: - print_verbose("in init s3 logger") + verbose_logger.debug( + f"in init s3 logger - s3_callback_params {litellm.s3_callback_params}" + ) if litellm.s3_callback_params is not None: # read in .env variables - example os.environ/AWS_BUCKET_NAME @@ -41,7 +44,7 @@ class S3Logger: s3_bucket_name = litellm.s3_callback_params.get("s3_bucket_name") s3_region_name = litellm.s3_callback_params.get("s3_region_name") s3_api_version = litellm.s3_callback_params.get("s3_api_version") - s3_use_ssl = litellm.s3_callback_params.get("s3_use_ssl") + s3_use_ssl = litellm.s3_callback_params.get("s3_use_ssl", True) s3_verify = litellm.s3_callback_params.get("s3_verify") s3_endpoint_url = litellm.s3_callback_params.get("s3_endpoint_url") s3_aws_access_key_id = litellm.s3_callback_params.get( @@ -57,6 +60,8 @@ class S3Logger: # done reading litellm.s3_callback_params self.bucket_name = s3_bucket_name + self.s3_path = s3_path + verbose_logger.debug(f"s3 logger using endpoint url {s3_endpoint_url}") # Create an S3 client with custom endpoint URL self.s3_client = boto3.client( "s3", @@ -82,7 +87,9 @@ class S3Logger: def log_event(self, kwargs, response_obj, start_time, end_time, print_verbose): try: - print_verbose(f"s3 Logging - Enters logging function for model {kwargs}") + verbose_logger.debug( + f"s3 Logging - Enters logging function for model {kwargs}" + ) # construct payload to send to s3 # follows the same params as langfuse.py @@ -121,9 +128,22 @@ class S3Logger: # non blocking if it can't cast to a str pass + s3_file_name = litellm.utils.get_logging_id(start_time, payload) or "" s3_object_key = ( - payload["id"] + "-time=" + str(start_time) + (self.s3_path.rstrip("/") + "/" if self.s3_path else "") + + start_time.strftime("%Y-%m-%d") + + "/" + + s3_file_name ) # we need the s3 key to include the time, so we log cache hits too + s3_object_key += ".json" + + s3_object_download_filename = ( + "time-" + + start_time.strftime("%Y-%m-%dT%H-%M-%S-%f") + + "_" + + payload["id"] + + ".json" + ) import json @@ -137,7 +157,8 @@ class S3Logger: Body=payload, ContentType="application/json", ContentLanguage="en", - ContentDisposition=f'inline; filename="{key}.json"', + ContentDisposition=f'inline; filename="{s3_object_download_filename}"', + CacheControl="private, immutable, max-age=31536000, s-maxage=0", ) print_verbose(f"Response from s3:{str(response)}") @@ -146,5 +167,5 @@ class S3Logger: return response except Exception as e: traceback.print_exc() - print_verbose(f"s3 Layer Error - {str(e)}\n{traceback.format_exc()}") + verbose_logger.debug(f"s3 Layer Error - {str(e)}\n{traceback.format_exc()}") pass diff --git a/litellm/llms/anthropic.py b/litellm/llms/anthropic.py index 4df032ba0..150ae0e07 100644 --- a/litellm/llms/anthropic.py +++ b/litellm/llms/anthropic.py @@ -78,7 +78,7 @@ class AnthropicConfig: # makes headers for API call -def validate_environment(api_key): +def validate_environment(api_key, user_headers): if api_key is None: raise ValueError( "Missing Anthropic API Key - A call is being made to anthropic but no key is set either in the environment variables or via params" @@ -89,6 +89,8 @@ def validate_environment(api_key): "content-type": "application/json", "x-api-key": api_key, } + if user_headers is not None and isinstance(user_headers, dict): + headers = {**headers, **user_headers} return headers @@ -105,8 +107,9 @@ def completion( optional_params=None, litellm_params=None, logger_fn=None, + headers={}, ): - headers = validate_environment(api_key) + headers = validate_environment(api_key, headers) if model in custom_prompt_dict: # check if the model has a registered custom prompt model_prompt_details = custom_prompt_dict[model] @@ -139,7 +142,11 @@ def completion( logging_obj.pre_call( input=prompt, api_key=api_key, - additional_args={"complete_input_dict": data, "api_base": api_base}, + additional_args={ + "complete_input_dict": data, + "api_base": api_base, + "headers": headers, + }, ) ## COMPLETION CALL diff --git a/litellm/llms/azure.py b/litellm/llms/azure.py index 716b65dbb..f20a2e939 100644 --- a/litellm/llms/azure.py +++ b/litellm/llms/azure.py @@ -95,6 +95,26 @@ class AzureOpenAIConfig(OpenAIConfig): ) +def select_azure_base_url_or_endpoint(azure_client_params: dict): + # azure_client_params = { + # "api_version": api_version, + # "azure_endpoint": api_base, + # "azure_deployment": model, + # "http_client": litellm.client_session, + # "max_retries": max_retries, + # "timeout": timeout, + # } + azure_endpoint = azure_client_params.get("azure_endpoint", None) + if azure_endpoint is not None: + # see : https://github.com/openai/openai-python/blob/3d61ed42aba652b547029095a7eb269ad4e1e957/src/openai/lib/azure.py#L192 + if "/openai/deployments" in azure_endpoint: + # this is base_url, not an azure_endpoint + azure_client_params["base_url"] = azure_endpoint + azure_client_params.pop("azure_endpoint") + + return azure_client_params + + class AzureChatCompletion(BaseLLM): def __init__(self) -> None: super().__init__() @@ -239,6 +259,9 @@ class AzureChatCompletion(BaseLLM): "max_retries": max_retries, "timeout": timeout, } + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params=azure_client_params + ) if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: @@ -303,6 +326,9 @@ class AzureChatCompletion(BaseLLM): "max_retries": max_retries, "timeout": timeout, } + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params=azure_client_params + ) if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: @@ -364,6 +390,9 @@ class AzureChatCompletion(BaseLLM): "max_retries": max_retries, "timeout": timeout, } + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params=azure_client_params + ) if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: @@ -414,6 +443,9 @@ class AzureChatCompletion(BaseLLM): "max_retries": data.pop("max_retries", 2), "timeout": timeout, } + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params=azure_client_params + ) if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: @@ -527,6 +559,9 @@ class AzureChatCompletion(BaseLLM): "max_retries": max_retries, "timeout": timeout, } + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params=azure_client_params + ) if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: @@ -594,12 +629,23 @@ class AzureChatCompletion(BaseLLM): client_session = litellm.aclient_session or httpx.AsyncClient( transport=AsyncCustomHTTPTransport(), ) - openai_aclient = AsyncAzureOpenAI( + azure_client = AsyncAzureOpenAI( http_client=client_session, **azure_client_params ) else: - openai_aclient = client - response = await openai_aclient.images.generate(**data, timeout=timeout) + azure_client = client + ## LOGGING + logging_obj.pre_call( + input=data["prompt"], + api_key=azure_client.api_key, + additional_args={ + "headers": {"api_key": azure_client.api_key}, + "api_base": azure_client._base_url._uri_reference, + "acompletion": True, + "complete_input_dict": data, + }, + ) + response = await azure_client.images.generate(**data, timeout=timeout) stringified_response = response.model_dump() ## LOGGING logging_obj.post_call( @@ -659,6 +705,9 @@ class AzureChatCompletion(BaseLLM): "max_retries": max_retries, "timeout": timeout, } + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params=azure_client_params + ) if api_key is not None: azure_client_params["api_key"] = api_key elif azure_ad_token is not None: @@ -681,7 +730,7 @@ class AzureChatCompletion(BaseLLM): input=prompt, api_key=azure_client.api_key, additional_args={ - "headers": {"Authorization": f"Bearer {azure_client.api_key}"}, + "headers": {"api_key": azure_client.api_key}, "api_base": azure_client._base_url._uri_reference, "acompletion": False, "complete_input_dict": data, @@ -753,6 +802,11 @@ class AzureChatCompletion(BaseLLM): completion = None if mode == "completion": + completion = await client.completions.with_raw_response.create( + model=model, # type: ignore + prompt=prompt, # type: ignore + ) + elif mode == "chat": if messages is None: raise Exception("messages is not set") completion = await client.chat.completions.with_raw_response.create( diff --git a/litellm/llms/bedrock.py b/litellm/llms/bedrock.py index 617964a74..0fe9b72e3 100644 --- a/litellm/llms/bedrock.py +++ b/litellm/llms/bedrock.py @@ -2,9 +2,9 @@ import json, copy, types import os from enum import Enum import time -from typing import Callable, Optional, Any, Union +from typing import Callable, Optional, Any, Union, List import litellm -from litellm.utils import ModelResponse, get_secret, Usage +from litellm.utils import ModelResponse, get_secret, Usage, ImageResponse from .prompt_templates.factory import prompt_factory, custom_prompt import httpx @@ -282,12 +282,82 @@ class AmazonLlamaConfig: } +class AmazonStabilityConfig: + """ + Reference: https://us-west-2.console.aws.amazon.com/bedrock/home?region=us-west-2#/providers?model=stability.stable-diffusion-xl-v0 + + Supported Params for the Amazon / Stable Diffusion models: + + - `cfg_scale` (integer): Default `7`. Between [ 0 .. 35 ]. How strictly the diffusion process adheres to the prompt text (higher values keep your image closer to your prompt) + + - `seed` (float): Default: `0`. Between [ 0 .. 4294967295 ]. Random noise seed (omit this option or use 0 for a random seed) + + - `steps` (array of strings): Default `30`. Between [ 10 .. 50 ]. Number of diffusion steps to run. + + - `width` (integer): Default: `512`. multiple of 64 >= 128. Width of the image to generate, in pixels, in an increment divible by 64. + Engine-specific dimension validation: + + - SDXL Beta: must be between 128x128 and 512x896 (or 896x512); only one dimension can be greater than 512. + - SDXL v0.9: must be one of 1024x1024, 1152x896, 1216x832, 1344x768, 1536x640, 640x1536, 768x1344, 832x1216, or 896x1152 + - SDXL v1.0: same as SDXL v0.9 + - SD v1.6: must be between 320x320 and 1536x1536 + + - `height` (integer): Default: `512`. multiple of 64 >= 128. Height of the image to generate, in pixels, in an increment divible by 64. + Engine-specific dimension validation: + + - SDXL Beta: must be between 128x128 and 512x896 (or 896x512); only one dimension can be greater than 512. + - SDXL v0.9: must be one of 1024x1024, 1152x896, 1216x832, 1344x768, 1536x640, 640x1536, 768x1344, 832x1216, or 896x1152 + - SDXL v1.0: same as SDXL v0.9 + - SD v1.6: must be between 320x320 and 1536x1536 + """ + + cfg_scale: Optional[int] = None + seed: Optional[float] = None + steps: Optional[List[str]] = None + width: Optional[int] = None + height: Optional[int] = None + + def __init__( + self, + cfg_scale: Optional[int] = None, + seed: Optional[float] = None, + steps: Optional[List[str]] = None, + width: Optional[int] = None, + height: Optional[int] = None, + ) -> None: + locals_ = locals() + for key, value in locals_.items(): + if key != "self" and value is not None: + setattr(self.__class__, key, value) + + @classmethod + def get_config(cls): + return { + k: v + for k, v in cls.__dict__.items() + if not k.startswith("__") + and not isinstance( + v, + ( + types.FunctionType, + types.BuiltinFunctionType, + classmethod, + staticmethod, + ), + ) + and v is not None + } + + def init_bedrock_client( region_name=None, aws_access_key_id: Optional[str] = None, aws_secret_access_key: Optional[str] = None, aws_region_name: Optional[str] = None, aws_bedrock_runtime_endpoint: Optional[str] = None, + aws_session_name: Optional[str] = None, + aws_role_name: Optional[str] = None, + timeout: Optional[int] = None, ): # check for custom AWS_REGION_NAME and use it if not passed to init_bedrock_client litellm_aws_region_name = get_secret("AWS_REGION_NAME", None) @@ -300,6 +370,8 @@ def init_bedrock_client( aws_secret_access_key, aws_region_name, aws_bedrock_runtime_endpoint, + aws_session_name, + aws_role_name, ] # Iterate over parameters and update if needed @@ -312,7 +384,11 @@ def init_bedrock_client( aws_secret_access_key, aws_region_name, aws_bedrock_runtime_endpoint, + aws_session_name, + aws_role_name, ) = params_to_check + + ### SET REGION NAME if region_name: pass elif aws_region_name: @@ -338,7 +414,31 @@ def init_bedrock_client( import boto3 - if aws_access_key_id != None: + config = boto3.session.Config(connect_timeout=timeout, read_timeout=timeout) + + ### CHECK STS ### + if aws_role_name is not None and aws_session_name is not None: + # use sts if role name passed in + sts_client = boto3.client( + "sts", + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + ) + + sts_response = sts_client.assume_role( + RoleArn=aws_role_name, RoleSessionName=aws_session_name + ) + + client = boto3.client( + service_name="bedrock-runtime", + aws_access_key_id=sts_response["Credentials"]["AccessKeyId"], + aws_secret_access_key=sts_response["Credentials"]["SecretAccessKey"], + aws_session_token=sts_response["Credentials"]["SessionToken"], + region_name=region_name, + endpoint_url=endpoint_url, + config=config, + ) + elif aws_access_key_id is not None: # uses auth params passed to completion # aws_access_key_id is not None, assume user is trying to auth using litellm.completion @@ -348,6 +448,7 @@ def init_bedrock_client( aws_secret_access_key=aws_secret_access_key, region_name=region_name, endpoint_url=endpoint_url, + config=config, ) else: # aws_access_key_id is None, assume user is trying to auth using env variables @@ -357,6 +458,7 @@ def init_bedrock_client( service_name="bedrock-runtime", region_name=region_name, endpoint_url=endpoint_url, + config=config, ) return client @@ -419,6 +521,8 @@ def completion( aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) aws_access_key_id = optional_params.pop("aws_access_key_id", None) aws_region_name = optional_params.pop("aws_region_name", None) + aws_role_name = optional_params.pop("aws_role_name", None) + aws_session_name = optional_params.pop("aws_session_name", None) aws_bedrock_runtime_endpoint = optional_params.pop( "aws_bedrock_runtime_endpoint", None ) @@ -433,9 +537,14 @@ def completion( aws_secret_access_key=aws_secret_access_key, aws_region_name=aws_region_name, aws_bedrock_runtime_endpoint=aws_bedrock_runtime_endpoint, + aws_role_name=aws_role_name, + aws_session_name=aws_session_name, ) model = model + modelId = ( + optional_params.pop("model_id", None) or model + ) # default to model if not passed provider = model.split(".")[0] prompt = convert_messages_to_prompt( model, messages, provider, custom_prompt_dict @@ -498,6 +607,8 @@ def completion( "textGenerationConfig": inference_params, } ) + else: + data = json.dumps({}) ## COMPLETION CALL accept = "application/json" @@ -508,7 +619,7 @@ def completion( request_str = f""" response = client.invoke_model( body={data}, - modelId={model}, + modelId={modelId}, accept=accept, contentType=contentType ) @@ -523,7 +634,7 @@ def completion( ) response = client.invoke_model( - body=data, modelId=model, accept=accept, contentType=contentType + body=data, modelId=modelId, accept=accept, contentType=contentType ) response = response.get("body").read() @@ -533,7 +644,7 @@ def completion( request_str = f""" response = client.invoke_model_with_response_stream( body={data}, - modelId={model}, + modelId={modelId}, accept=accept, contentType=contentType ) @@ -548,7 +659,7 @@ def completion( ) response = client.invoke_model_with_response_stream( - body=data, modelId=model, accept=accept, contentType=contentType + body=data, modelId=modelId, accept=accept, contentType=contentType ) response = response.get("body") return response @@ -557,7 +668,7 @@ def completion( request_str = f""" response = client.invoke_model( body={data}, - modelId={model}, + modelId={modelId}, accept=accept, contentType=contentType ) @@ -571,8 +682,12 @@ def completion( }, ) response = client.invoke_model( - body=data, modelId=model, accept=accept, contentType=contentType + body=data, modelId=modelId, accept=accept, contentType=contentType ) + except client.exceptions.ValidationException as e: + if "The provided model identifier is invalid" in str(e): + raise BedrockError(status_code=404, message=str(e)) + raise BedrockError(status_code=400, message=str(e)) except Exception as e: raise BedrockError(status_code=500, message=str(e)) @@ -617,9 +732,16 @@ def completion( ) ## CALCULATING USAGE - baseten charges on time, not tokens - have some mapping of cost here. - prompt_tokens = len(encoding.encode(prompt)) - completion_tokens = len( - encoding.encode(model_response["choices"][0]["message"].get("content", "")) + prompt_tokens = response_metadata.get( + "x-amzn-bedrock-input-token-count", len(encoding.encode(prompt)) + ) + completion_tokens = response_metadata.get( + "x-amzn-bedrock-output-token-count", + len( + encoding.encode( + model_response["choices"][0]["message"].get("content", "") + ) + ), ) model_response["created"] = int(time.time()) @@ -630,6 +752,8 @@ def completion( total_tokens=prompt_tokens + completion_tokens, ) model_response.usage = usage + model_response._hidden_params["region_name"] = client.meta.region_name + print_verbose(f"model_response._hidden_params: {model_response._hidden_params}") return model_response except BedrockError as e: exception_mapping_worked = True @@ -651,6 +775,11 @@ def _embedding_func_single( encoding=None, logging_obj=None, ): + if isinstance(input, str) is False: + raise BedrockError( + message="Bedrock Embedding API input must be type str | List[str]", + status_code=400, + ) # logic for parsing in - calling - parsing out model embedding calls ## FORMAT EMBEDDING INPUT ## provider = model.split(".")[0] @@ -658,6 +787,9 @@ def _embedding_func_single( inference_params.pop( "user", None ) # make sure user is not passed in for bedrock call + modelId = ( + optional_params.pop("model_id", None) or model + ) # default to model if not passed if provider == "amazon": input = input.replace(os.linesep, " ") data = {"inputText": input, **inference_params} @@ -672,7 +804,7 @@ def _embedding_func_single( request_str = f""" response = client.invoke_model( body={body}, - modelId={model}, + modelId={modelId}, accept="*/*", contentType="application/json", )""" # type: ignore @@ -680,14 +812,14 @@ def _embedding_func_single( input=input, api_key="", # boto3 is used for init. additional_args={ - "complete_input_dict": {"model": model, "texts": input}, + "complete_input_dict": {"model": modelId, "texts": input}, "request_str": request_str, }, ) try: response = client.invoke_model( body=body, - modelId=model, + modelId=modelId, accept="*/*", contentType="application/json", ) @@ -726,6 +858,8 @@ def embedding( aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) aws_access_key_id = optional_params.pop("aws_access_key_id", None) aws_region_name = optional_params.pop("aws_region_name", None) + aws_role_name = optional_params.pop("aws_role_name", None) + aws_session_name = optional_params.pop("aws_session_name", None) aws_bedrock_runtime_endpoint = optional_params.pop( "aws_bedrock_runtime_endpoint", None ) @@ -736,8 +870,11 @@ def embedding( aws_secret_access_key=aws_secret_access_key, aws_region_name=aws_region_name, aws_bedrock_runtime_endpoint=aws_bedrock_runtime_endpoint, + aws_role_name=aws_role_name, + aws_session_name=aws_session_name, ) - if type(input) == str: + if isinstance(input, str): + ## Embedding Call embeddings = [ _embedding_func_single( model, @@ -747,8 +884,8 @@ def embedding( logging_obj=logging_obj, ) ] - else: - ## Embedding Call + elif isinstance(input, list): + ## Embedding Call - assuming this is a List[str] embeddings = [ _embedding_func_single( model, @@ -759,6 +896,12 @@ def embedding( ) for i in input ] # [TODO]: make these parallel calls + else: + # enters this branch if input = int, ex. input=2 + raise BedrockError( + message="Bedrock Embedding API input must be type str | List[str]", + status_code=400, + ) ## Populate OpenAI compliant dictionary embedding_response = [] @@ -785,3 +928,112 @@ def embedding( model_response.usage = usage return model_response + + +def image_generation( + model: str, + prompt: str, + timeout=None, + logging_obj=None, + model_response=None, + optional_params=None, + aimg_generation=False, +): + """ + Bedrock Image Gen endpoint support + """ + ### BOTO3 INIT ### + # pop aws_secret_access_key, aws_access_key_id, aws_region_name from kwargs, since completion calls fail with them + aws_secret_access_key = optional_params.pop("aws_secret_access_key", None) + aws_access_key_id = optional_params.pop("aws_access_key_id", None) + aws_region_name = optional_params.pop("aws_region_name", None) + aws_role_name = optional_params.pop("aws_role_name", None) + aws_session_name = optional_params.pop("aws_session_name", None) + aws_bedrock_runtime_endpoint = optional_params.pop( + "aws_bedrock_runtime_endpoint", None + ) + + # use passed in BedrockRuntime.Client if provided, otherwise create a new one + client = init_bedrock_client( + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_region_name=aws_region_name, + aws_bedrock_runtime_endpoint=aws_bedrock_runtime_endpoint, + aws_role_name=aws_role_name, + aws_session_name=aws_session_name, + timeout=timeout, + ) + + ### FORMAT IMAGE GENERATION INPUT ### + modelId = model + provider = model.split(".")[0] + inference_params = copy.deepcopy(optional_params) + inference_params.pop( + "user", None + ) # make sure user is not passed in for bedrock call + data = {} + if provider == "stability": + prompt = prompt.replace(os.linesep, " ") + ## LOAD CONFIG + config = litellm.AmazonStabilityConfig.get_config() + for k, v in config.items(): + if ( + k not in inference_params + ): # completion(top_k=3) > anthropic_config(top_k=3) <- allows for dynamic variables to be passed in + inference_params[k] = v + data = {"text_prompts": [{"text": prompt, "weight": 1}], **inference_params} + else: + raise BedrockError( + status_code=422, message=f"Unsupported model={model}, passed in" + ) + + body = json.dumps(data).encode("utf-8") + ## LOGGING + request_str = f""" + response = client.invoke_model( + body={body}, + modelId={modelId}, + accept="application/json", + contentType="application/json", + )""" # type: ignore + logging_obj.pre_call( + input=prompt, + api_key="", # boto3 is used for init. + additional_args={ + "complete_input_dict": {"model": modelId, "texts": prompt}, + "request_str": request_str, + }, + ) + try: + response = client.invoke_model( + body=body, + modelId=modelId, + accept="application/json", + contentType="application/json", + ) + response_body = json.loads(response.get("body").read()) + ## LOGGING + logging_obj.post_call( + input=prompt, + api_key="", + additional_args={"complete_input_dict": data}, + original_response=json.dumps(response_body), + ) + except Exception as e: + raise BedrockError( + message=f"Embedding Error with model {model}: {e}", status_code=500 + ) + + ### FORMAT RESPONSE TO OPENAI FORMAT ### + if response_body is None: + raise Exception("Error in response object format") + + if model_response is None: + model_response = ImageResponse() + + image_list: List = [] + for artifact in response_body["artifacts"]: + image_dict = {"url": artifact["base64"]} + + model_response.data = image_dict + return model_response diff --git a/litellm/llms/custom_httpx/azure_dall_e_2.py b/litellm/llms/custom_httpx/azure_dall_e_2.py index a62e1d666..f361ede5b 100644 --- a/litellm/llms/custom_httpx/azure_dall_e_2.py +++ b/litellm/llms/custom_httpx/azure_dall_e_2.py @@ -43,7 +43,7 @@ class AsyncCustomHTTPTransport(httpx.AsyncHTTPTransport): request=request, ) - time.sleep(int(response.headers.get("retry-after")) or 10) + await asyncio.sleep(int(response.headers.get("retry-after") or 10)) response = await super().handle_async_request(request) await response.aread() @@ -95,7 +95,6 @@ class CustomHTTPTransport(httpx.HTTPTransport): request.method = "GET" response = super().handle_request(request) response.read() - timeout_secs: int = 120 start_time = time.time() while response.json()["status"] not in ["succeeded", "failed"]: @@ -112,11 +111,9 @@ class CustomHTTPTransport(httpx.HTTPTransport): content=json.dumps(timeout).encode("utf-8"), request=request, ) - - time.sleep(int(response.headers.get("retry-after")) or 10) + time.sleep(int(response.headers.get("retry-after", None) or 10)) response = super().handle_request(request) response.read() - if response.json()["status"] == "failed": error_data = response.json() return httpx.Response( diff --git a/litellm/llms/gemini.py b/litellm/llms/gemini.py index 863fb4baf..7e98345b3 100644 --- a/litellm/llms/gemini.py +++ b/litellm/llms/gemini.py @@ -120,9 +120,7 @@ def completion( ## Load Config inference_params = copy.deepcopy(optional_params) - inference_params.pop( - "stream", None - ) # palm does not support streaming, so we handle this by fake streaming in main.py + stream = inference_params.pop("stream", None) config = litellm.GeminiConfig.get_config() for k, v in config.items(): if ( @@ -139,10 +137,18 @@ def completion( ## COMPLETION CALL try: _model = genai.GenerativeModel(f"models/{model}") - response = _model.generate_content( - contents=prompt, - generation_config=genai.types.GenerationConfig(**inference_params), - ) + if stream != True: + response = _model.generate_content( + contents=prompt, + generation_config=genai.types.GenerationConfig(**inference_params), + ) + else: + response = _model.generate_content( + contents=prompt, + generation_config=genai.types.GenerationConfig(**inference_params), + stream=True, + ) + return response except Exception as e: raise GeminiError( message=str(e), @@ -177,16 +183,20 @@ def completion( try: completion_response = model_response["choices"][0]["message"].get("content") - if completion_response is None: + if completion_response is None: raise Exception except: original_response = f"response: {response}" - if hasattr(response, "candidates"): + if hasattr(response, "candidates"): original_response = f"response: {response.candidates}" - if "SAFETY" in original_response: - original_response += "\nThe candidate content was flagged for safety reasons." + if "SAFETY" in original_response: + original_response += ( + "\nThe candidate content was flagged for safety reasons." + ) elif "RECITATION" in original_response: - original_response += "\nThe candidate content was flagged for recitation reasons." + original_response += ( + "\nThe candidate content was flagged for recitation reasons." + ) raise GeminiError( status_code=400, message=f"No response received. Original response - {original_response}", diff --git a/litellm/llms/ollama.py b/litellm/llms/ollama.py index 0f99622b3..c8847117e 100644 --- a/litellm/llms/ollama.py +++ b/litellm/llms/ollama.py @@ -145,8 +145,8 @@ def get_ollama_response( ): # completion(top_k=3) > cohere_config(top_k=3) <- allows for dynamic variables to be passed in optional_params[k] = v - optional_params["stream"] = optional_params.get("stream", False) - data = {"model": model, "prompt": prompt, **optional_params} + stream = optional_params.pop("stream", False) + data = {"model": model, "prompt": prompt, "options": optional_params} ## LOGGING logging_obj.pre_call( input=None, @@ -159,7 +159,7 @@ def get_ollama_response( }, ) if acompletion is True: - if optional_params.get("stream", False) == True: + if stream == True: response = ollama_async_streaming( url=url, data=data, @@ -176,7 +176,7 @@ def get_ollama_response( logging_obj=logging_obj, ) return response - elif optional_params.get("stream", False) == True: + elif stream == True: return ollama_completion_stream(url=url, data=data, logging_obj=logging_obj) response = requests.post(url=f"{url}", json=data, timeout=litellm.request_timeout) @@ -254,7 +254,7 @@ async def ollama_async_streaming(url, data, model_response, encoding, logging_ob ) as response: if response.status_code != 200: raise OllamaError( - status_code=response.status_code, message=response.text + status_code=response.status_code, message=await response.aread() ) streamwrapper = litellm.CustomStreamWrapper( diff --git a/litellm/llms/ollama_chat.py b/litellm/llms/ollama_chat.py index 1ff93649f..95ff8dfaa 100644 --- a/litellm/llms/ollama_chat.py +++ b/litellm/llms/ollama_chat.py @@ -145,8 +145,8 @@ def get_ollama_response( ): # completion(top_k=3) > cohere_config(top_k=3) <- allows for dynamic variables to be passed in optional_params[k] = v - optional_params["stream"] = optional_params.get("stream", False) - data = {"model": model, "messages": messages, **optional_params} + stream = optional_params.pop("stream", False) + data = {"model": model, "messages": messages, "options": optional_params} ## LOGGING logging_obj.pre_call( input=None, @@ -159,7 +159,7 @@ def get_ollama_response( }, ) if acompletion is True: - if optional_params.get("stream", False) == True: + if stream == True: response = ollama_async_streaming( url=url, data=data, @@ -176,7 +176,7 @@ def get_ollama_response( logging_obj=logging_obj, ) return response - elif optional_params.get("stream", False) == True: + elif stream == True: return ollama_completion_stream(url=url, data=data, logging_obj=logging_obj) response = requests.post( @@ -220,8 +220,10 @@ def get_ollama_response( model_response["choices"][0]["message"] = response_json["message"] model_response["created"] = int(time.time()) model_response["model"] = "ollama/" + model - prompt_tokens = response_json["prompt_eval_count"] # type: ignore - completion_tokens = response_json["eval_count"] + prompt_tokens = response_json.get("prompt_eval_count", litellm.token_counter(messages=messages)) # type: ignore + completion_tokens = response_json.get( + "eval_count", litellm.token_counter(text=response_json["message"]) + ) model_response["usage"] = litellm.Usage( prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, @@ -320,8 +322,10 @@ async def ollama_acompletion(url, data, model_response, encoding, logging_obj): model_response["choices"][0]["message"] = response_json["message"] model_response["created"] = int(time.time()) model_response["model"] = "ollama/" + data["model"] - prompt_tokens = response_json["prompt_eval_count"] # type: ignore - completion_tokens = response_json["eval_count"] + prompt_tokens = response_json.get("prompt_eval_count", litellm.token_counter(messages=data["messages"])) # type: ignore + completion_tokens = response_json.get( + "eval_count", litellm.token_counter(text=response_json["message"]) + ) model_response["usage"] = litellm.Usage( prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, diff --git a/litellm/llms/openai.py b/litellm/llms/openai.py index 0ae5633d5..7121d7bc7 100644 --- a/litellm/llms/openai.py +++ b/litellm/llms/openai.py @@ -1,5 +1,5 @@ from typing import Optional, Union, Any -import types, time, json +import types, time, json, traceback import httpx from .base import BaseLLM from litellm.utils import ( @@ -221,6 +221,7 @@ class OpenAIChatCompletion(BaseLLM): headers: Optional[dict] = None, custom_prompt_dict: dict = {}, client=None, + organization: Optional[str] = None, ): super().completion() exception_mapping_worked = False @@ -254,6 +255,7 @@ class OpenAIChatCompletion(BaseLLM): timeout=timeout, client=client, max_retries=max_retries, + organization=organization, ) else: return self.acompletion( @@ -266,6 +268,7 @@ class OpenAIChatCompletion(BaseLLM): timeout=timeout, client=client, max_retries=max_retries, + organization=organization, ) elif optional_params.get("stream", False): return self.streaming( @@ -278,6 +281,7 @@ class OpenAIChatCompletion(BaseLLM): timeout=timeout, client=client, max_retries=max_retries, + organization=organization, ) else: if not isinstance(max_retries, int): @@ -291,6 +295,7 @@ class OpenAIChatCompletion(BaseLLM): http_client=litellm.client_session, timeout=timeout, max_retries=max_retries, + organization=organization, ) else: openai_client = client @@ -349,7 +354,7 @@ class OpenAIChatCompletion(BaseLLM): if hasattr(e, "status_code"): raise OpenAIError(status_code=e.status_code, message=str(e)) else: - raise OpenAIError(status_code=500, message=str(e)) + raise OpenAIError(status_code=500, message=traceback.format_exc()) async def acompletion( self, @@ -358,6 +363,7 @@ class OpenAIChatCompletion(BaseLLM): timeout: float, api_key: Optional[str] = None, api_base: Optional[str] = None, + organization: Optional[str] = None, client=None, max_retries=None, logging_obj=None, @@ -372,6 +378,7 @@ class OpenAIChatCompletion(BaseLLM): http_client=litellm.aclient_session, timeout=timeout, max_retries=max_retries, + organization=organization, ) else: openai_aclient = client @@ -412,6 +419,7 @@ class OpenAIChatCompletion(BaseLLM): model: str, api_key: Optional[str] = None, api_base: Optional[str] = None, + organization: Optional[str] = None, client=None, max_retries=None, headers=None, @@ -423,6 +431,7 @@ class OpenAIChatCompletion(BaseLLM): http_client=litellm.client_session, timeout=timeout, max_retries=max_retries, + organization=organization, ) else: openai_client = client @@ -454,6 +463,7 @@ class OpenAIChatCompletion(BaseLLM): model: str, api_key: Optional[str] = None, api_base: Optional[str] = None, + organization: Optional[str] = None, client=None, max_retries=None, headers=None, @@ -467,6 +477,7 @@ class OpenAIChatCompletion(BaseLLM): http_client=litellm.aclient_session, timeout=timeout, max_retries=max_retries, + organization=organization, ) else: openai_aclient = client @@ -706,19 +717,34 @@ class OpenAIChatCompletion(BaseLLM): ## COMPLETION CALL response = openai_client.images.generate(**data, timeout=timeout) # type: ignore + response = response.model_dump() # type: ignore ## LOGGING logging_obj.post_call( - input=input, + input=prompt, api_key=api_key, additional_args={"complete_input_dict": data}, original_response=response, ) # return response - return convert_to_model_response_object(response_object=response.model_dump(), model_response_object=model_response, response_type="image_generation") # type: ignore + return convert_to_model_response_object(response_object=response, model_response_object=model_response, response_type="image_generation") # type: ignore except OpenAIError as e: exception_mapping_worked = True + ## LOGGING + logging_obj.post_call( + input=prompt, + api_key=api_key, + additional_args={"complete_input_dict": data}, + original_response=str(e), + ) raise e except Exception as e: + ## LOGGING + logging_obj.post_call( + input=prompt, + api_key=api_key, + additional_args={"complete_input_dict": data}, + original_response=str(e), + ) if hasattr(e, "status_code"): raise OpenAIError(status_code=e.status_code, message=str(e)) else: @@ -733,14 +759,22 @@ class OpenAIChatCompletion(BaseLLM): messages: Optional[list] = None, input: Optional[list] = None, prompt: Optional[str] = None, + organization: Optional[str] = None, ): - client = AsyncOpenAI(api_key=api_key, timeout=timeout) + client = AsyncOpenAI( + api_key=api_key, timeout=timeout, organization=organization + ) if model is None and mode != "image_generation": raise Exception("model is not set") completion = None if mode == "completion": + completion = await client.completions.with_raw_response.create( + model=model, # type: ignore + prompt=prompt, # type: ignore + ) + elif mode == "chat": if messages is None: raise Exception("messages is not set") completion = await client.chat.completions.with_raw_response.create( @@ -889,7 +923,7 @@ class OpenAITextCompletion(BaseLLM): headers=headers, model_response=model_response, model=model, - timeout=timeout + timeout=timeout, ) else: return self.acompletion(api_base=api_base, data=data, headers=headers, model_response=model_response, prompt=prompt, api_key=api_key, logging_obj=logging_obj, model=model, timeout=timeout) # type: ignore @@ -901,14 +935,11 @@ class OpenAITextCompletion(BaseLLM): headers=headers, model_response=model_response, model=model, - timeout=timeout + timeout=timeout, ) else: response = httpx.post( - url=f"{api_base}", - json=data, - headers=headers, - timeout=timeout + url=f"{api_base}", json=data, headers=headers, timeout=timeout ) if response.status_code != 200: raise OpenAIError( @@ -944,7 +975,7 @@ class OpenAITextCompletion(BaseLLM): prompt: str, api_key: str, model: str, - timeout: float + timeout: float, ): async with httpx.AsyncClient(timeout=timeout) as client: try: @@ -986,7 +1017,7 @@ class OpenAITextCompletion(BaseLLM): headers: dict, model_response: ModelResponse, model: str, - timeout: float + timeout: float, ): with httpx.stream( url=f"{api_base}", @@ -1017,7 +1048,7 @@ class OpenAITextCompletion(BaseLLM): headers: dict, model_response: ModelResponse, model: str, - timeout: float + timeout: float, ): client = httpx.AsyncClient() async with client.stream( diff --git a/litellm/llms/prompt_templates/factory.py b/litellm/llms/prompt_templates/factory.py index 43fbe8724..1aebcf35d 100644 --- a/litellm/llms/prompt_templates/factory.py +++ b/litellm/llms/prompt_templates/factory.py @@ -99,12 +99,16 @@ def ollama_pt( def mistral_instruct_pt(messages): + # Following the Mistral example's https://huggingface.co/docs/transformers/main/chat_templating prompt = custom_prompt( initial_prompt_value="", role_dict={ - "system": {"pre_message": "[INST]", "post_message": "[/INST]"}, - "user": {"pre_message": "[INST]", "post_message": "[/INST]"}, - "assistant": {"pre_message": "[INST]", "post_message": "[/INST]"}, + "system": { + "pre_message": "[INST] \n", + "post_message": " [/INST]\n", + }, + "user": {"pre_message": "[INST] ", "post_message": " [/INST]\n"}, + "assistant": {"pre_message": " ", "post_message": " "}, }, final_prompt_value="", messages=messages, @@ -372,6 +376,7 @@ def anthropic_pt( You can "put words in Claude's mouth" by ending with an assistant message. See: https://docs.anthropic.com/claude/docs/put-words-in-claudes-mouth """ + class AnthropicConstants(Enum): HUMAN_PROMPT = "\n\nHuman: " AI_PROMPT = "\n\nAssistant: " @@ -394,32 +399,35 @@ def anthropic_pt( prompt += f"{AnthropicConstants.AI_PROMPT.value}" return prompt - + def _load_image_from_url(image_url): try: from PIL import Image except: - raise Exception("gemini image conversion failed please run `pip install Pillow`") + raise Exception( + "gemini image conversion failed please run `pip install Pillow`" + ) from io import BytesIO + try: # Send a GET request to the image URL response = requests.get(image_url) response.raise_for_status() # Raise an exception for HTTP errors # Check the response's content type to ensure it is an image - content_type = response.headers.get('content-type') - if not content_type or 'image' not in content_type: - raise ValueError(f"URL does not point to a valid image (content-type: {content_type})") + content_type = response.headers.get("content-type") + if not content_type or "image" not in content_type: + raise ValueError( + f"URL does not point to a valid image (content-type: {content_type})" + ) # Load the image from the response content return Image.open(BytesIO(response.content)) - + except requests.RequestException as e: - print(f"Request failed: {e}") - except UnidentifiedImageError: - print("Cannot identify image file (it may not be a supported image format or might be corrupted).") - except ValueError as e: - print(e) + raise Exception(f"Request failed: {e}") + except Exception as e: + raise e def _gemini_vision_convert_messages(messages: list): @@ -437,10 +445,11 @@ def _gemini_vision_convert_messages(messages: list): try: from PIL import Image except: - raise Exception("gemini image conversion failed please run `pip install Pillow`") + raise Exception( + "gemini image conversion failed please run `pip install Pillow`" + ) try: - # given messages for gpt-4 vision, convert them for gemini # https://github.com/GoogleCloudPlatform/generative-ai/blob/main/gemini/getting-started/intro_gemini_python.ipynb prompt = "" @@ -589,7 +598,7 @@ def prompt_factory( if custom_llm_provider == "ollama": return ollama_pt(model=model, messages=messages) elif custom_llm_provider == "anthropic": - if any(_ in model for _ in ["claude-2.1","claude-v2:1"]): + if any(_ in model for _ in ["claude-2.1", "claude-v2:1"]): return claude_2_1_pt(messages=messages) else: return anthropic_pt(messages=messages) diff --git a/litellm/llms/sagemaker.py b/litellm/llms/sagemaker.py index 1d341e7e9..78aafe7f7 100644 --- a/litellm/llms/sagemaker.py +++ b/litellm/llms/sagemaker.py @@ -25,6 +25,46 @@ class SagemakerError(Exception): ) # Call the base class constructor with the parameters it needs +import io +import json + + +class TokenIterator: + def __init__(self, stream): + self.byte_iterator = iter(stream) + self.buffer = io.BytesIO() + self.read_pos = 0 + self.end_of_data = False + + def __iter__(self): + return self + + def __next__(self): + try: + while True: + self.buffer.seek(self.read_pos) + line = self.buffer.readline() + if line and line[-1] == ord("\n"): + response_obj = {"text": "", "is_finished": False} + self.read_pos += len(line) + 1 + full_line = line[:-1].decode("utf-8") + line_data = json.loads(full_line.lstrip("data:").rstrip("/n")) + if line_data.get("generated_text", None) is not None: + self.end_of_data = True + response_obj["is_finished"] = True + response_obj["text"] = line_data["token"]["text"] + return response_obj + chunk = next(self.byte_iterator) + self.buffer.seek(0, io.SEEK_END) + self.buffer.write(chunk["PayloadPart"]["Bytes"]) + except StopIteration as e: + if self.end_of_data == True: + raise e # Re-raise StopIteration + else: + self.end_of_data = True + return "data: [DONE]" + + class SagemakerConfig: """ Reference: https://d-uuwbxj1u4cnu.studio.us-west-2.sagemaker.aws/jupyter/default/lab/workspaces/auto-q/tree/DemoNotebooks/meta-textgeneration-llama-2-7b-SDK_1.ipynb @@ -121,7 +161,6 @@ def completion( # pop streaming if it's in the optional params as 'stream' raises an error with sagemaker inference_params = deepcopy(optional_params) - inference_params.pop("stream", None) ## Load Config config = litellm.SagemakerConfig.get_config() @@ -152,6 +191,28 @@ def completion( hf_model_name or model ) # pass in hf model name for pulling it's prompt template - (e.g. `hf_model_name="meta-llama/Llama-2-7b-chat-hf` applies the llama2 chat template to the prompt) prompt = prompt_factory(model=hf_model_name, messages=messages) + stream = inference_params.pop("stream", None) + if stream == True: + data = json.dumps( + {"inputs": prompt, "parameters": inference_params, "stream": True} + ).encode("utf-8") + ## LOGGING + request_str = f""" + response = client.invoke_endpoint_with_response_stream( + EndpointName={model}, + ContentType="application/json", + Body={data}, + CustomAttributes="accept_eula=true", + ) + """ # type: ignore + response = client.invoke_endpoint_with_response_stream( + EndpointName=model, + ContentType="application/json", + Body=data, + CustomAttributes="accept_eula=true", + ) + + return response["Body"] data = json.dumps({"inputs": prompt, "parameters": inference_params}).encode( "utf-8" @@ -184,7 +245,15 @@ def completion( CustomAttributes="accept_eula=true", ) except Exception as e: - raise SagemakerError(status_code=500, message=f"{str(e)}") + status_code = ( + getattr(e, "response", {}) + .get("ResponseMetadata", {}) + .get("HTTPStatusCode", 500) + ) + error_message = ( + getattr(e, "response", {}).get("Error", {}).get("Message", str(e)) + ) + raise SagemakerError(status_code=status_code, message=error_message) response = response["Body"].read().decode("utf8") ## LOGGING @@ -358,7 +427,15 @@ def embedding( CustomAttributes="accept_eula=true", ) except Exception as e: - raise SagemakerError(status_code=500, message=f"{str(e)}") + status_code = ( + getattr(e, "response", {}) + .get("ResponseMetadata", {}) + .get("HTTPStatusCode", 500) + ) + error_message = ( + getattr(e, "response", {}).get("Error", {}).get("Message", str(e)) + ) + raise SagemakerError(status_code=status_code, message=error_message) response = json.loads(response["Body"].read().decode("utf8")) ## LOGGING @@ -368,7 +445,7 @@ def embedding( original_response=response, additional_args={"complete_input_dict": data}, ) - + print_verbose(f"raw model_response: {response}") if "embedding" not in response: raise SagemakerError(status_code=500, message="embedding not found in response") diff --git a/litellm/llms/tokenizers/__init__.py b/litellm/llms/tokenizers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/litellm/llms/vertex_ai.py b/litellm/llms/vertex_ai.py index 77c20d30a..d42bd003f 100644 --- a/litellm/llms/vertex_ai.py +++ b/litellm/llms/vertex_ai.py @@ -3,7 +3,7 @@ import json from enum import Enum import requests import time -from typing import Callable, Optional +from typing import Callable, Optional, Union from litellm.utils import ModelResponse, Usage, CustomStreamWrapper import litellm, uuid import httpx @@ -75,6 +75,41 @@ class VertexAIConfig: } +import asyncio + + +class TextStreamer: + """ + Fake streaming iterator for Vertex AI Model Garden calls + """ + + def __init__(self, text): + self.text = text.split() # let's assume words as a streaming unit + self.index = 0 + + def __iter__(self): + return self + + def __next__(self): + if self.index < len(self.text): + result = self.text[self.index] + self.index += 1 + return result + else: + raise StopIteration + + def __aiter__(self): + return self + + async def __anext__(self): + if self.index < len(self.text): + result = self.text[self.index] + self.index += 1 + return result + else: + raise StopAsyncIteration # once we run out of data to stream, we raise this error + + def _get_image_bytes_from_url(image_url: str) -> bytes: try: response = requests.get(image_url) @@ -216,6 +251,14 @@ def completion( status_code=400, message="vertexai import failed please run `pip install google-cloud-aiplatform`", ) + + if not ( + hasattr(vertexai, "preview") or hasattr(vertexai.preview, "language_models") + ): + raise VertexAIError( + status_code=400, + message="""Upgrade vertex ai. Run `pip install "google-cloud-aiplatform>=1.38"`""", + ) try: from vertexai.preview.language_models import ( ChatModel, @@ -228,9 +271,17 @@ def completion( Part, GenerationConfig, ) + from google.cloud import aiplatform + from google.protobuf import json_format # type: ignore + from google.protobuf.struct_pb2 import Value # type: ignore from google.cloud.aiplatform_v1beta1.types import content as gapic_content_types + import google.auth - vertexai.init(project=vertex_project, location=vertex_location) + ## Load credentials with the correct quota project ref: https://github.com/googleapis/python-aiplatform/issues/2557#issuecomment-1709284744 + creds, _ = google.auth.default(quota_project_id=vertex_project) + vertexai.init( + project=vertex_project, location=vertex_location, credentials=creds + ) ## Load Config config = litellm.VertexAIConfig.get_config() @@ -264,6 +315,11 @@ def completion( request_str = "" response_obj = None + async_client = None + instances = None + client_options = { + "api_endpoint": f"{vertex_location}-aiplatform.googleapis.com" + } if ( model in litellm.vertex_language_models or model in litellm.vertex_vision_models @@ -283,39 +339,51 @@ def completion( llm_model = CodeGenerationModel.from_pretrained(model) mode = "text" request_str += f"llm_model = CodeGenerationModel.from_pretrained({model})\n" - else: # vertex_code_llm_models + elif model in litellm.vertex_code_chat_models: # vertex_code_llm_models llm_model = CodeChatModel.from_pretrained(model) mode = "chat" request_str += f"llm_model = CodeChatModel.from_pretrained({model})\n" + else: # assume vertex model garden + client = aiplatform.gapic.PredictionServiceClient( + client_options=client_options + ) - if acompletion == True: # [TODO] expand support to vertex ai chat + text models + instances = [optional_params] + instances[0]["prompt"] = prompt + instances = [ + json_format.ParseDict(instance_dict, Value()) + for instance_dict in instances + ] + llm_model = client.endpoint_path( + project=vertex_project, location=vertex_location, endpoint=model + ) + + mode = "custom" + request_str += f"llm_model = client.endpoint_path(project={vertex_project}, location={vertex_location}, endpoint={model})\n" + + if acompletion == True: + data = { + "llm_model": llm_model, + "mode": mode, + "prompt": prompt, + "logging_obj": logging_obj, + "request_str": request_str, + "model": model, + "model_response": model_response, + "encoding": encoding, + "messages": messages, + "print_verbose": print_verbose, + "client_options": client_options, + "instances": instances, + "vertex_location": vertex_location, + "vertex_project": vertex_project, + **optional_params, + } if optional_params.get("stream", False) is True: # async streaming - return async_streaming( - llm_model=llm_model, - mode=mode, - prompt=prompt, - logging_obj=logging_obj, - request_str=request_str, - model=model, - model_response=model_response, - messages=messages, - print_verbose=print_verbose, - **optional_params, - ) - return async_completion( - llm_model=llm_model, - mode=mode, - prompt=prompt, - logging_obj=logging_obj, - request_str=request_str, - model=model, - model_response=model_response, - encoding=encoding, - messages=messages, - print_verbose=print_verbose, - **optional_params, - ) + return async_streaming(**data) + + return async_completion(**data) if mode == "vision": print_verbose("\nMaking VertexAI Gemini Pro Vision Call") @@ -460,7 +528,36 @@ def completion( }, ) completion_response = llm_model.predict(prompt, **optional_params).text + elif mode == "custom": + """ + Vertex AI Model Garden + """ + request_str += ( + f"client.predict(endpoint={llm_model}, instances={instances})\n" + ) + ## LOGGING + logging_obj.pre_call( + input=prompt, + api_key=None, + additional_args={ + "complete_input_dict": optional_params, + "request_str": request_str, + }, + ) + response = client.predict( + endpoint=llm_model, + instances=instances, + ).predictions + completion_response = response[0] + if ( + isinstance(completion_response, str) + and "\nOutput:\n" in completion_response + ): + completion_response = completion_response.split("\nOutput:\n", 1)[1] + if "stream" in optional_params and optional_params["stream"] == True: + response = TextStreamer(completion_response) + return response ## LOGGING logging_obj.post_call( input=prompt, api_key=None, original_response=completion_response @@ -528,6 +625,10 @@ async def async_completion( encoding=None, messages=None, print_verbose=None, + client_options=None, + instances=None, + vertex_project=None, + vertex_location=None, **optional_params, ): """ @@ -616,7 +717,43 @@ async def async_completion( ) response_obj = await llm_model.predict_async(prompt, **optional_params) completion_response = response_obj.text + elif mode == "custom": + """ + Vertex AI Model Garden + """ + from google.cloud import aiplatform + async_client = aiplatform.gapic.PredictionServiceAsyncClient( + client_options=client_options + ) + llm_model = async_client.endpoint_path( + project=vertex_project, location=vertex_location, endpoint=model + ) + + request_str += ( + f"client.predict(endpoint={llm_model}, instances={instances})\n" + ) + ## LOGGING + logging_obj.pre_call( + input=prompt, + api_key=None, + additional_args={ + "complete_input_dict": optional_params, + "request_str": request_str, + }, + ) + + response_obj = await async_client.predict( + endpoint=llm_model, + instances=instances, + ) + response = response_obj.predictions + completion_response = response[0] + if ( + isinstance(completion_response, str) + and "\nOutput:\n" in completion_response + ): + completion_response = completion_response.split("\nOutput:\n", 1)[1] ## LOGGING logging_obj.post_call( input=prompt, api_key=None, original_response=completion_response @@ -646,14 +783,12 @@ async def async_completion( # init prompt tokens # this block attempts to get usage from response_obj if it exists, if not it uses the litellm token counter prompt_tokens, completion_tokens, total_tokens = 0, 0, 0 - if response_obj is not None: - if hasattr(response_obj, "usage_metadata") and hasattr( - response_obj.usage_metadata, "prompt_token_count" - ): - prompt_tokens = response_obj.usage_metadata.prompt_token_count - completion_tokens = ( - response_obj.usage_metadata.candidates_token_count - ) + if response_obj is not None and ( + hasattr(response_obj, "usage_metadata") + and hasattr(response_obj.usage_metadata, "prompt_token_count") + ): + prompt_tokens = response_obj.usage_metadata.prompt_token_count + completion_tokens = response_obj.usage_metadata.candidates_token_count else: prompt_tokens = len(encoding.encode(prompt)) completion_tokens = len( @@ -682,8 +817,13 @@ async def async_streaming( model_response: ModelResponse, logging_obj=None, request_str=None, + encoding=None, messages=None, print_verbose=None, + client_options=None, + instances=None, + vertex_project=None, + vertex_location=None, **optional_params, ): """ @@ -752,17 +892,198 @@ async def async_streaming( }, ) response = llm_model.predict_streaming_async(prompt, **optional_params) + elif mode == "custom": + from google.cloud import aiplatform + async_client = aiplatform.gapic.PredictionServiceAsyncClient( + client_options=client_options + ) + llm_model = async_client.endpoint_path( + project=vertex_project, location=vertex_location, endpoint=model + ) + + request_str += f"client.predict(endpoint={llm_model}, instances={instances})\n" + ## LOGGING + logging_obj.pre_call( + input=prompt, + api_key=None, + additional_args={ + "complete_input_dict": optional_params, + "request_str": request_str, + }, + ) + + response_obj = await async_client.predict( + endpoint=llm_model, + instances=instances, + ) + response = response_obj.predictions + completion_response = response[0] + if ( + isinstance(completion_response, str) + and "\nOutput:\n" in completion_response + ): + completion_response = completion_response.split("\nOutput:\n", 1)[1] + if "stream" in optional_params and optional_params["stream"] == True: + response = TextStreamer(completion_response) streamwrapper = CustomStreamWrapper( completion_stream=response, model=model, custom_llm_provider="vertex_ai", logging_obj=logging_obj, ) - async for transformed_chunk in streamwrapper: - yield transformed_chunk + return streamwrapper -def embedding(): +def embedding( + model: str, + input: Union[list, str], + api_key: Optional[str] = None, + logging_obj=None, + model_response=None, + optional_params=None, + encoding=None, + vertex_project=None, + vertex_location=None, + aembedding=False, +): # logic for parsing in - calling - parsing out model embedding calls - pass + try: + import vertexai + except: + raise VertexAIError( + status_code=400, + message="vertexai import failed please run `pip install google-cloud-aiplatform`", + ) + + from vertexai.language_models import TextEmbeddingModel + import google.auth + + ## Load credentials with the correct quota project ref: https://github.com/googleapis/python-aiplatform/issues/2557#issuecomment-1709284744 + try: + creds, _ = google.auth.default(quota_project_id=vertex_project) + vertexai.init( + project=vertex_project, location=vertex_location, credentials=creds + ) + except Exception as e: + raise VertexAIError(status_code=401, message=str(e)) + + if isinstance(input, str): + input = [input] + + try: + llm_model = TextEmbeddingModel.from_pretrained(model) + except Exception as e: + raise VertexAIError(status_code=422, message=str(e)) + + if aembedding == True: + return async_embedding( + model=model, + client=llm_model, + input=input, + logging_obj=logging_obj, + model_response=model_response, + optional_params=optional_params, + encoding=encoding, + ) + + request_str = f"""embeddings = llm_model.get_embeddings({input})""" + ## LOGGING PRE-CALL + logging_obj.pre_call( + input=input, + api_key=None, + additional_args={ + "complete_input_dict": optional_params, + "request_str": request_str, + }, + ) + + try: + embeddings = llm_model.get_embeddings(input) + except Exception as e: + raise VertexAIError(status_code=500, message=str(e)) + + ## LOGGING POST-CALL + logging_obj.post_call(input=input, api_key=None, original_response=embeddings) + ## Populate OpenAI compliant dictionary + embedding_response = [] + for idx, embedding in enumerate(embeddings): + embedding_response.append( + { + "object": "embedding", + "index": idx, + "embedding": embedding.values, + } + ) + model_response["object"] = "list" + model_response["data"] = embedding_response + model_response["model"] = model + input_tokens = 0 + + input_str = "".join(input) + + input_tokens += len(encoding.encode(input_str)) + + usage = Usage( + prompt_tokens=input_tokens, completion_tokens=0, total_tokens=input_tokens + ) + model_response.usage = usage + + return model_response + + +async def async_embedding( + model: str, + input: Union[list, str], + logging_obj=None, + model_response=None, + optional_params=None, + encoding=None, + client=None, +): + """ + Async embedding implementation + """ + request_str = f"""embeddings = llm_model.get_embeddings({input})""" + ## LOGGING PRE-CALL + logging_obj.pre_call( + input=input, + api_key=None, + additional_args={ + "complete_input_dict": optional_params, + "request_str": request_str, + }, + ) + + try: + embeddings = await client.get_embeddings_async(input) + except Exception as e: + raise VertexAIError(status_code=500, message=str(e)) + + ## LOGGING POST-CALL + logging_obj.post_call(input=input, api_key=None, original_response=embeddings) + ## Populate OpenAI compliant dictionary + embedding_response = [] + for idx, embedding in enumerate(embeddings): + embedding_response.append( + { + "object": "embedding", + "index": idx, + "embedding": embedding.values, + } + ) + model_response["object"] = "list" + model_response["data"] = embedding_response + model_response["model"] = model + input_tokens = 0 + + input_str = "".join(input) + + input_tokens += len(encoding.encode(input_str)) + + usage = Usage( + prompt_tokens=input_tokens, completion_tokens=0, total_tokens=input_tokens + ) + model_response.usage = usage + + return model_response diff --git a/litellm/main.py b/litellm/main.py index e696c3c6a..2df5de89c 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -15,7 +15,7 @@ import dotenv, traceback, random, asyncio, time, contextvars from copy import deepcopy import httpx import litellm - +from ._logging import verbose_logger from litellm import ( # type: ignore client, exception_type, @@ -83,6 +83,7 @@ from litellm.utils import ( TextCompletionResponse, TextChoices, EmbeddingResponse, + ImageResponse, read_config_args, Choices, Message, @@ -275,14 +276,10 @@ async def acompletion( else: # Call the synchronous function using run_in_executor response = await loop.run_in_executor(None, func_with_context) # type: ignore - # if kwargs.get("stream", False): # return an async generator - # return _async_streaming( - # response=response, - # model=model, - # custom_llm_provider=custom_llm_provider, - # args=args, - # ) - # else: + if isinstance(response, CustomStreamWrapper): + response.set_logging_event_loop( + loop=loop + ) # sets the logging event loop if the user does sync streaming (e.g. on proxy for sagemaker calls) return response except Exception as e: custom_llm_provider = custom_llm_provider or "openai" @@ -345,6 +342,18 @@ def mock_completion( model_response["choices"][0]["message"]["content"] = mock_response model_response["created"] = int(time.time()) model_response["model"] = model + + model_response.usage = Usage( + prompt_tokens=10, completion_tokens=20, total_tokens=30 + ) + + try: + _, custom_llm_provider, _, _ = litellm.utils.get_llm_provider(model=model) + model_response._hidden_params["custom_llm_provider"] = custom_llm_provider + except: + # dont let setting a hidden param block a mock_respose + pass + return model_response except: @@ -444,9 +453,12 @@ def completion( num_retries = kwargs.get("num_retries", None) ## deprecated max_retries = kwargs.get("max_retries", None) context_window_fallback_dict = kwargs.get("context_window_fallback_dict", None) + organization = kwargs.get("organization", None) ### CUSTOM MODEL COST ### input_cost_per_token = kwargs.get("input_cost_per_token", None) output_cost_per_token = kwargs.get("output_cost_per_token", None) + input_cost_per_second = kwargs.get("input_cost_per_second", None) + output_cost_per_second = kwargs.get("output_cost_per_second", None) ### CUSTOM PROMPT TEMPLATE ### initial_prompt_value = kwargs.get("initial_prompt_value", None) roles = kwargs.get("roles", None) @@ -524,6 +536,8 @@ def completion( "tpm", "input_cost_per_token", "output_cost_per_token", + "input_cost_per_second", + "output_cost_per_second", "hf_model_name", "model_info", "proxy_server_request", @@ -536,10 +550,6 @@ def completion( non_default_params = { k: v for k, v in kwargs.items() if k not in default_params } # model-specific params - pass them straight to the model/provider - if mock_response: - return mock_completion( - model, messages, stream=stream, mock_response=mock_response - ) if timeout is None: timeout = ( kwargs.get("request_timeout", None) or 600 @@ -577,15 +587,45 @@ def completion( api_base=api_base, api_key=api_key, ) + if model_response is not None and hasattr(model_response, "_hidden_params"): + model_response._hidden_params["custom_llm_provider"] = custom_llm_provider + model_response._hidden_params["region_name"] = kwargs.get( + "aws_region_name", None + ) # support region-based pricing for bedrock + ### REGISTER CUSTOM MODEL PRICING -- IF GIVEN ### if input_cost_per_token is not None and output_cost_per_token is not None: + print_verbose(f"Registering model={model} in model cost map") litellm.register_model( { + f"{custom_llm_provider}/{model}": { + "input_cost_per_token": input_cost_per_token, + "output_cost_per_token": output_cost_per_token, + "litellm_provider": custom_llm_provider, + }, model: { "input_cost_per_token": input_cost_per_token, "output_cost_per_token": output_cost_per_token, "litellm_provider": custom_llm_provider, - } + }, + } + ) + elif ( + input_cost_per_second is not None + ): # time based pricing just needs cost in place + output_cost_per_second = output_cost_per_second or 0.0 + litellm.register_model( + { + f"{custom_llm_provider}/{model}": { + "input_cost_per_second": input_cost_per_second, + "output_cost_per_second": output_cost_per_second, + "litellm_provider": custom_llm_provider, + }, + model: { + "input_cost_per_second": input_cost_per_second, + "output_cost_per_second": output_cost_per_second, + "litellm_provider": custom_llm_provider, + }, } ) ### BUILD CUSTOM PROMPT TEMPLATE -- IF GIVEN ### @@ -674,6 +714,10 @@ def completion( optional_params=optional_params, litellm_params=litellm_params, ) + if mock_response: + return mock_completion( + model, messages, stream=stream, mock_response=mock_response + ) if custom_llm_provider == "azure": # azure configs api_type = get_secret("AZURE_API_TYPE") or "azure" @@ -692,9 +736,9 @@ def completion( or get_secret("AZURE_API_KEY") ) - azure_ad_token = optional_params.pop("azure_ad_token", None) or get_secret( - "AZURE_AD_TOKEN" - ) + azure_ad_token = optional_params.get("extra_body", {}).pop( + "azure_ad_token", None + ) or get_secret("AZURE_AD_TOKEN") headers = headers or litellm.headers @@ -758,7 +802,8 @@ def completion( or "https://api.openai.com/v1" ) openai.organization = ( - litellm.organization + organization + or litellm.organization or get_secret("OPENAI_ORGANIZATION") or None # default - https://github.com/openai/openai-python/blob/284c1799070c723c6a553337134148a7ab088dd8/openai/util.py#L105 ) @@ -798,6 +843,7 @@ def completion( timeout=timeout, custom_prompt_dict=custom_prompt_dict, client=client, # pass AsyncOpenAI, OpenAI client + organization=organization, ) except Exception as e: ## LOGGING - log the original exception returned @@ -967,6 +1013,7 @@ def completion( encoding=encoding, # for calculating input/output tokens api_key=api_key, logging_obj=logging, + headers=headers, ) if "stream" in optional_params and optional_params["stream"] == True: # don't try to access stream object, @@ -1376,11 +1423,29 @@ def completion( acompletion=acompletion, custom_prompt_dict=custom_prompt_dict, ) + if ( + "stream" in optional_params + and optional_params["stream"] == True + and acompletion == False + ): + response = CustomStreamWrapper( + iter(model_response), + model, + custom_llm_provider="gemini", + logging_obj=logging, + ) + return response response = model_response elif custom_llm_provider == "vertex_ai": - vertex_ai_project = litellm.vertex_project or get_secret("VERTEXAI_PROJECT") - vertex_ai_location = litellm.vertex_location or get_secret( - "VERTEXAI_LOCATION" + vertex_ai_project = ( + optional_params.pop("vertex_ai_project", None) + or litellm.vertex_project + or get_secret("VERTEXAI_PROJECT") + ) + vertex_ai_location = ( + optional_params.pop("vertex_ai_location", None) + or litellm.vertex_location + or get_secret("VERTEXAI_LOCATION") ) model_response = vertex_ai.completion( @@ -1471,19 +1536,22 @@ def completion( if ( "stream" in optional_params and optional_params["stream"] == True ): ## [BETA] - # sagemaker does not support streaming as of now so we're faking streaming: - # https://discuss.huggingface.co/t/streaming-output-text-when-deploying-on-sagemaker/39611 - # "SageMaker is currently not supporting streaming responses." - - # fake streaming for sagemaker print_verbose(f"ENTERS SAGEMAKER CUSTOMSTREAMWRAPPER") - resp_string = model_response["choices"][0]["message"]["content"] + from .llms.sagemaker import TokenIterator + + tokenIterator = TokenIterator(model_response) response = CustomStreamWrapper( - resp_string, - model, + completion_stream=tokenIterator, + model=model, custom_llm_provider="sagemaker", logging_obj=logging, ) + ## LOGGING + logging.post_call( + input=messages, + api_key=None, + original_response=response, + ) return response ## RESPONSE OBJECT @@ -2146,6 +2214,7 @@ async def aembedding(*args, **kwargs): or custom_llm_provider == "deepinfra" or custom_llm_provider == "perplexity" or custom_llm_provider == "ollama" + or custom_llm_provider == "vertex_ai" ): # currently implemented aiohttp calls for just azure and openai, soon all. # Await normally init_response = await loop.run_in_executor(None, func_with_context) @@ -2158,6 +2227,8 @@ async def aembedding(*args, **kwargs): else: # Call the synchronous function using run_in_executor response = await loop.run_in_executor(None, func_with_context) + if response is not None and hasattr(response, "_hidden_params"): + response._hidden_params["custom_llm_provider"] = custom_llm_provider return response except Exception as e: custom_llm_provider = custom_llm_provider or "openai" @@ -2174,6 +2245,7 @@ def embedding( model, input=[], # Optional params + dimensions: Optional[int] = None, timeout=600, # default to 10 minutes # set api_base, api_version, api_key api_base: Optional[str] = None, @@ -2194,6 +2266,7 @@ def embedding( Parameters: - model: The embedding model to use. - input: The input for which embeddings are to be generated. + - dimensions: The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models. - timeout: The timeout value for the API call, default 10 mins - litellm_call_id: The call ID for litellm logging. - litellm_logging_obj: The litellm logging object. @@ -2220,8 +2293,14 @@ def embedding( encoding_format = kwargs.get("encoding_format", None) proxy_server_request = kwargs.get("proxy_server_request", None) aembedding = kwargs.get("aembedding", None) + ### CUSTOM MODEL COST ### + input_cost_per_token = kwargs.get("input_cost_per_token", None) + output_cost_per_token = kwargs.get("output_cost_per_token", None) + input_cost_per_second = kwargs.get("input_cost_per_second", None) + output_cost_per_second = kwargs.get("output_cost_per_second", None) openai_params = [ "user", + "dimensions", "request_timeout", "api_base", "api_version", @@ -2268,6 +2347,8 @@ def embedding( "tpm", "input_cost_per_token", "output_cost_per_token", + "input_cost_per_second", + "output_cost_per_second", "hf_model_name", "proxy_server_request", "model_info", @@ -2288,11 +2369,35 @@ def embedding( api_key=api_key, ) optional_params = get_optional_params_embeddings( + model=model, user=user, + dimensions=dimensions, encoding_format=encoding_format, custom_llm_provider=custom_llm_provider, **non_default_params, ) + ### REGISTER CUSTOM MODEL PRICING -- IF GIVEN ### + if input_cost_per_token is not None and output_cost_per_token is not None: + litellm.register_model( + { + model: { + "input_cost_per_token": input_cost_per_token, + "output_cost_per_token": output_cost_per_token, + "litellm_provider": custom_llm_provider, + } + } + ) + if input_cost_per_second is not None: # time based pricing just needs cost in place + output_cost_per_second = output_cost_per_second or 0.0 + litellm.register_model( + { + model: { + "input_cost_per_second": input_cost_per_second, + "output_cost_per_second": output_cost_per_second, + "litellm_provider": custom_llm_provider, + } + } + ) try: response = None logging = litellm_logging_obj @@ -2385,7 +2490,7 @@ def embedding( client=client, aembedding=aembedding, ) - elif model in litellm.cohere_embedding_models: + elif custom_llm_provider == "cohere": cohere_key = ( api_key or litellm.cohere_key @@ -2427,6 +2532,29 @@ def embedding( optional_params=optional_params, model_response=EmbeddingResponse(), ) + elif custom_llm_provider == "vertex_ai": + vertex_ai_project = ( + optional_params.pop("vertex_ai_project", None) + or litellm.vertex_project + or get_secret("VERTEXAI_PROJECT") + ) + vertex_ai_location = ( + optional_params.pop("vertex_ai_location", None) + or litellm.vertex_location + or get_secret("VERTEXAI_LOCATION") + ) + + response = vertex_ai.embedding( + model=model, + input=input, + encoding=encoding, + logging_obj=logging, + optional_params=optional_params, + model_response=EmbeddingResponse(), + vertex_project=vertex_ai_project, + vertex_location=vertex_ai_location, + aembedding=aembedding, + ) elif custom_llm_provider == "oobabooga": response = oobabooga.embedding( model=model, @@ -2513,6 +2641,8 @@ def embedding( else: args = locals() raise ValueError(f"No valid embedding model args passed in - {args}") + if response is not None and hasattr(response, "_hidden_params"): + response._hidden_params["custom_llm_provider"] = custom_llm_provider return response except Exception as e: ## LOGGING @@ -2523,9 +2653,7 @@ def embedding( ) ## Map to OpenAI Exception raise exception_type( - model=model, - original_exception=e, - custom_llm_provider="azure" if azure == True else None, + model=model, original_exception=e, custom_llm_provider=custom_llm_provider ) @@ -2914,6 +3042,7 @@ def image_generation( else: model = "dall-e-2" custom_llm_provider = "openai" # default to dall-e-2 on openai + model_response._hidden_params["model"] = model openai_params = [ "user", "request_timeout", @@ -2987,7 +3116,7 @@ def image_generation( custom_llm_provider=custom_llm_provider, **non_default_params, ) - logging = litellm_logging_obj + logging: Logging = litellm_logging_obj logging.update_environment_variables( model=model, user=user, @@ -3051,7 +3180,18 @@ def image_generation( model_response=model_response, aimg_generation=aimg_generation, ) - + elif custom_llm_provider == "bedrock": + if model is None: + raise Exception("Model needs to be set for bedrock") + model_response = bedrock.image_generation( + model=model, + prompt=prompt, + timeout=timeout, + logging_obj=litellm_logging_obj, + optional_params=optional_params, + model_response=model_response, + aimg_generation=aimg_generation, + ) return model_response except Exception as e: ## Map to OpenAI Exception @@ -3068,7 +3208,9 @@ def image_generation( async def ahealth_check( model_params: dict, - mode: Optional[Literal["completion", "embedding", "image_generation"]] = None, + mode: Optional[ + Literal["completion", "embedding", "image_generation", "chat"] + ] = None, prompt: Optional[str] = None, input: Optional[List] = None, default_timeout: float = 6000, @@ -3085,8 +3227,11 @@ async def ahealth_check( if model is None: raise Exception("model not set") + if model in litellm.model_cost and mode is None: + mode = litellm.model_cost[model]["mode"] + model, custom_llm_provider, _, _ = get_llm_provider(model=model) - mode = mode or "completion" # default to completion calls + mode = mode or "chat" # default to chat completion calls if custom_llm_provider == "azure": api_key = ( @@ -3126,8 +3271,12 @@ async def ahealth_check( prompt=prompt, input=input, ) - elif custom_llm_provider == "openai": + elif ( + custom_llm_provider == "openai" + or custom_llm_provider == "text-completion-openai" + ): api_key = model_params.get("api_key") or get_secret("OPENAI_API_KEY") + organization = model_params.get("organization") timeout = ( model_params.get("timeout") @@ -3145,8 +3294,12 @@ async def ahealth_check( mode=mode, prompt=prompt, input=input, + organization=organization, ) else: + model_params["cache"] = { + "no-cache": True + } # don't used cached responses for making health check calls if mode == "embedding": model_params.pop("messages", None) model_params["input"] = input @@ -3169,6 +3322,7 @@ async def ahealth_check( ## Set verbose to true -> ```litellm.set_verbose = True``` def print_verbose(print_statement): try: + verbose_logger.debug(print_statement) if litellm.set_verbose: print(print_statement) # noqa except: @@ -3256,7 +3410,23 @@ def stream_chunk_builder_text_completion(chunks: list, messages: Optional[List] return response -def stream_chunk_builder(chunks: list, messages: Optional[list] = None): +def stream_chunk_builder( + chunks: list, messages: Optional[list] = None, start_time=None, end_time=None +): + model_response = litellm.ModelResponse() + ### SORT CHUNKS BASED ON CREATED ORDER ## + print_verbose("Goes into checking if chunk has hiddden created at param") + if chunks[0]._hidden_params.get("created_at", None): + print_verbose("Chunks have a created at hidden param") + # Sort chunks based on created_at in ascending order + chunks = sorted( + chunks, key=lambda x: x._hidden_params.get("created_at", float("inf")) + ) + print_verbose("Chunks sorted") + + # set hidden params from chunk to model_response + if model_response is not None and hasattr(model_response, "_hidden_params"): + model_response._hidden_params = chunks[0].get("_hidden_params", {}) id = chunks[0]["id"] object = chunks[0]["object"] created = chunks[0]["created"] @@ -3427,5 +3597,8 @@ def stream_chunk_builder(chunks: list, messages: Optional[list] = None): response["usage"]["prompt_tokens"] + response["usage"]["completion_tokens"] ) return convert_to_model_response_object( - response_object=response, model_response_object=litellm.ModelResponse() + response_object=response, + model_response_object=model_response, + start_time=start_time, + end_time=end_time, ) diff --git a/litellm/proxy/_experimental/out/404.html b/litellm/proxy/_experimental/out/404.html new file mode 100644 index 000000000..56852eeb1 --- /dev/null +++ b/litellm/proxy/_experimental/out/404.html @@ -0,0 +1 @@ +404: This page could not be found.Create Next App

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_buildManifest.js b/litellm/proxy/_experimental/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_buildManifest.js new file mode 100644 index 000000000..8afb954ad --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_buildManifest.js @@ -0,0 +1 @@ +self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-9a890acb1e81c3fc.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_ssgManifest.js b/litellm/proxy/_experimental/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_ssgManifest.js new file mode 100644 index 000000000..5b3ff592f --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_ssgManifest.js @@ -0,0 +1 @@ +self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/448-cd38799829cf7b57.js b/litellm/proxy/_experimental/out/_next/static/chunks/448-cd38799829cf7b57.js new file mode 100644 index 000000000..6d3d856d8 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/448-cd38799829cf7b57.js @@ -0,0 +1,13 @@ +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[448],{2215:function(e,t,n){n.d(t,{iN:function(){return g},R_:function(){return d}});var r=n(1785),o=n(6991),a=[{index:7,opacity:.15},{index:6,opacity:.25},{index:5,opacity:.3},{index:5,opacity:.45},{index:5,opacity:.65},{index:5,opacity:.85},{index:4,opacity:.9},{index:3,opacity:.95},{index:2,opacity:.97},{index:1,opacity:.98}];function i(e){var t=e.r,n=e.g,o=e.b,a=(0,r.py)(t,n,o);return{h:360*a.h,s:a.s,v:a.v}}function c(e){var t=e.r,n=e.g,o=e.b;return"#".concat((0,r.vq)(t,n,o,!1))}function l(e,t,n){var r;return(r=Math.round(e.h)>=60&&240>=Math.round(e.h)?n?Math.round(e.h)-2*t:Math.round(e.h)+2*t:n?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?r+=360:r>=360&&(r-=360),r}function s(e,t,n){var r;return 0===e.h&&0===e.s?e.s:((r=n?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(r=1),n&&5===t&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2)))}function u(e,t,n){var r;return(r=n?e.v+.05*t:e.v-.15*t)>1&&(r=1),Number(r.toFixed(2))}function d(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=(0,o.uA)(e),d=5;d>0;d-=1){var f=i(r),p=c((0,o.uA)({h:l(f,d,!0),s:s(f,d,!0),v:u(f,d,!0)}));n.push(p)}n.push(c(r));for(var m=1;m<=4;m+=1){var g=i(r),h=c((0,o.uA)({h:l(g,m),s:s(g,m),v:u(g,m)}));n.push(h)}return"dark"===t.theme?a.map(function(e){var r,a,i,l=e.index,s=e.opacity;return c((r=(0,o.uA)(t.backgroundColor||"#141414"),a=(0,o.uA)(n[l]),i=100*s/100,{r:(a.r-r.r)*i+r.r,g:(a.g-r.g)*i+r.g,b:(a.b-r.b)*i+r.b}))}):n}var f={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},p={},m={};Object.keys(f).forEach(function(e){p[e]=d(f[e]),p[e].primary=p[e][5],m[e]=d(f[e],{theme:"dark",backgroundColor:"#141414"}),m[e].primary=m[e][5]}),p.red,p.volcano,p.gold,p.orange,p.yellow,p.lime,p.green,p.cyan;var g=p.blue;p.geekblue,p.purple,p.magenta,p.grey,p.grey},8985:function(e,t,n){n.d(t,{E4:function(){return ez},jG:function(){return R},ks:function(){return B},bf:function(){return L},CI:function(){return eF},fp:function(){return Y},xy:function(){return eT}});var r,o,a=n(833),i=n(406),c=n(3787),l=n(5239),s=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))*1540483477+((t>>>16)*59797<<16),t^=t>>>24,n=(65535&t)*1540483477+((t>>>16)*59797<<16)^(65535&n)*1540483477+((n>>>16)*59797<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n^=255&e.charCodeAt(r),n=(65535&n)*1540483477+((n>>>16)*59797<<16)}return n^=n>>>13,(((n=(65535&n)*1540483477+((n>>>16)*59797<<16))^n>>>15)>>>0).toString(36)},u=n(4050),d=n(4090),f=n.t(d,2);n(1475),n(2536);var p=n(7365),m=n(5127);function g(e){return e.join("%")}var h=function(){function e(t){(0,p.Z)(this,e),(0,a.Z)(this,"instanceId",void 0),(0,a.Z)(this,"cache",new Map),this.instanceId=t}return(0,m.Z)(e,[{key:"get",value:function(e){return this.opGet(g(e))}},{key:"opGet",value:function(e){return this.cache.get(e)||null}},{key:"update",value:function(e,t){return this.opUpdate(g(e),t)}},{key:"opUpdate",value:function(e,t){var n=t(this.cache.get(e));null===n?this.cache.delete(e):this.cache.set(e,n)}}]),e}(),v="data-token-hash",b="data-css-hash",y="__cssinjs_instance__",x=d.createContext({hashPriority:"low",cache:function(){var e=Math.random().toString(12).slice(2);if("undefined"!=typeof document&&document.head&&document.body){var t=document.body.querySelectorAll("style[".concat(b,"]"))||[],n=document.head.firstChild;Array.from(t).forEach(function(t){t[y]=t[y]||e,t[y]===e&&document.head.insertBefore(t,n)});var r={};Array.from(document.querySelectorAll("style[".concat(b,"]"))).forEach(function(t){var n,o=t.getAttribute(b);r[o]?t[y]===e&&(null===(n=t.parentNode)||void 0===n||n.removeChild(t)):r[o]=!0})}return new h(e)}(),defaultCache:!0}),w=n(6976),E=n(2127),C=function(){function e(){(0,p.Z)(this,e),(0,a.Z)(this,"cache",void 0),(0,a.Z)(this,"keys",void 0),(0,a.Z)(this,"cacheCallTimes",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return(0,m.Z)(e,[{key:"size",value:function(){return this.keys.length}},{key:"internalGet",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach(function(e){if(o){var t;o=null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e)}else o=void 0}),null!==(t=o)&&void 0!==t&&t.value&&r&&(o.value[1]=this.cacheCallTimes++),null===(n=o)||void 0===n?void 0:n.value}},{key:"get",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:"has",value:function(e){return!!this.internalGet(e)}},{key:"set",value:function(t,n){var r=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce(function(e,t){var n=(0,i.Z)(e,2)[1];return r.internalGet(t)[1]0,"[Ant Design CSS-in-JS] Theme should have at least one derivative function."),O+=1}return(0,m.Z)(e,[{key:"getDerivativeToken",value:function(e){return this.derivatives.reduce(function(t,n){return n(e,t)},void 0)}}]),e}(),k=new C;function R(e){var t=Array.isArray(e)?e:[e];return k.has(t)||k.set(t,new Z(t)),k.get(t)}var M=new WeakMap,j={},P=new WeakMap;function N(e){var t=P.get(e)||"";return t||(Object.keys(e).forEach(function(n){var r=e[n];t+=n,r instanceof Z?t+=r.id:r&&"object"===(0,w.Z)(r)?t+=N(r):t+=r}),P.set(e,t)),t}function I(e,t){return s("".concat(t,"_").concat(N(e)))}var T="random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,""),A="_bAmBoO_",F=void 0,z=(0,E.Z)();function L(e){return"number"==typeof e?"".concat(e,"px"):e}function _(e,t,n){var r,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(i)return e;var c=(0,l.Z)((0,l.Z)({},o),{},(r={},(0,a.Z)(r,v,t),(0,a.Z)(r,b,n),r)),s=Object.keys(c).map(function(e){var t=c[e];return t?"".concat(e,'="').concat(t,'"'):null}).filter(function(e){return e}).join(" ");return"")}var B=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"--".concat(t?"".concat(t,"-"):"").concat(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},H=function(e,t,n){var r,o={},a={};return Object.entries(e).forEach(function(e){var t=(0,i.Z)(e,2),r=t[0],c=t[1];if(null!=n&&null!==(l=n.preserve)&&void 0!==l&&l[r])a[r]=c;else if(("string"==typeof c||"number"==typeof c)&&!(null!=n&&null!==(s=n.ignore)&&void 0!==s&&s[r])){var l,s,u,d=B(r,null==n?void 0:n.prefix);o[d]="number"!=typeof c||null!=n&&null!==(u=n.unitless)&&void 0!==u&&u[r]?String(c):"".concat(c,"px"),a[r]="var(".concat(d,")")}}),[a,(r={scope:null==n?void 0:n.scope},Object.keys(o).length?".".concat(t).concat(null!=r&&r.scope?".".concat(r.scope):"","{").concat(Object.entries(o).map(function(e){var t=(0,i.Z)(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(r,";")}).join(""),"}"):"")]},D=n(4800),W=(0,l.Z)({},f).useInsertionEffect,V=W?function(e,t,n){return W(function(){return e(),t()},n)}:function(e,t,n){d.useMemo(e,n),(0,D.Z)(function(){return t(!0)},n)},q=void 0!==(0,l.Z)({},f).useInsertionEffect?function(e){var t=[],n=!1;return d.useEffect(function(){return n=!1,function(){n=!0,t.length&&t.forEach(function(e){return e()})}},e),function(e){n||t.push(e)}}:function(){return function(e){e()}};function X(e,t,n,r,o){var a=d.useContext(x).cache,l=g([e].concat((0,c.Z)(t))),s=q([l]),u=function(e){a.opUpdate(l,function(t){var r=(0,i.Z)(t||[void 0,void 0],2),o=r[0],a=[void 0===o?0:o,r[1]||n()];return e?e(a):a})};d.useMemo(function(){u()},[l]);var f=a.opGet(l)[1];return V(function(){null==o||o(f)},function(e){return u(function(t){var n=(0,i.Z)(t,2),r=n[0],a=n[1];return e&&0===r&&(null==o||o(f)),[r+1,a]}),function(){a.opUpdate(l,function(t){var n=(0,i.Z)(t||[],2),o=n[0],c=void 0===o?0:o,u=n[1];return 0==c-1?(s(function(){(e||!a.opGet(l))&&(null==r||r(u,!1))}),null):[c-1,u]})}},[l]),f}var G={},U=new Map,K=function(e,t,n,r){var o=n.getDerivativeToken(e),a=(0,l.Z)((0,l.Z)({},o),t);return r&&(a=r(a)),a},$="token";function Y(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=(0,d.useContext)(x),o=r.cache.instanceId,a=r.container,f=n.salt,p=void 0===f?"":f,m=n.override,g=void 0===m?G:m,h=n.formatToken,w=n.getComputedToken,E=n.cssVar,C=function(e,t){for(var n=M,r=0;r=(U.get(e)||0)}),n.length-r.length>0&&r.forEach(function(e){"undefined"!=typeof document&&document.querySelectorAll("style[".concat(v,'="').concat(e,'"]')).forEach(function(e){if(e[y]===o){var t;null===(t=e.parentNode)||void 0===t||t.removeChild(e)}}),U.delete(e)})},function(e){var t=(0,i.Z)(e,4),n=t[0],r=t[3];if(E&&r){var c=(0,u.hq)(r,s("css-variables-".concat(n._themeKey)),{mark:b,prepend:"queue",attachTo:a,priority:-999});c[y]=o,c.setAttribute(v,n._themeKey)}})}var Q=n(2110),J={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ee="comm",et="rule",en="decl",er=Math.abs,eo=String.fromCharCode;function ea(e,t,n){return e.replace(t,n)}function ei(e,t){return 0|e.charCodeAt(t)}function ec(e,t,n){return e.slice(t,n)}function el(e){return e.length}function es(e,t){return t.push(e),e}function eu(e,t){for(var n="",r=0;r0?p[b]+" "+y:ea(y,/&\f/g,p[b])).trim())&&(l[v++]=x);return eb(e,t,n,0===o?et:c,l,s,u,d)}function eS(e,t,n,r,o){return eb(e,t,n,en,ec(e,0,r),ec(e,r+1,-1),r,o)}var eO="data-ant-cssinjs-cache-path",eZ="_FILE_STYLE__",ek=!0,eR="_multi_value_";function eM(e){var t,n,r;return eu((r=function e(t,n,r,o,a,i,c,l,s){for(var u,d,f,p=0,m=0,g=c,h=0,v=0,b=0,y=1,x=1,w=1,E=0,C="",S=a,O=i,Z=o,k=C;x;)switch(b=E,E=ey()){case 40:if(108!=b&&58==ei(k,g-1)){-1!=(d=k+=ea(eE(E),"&","&\f"),f=er(p?l[p-1]:0),d.indexOf("&\f",f))&&(w=-1);break}case 34:case 39:case 91:k+=eE(E);break;case 9:case 10:case 13:case 32:k+=function(e){for(;eh=ex();)if(eh<33)ey();else break;return ew(e)>2||ew(eh)>3?"":" "}(b);break;case 92:k+=function(e,t){for(var n;--t&&ey()&&!(eh<48)&&!(eh>102)&&(!(eh>57)||!(eh<65))&&(!(eh>70)||!(eh<97)););return n=eg+(t<6&&32==ex()&&32==ey()),ec(ev,e,n)}(eg-1,7);continue;case 47:switch(ex()){case 42:case 47:es(eb(u=function(e,t){for(;ey();)if(e+eh===57)break;else if(e+eh===84&&47===ex())break;return"/*"+ec(ev,t,eg-1)+"*"+eo(47===e?e:ey())}(ey(),eg),n,r,ee,eo(eh),ec(u,2,-2),0,s),s);break;default:k+="/"}break;case 123*y:l[p++]=el(k)*w;case 125*y:case 59:case 0:switch(E){case 0:case 125:x=0;case 59+m:-1==w&&(k=ea(k,/\f/g,"")),v>0&&el(k)-g&&es(v>32?eS(k+";",o,r,g-1,s):eS(ea(k," ","")+";",o,r,g-2,s),s);break;case 59:k+=";";default:if(es(Z=eC(k,n,r,p,m,a,l,C,S=[],O=[],g,i),i),123===E){if(0===m)e(k,n,Z,Z,S,i,g,l,O);else switch(99===h&&110===ei(k,3)?100:h){case 100:case 108:case 109:case 115:e(t,Z,Z,o&&es(eC(t,Z,Z,0,0,a,l,C,a,S=[],g,O),O),a,O,g,l,o?S:O);break;default:e(k,Z,Z,Z,[""],O,0,l,O)}}}p=m=v=0,y=w=1,C=k="",g=c;break;case 58:g=1+el(k),v=b;default:if(y<1){if(123==E)--y;else if(125==E&&0==y++&&125==(eh=eg>0?ei(ev,--eg):0,ep--,10===eh&&(ep=1,ef--),eh))continue}switch(k+=eo(E),E*y){case 38:w=m>0?1:(k+="\f",-1);break;case 44:l[p++]=(el(k)-1)*w,w=1;break;case 64:45===ex()&&(k+=eE(ey())),h=ex(),m=g=el(C=k+=function(e){for(;!ew(ex());)ey();return ec(ev,e,eg)}(eg)),E++;break;case 45:45===b&&2==el(k)&&(y=0)}}return i}("",null,null,null,[""],(n=t=e,ef=ep=1,em=el(ev=n),eg=0,t=[]),0,[0],t),ev="",r),ed).replace(/\{%%%\:[^;];}/g,";")}var ej=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=r.root,a=r.injectHash,s=r.parentSelectors,d=n.hashId,f=n.layer,p=(n.path,n.hashPriority),m=n.transformers,g=void 0===m?[]:m;n.linters;var h="",v={};function b(t){var r=t.getName(d);if(!v[r]){var o=e(t.style,n,{root:!1,parentSelectors:s}),a=(0,i.Z)(o,1)[0];v[r]="@keyframes ".concat(t.getName(d)).concat(a)}}if((function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach(function(t){Array.isArray(t)?e(t,n):t&&n.push(t)}),n})(Array.isArray(t)?t:[t]).forEach(function(t){var r="string"!=typeof t||o?t:{};if("string"==typeof r)h+="".concat(r,"\n");else if(r._keyframe)b(r);else{var u=g.reduce(function(e,t){var n;return(null==t||null===(n=t.visit)||void 0===n?void 0:n.call(t,e))||e},r);Object.keys(u).forEach(function(t){var r=u[t];if("object"!==(0,w.Z)(r)||!r||"animationName"===t&&r._keyframe||"object"===(0,w.Z)(r)&&r&&("_skip_check_"in r||eR in r)){function f(e,t){var n=e.replace(/[A-Z]/g,function(e){return"-".concat(e.toLowerCase())}),r=t;J[e]||"number"!=typeof r||0===r||(r="".concat(r,"px")),"animationName"===e&&null!=t&&t._keyframe&&(b(t),r=t.getName(d)),h+="".concat(n,":").concat(r,";")}var m,g=null!==(m=null==r?void 0:r.value)&&void 0!==m?m:r;"object"===(0,w.Z)(r)&&null!=r&&r[eR]&&Array.isArray(g)?g.forEach(function(e){f(t,e)}):f(t,g)}else{var y=!1,x=t.trim(),E=!1;(o||a)&&d?x.startsWith("@")?y=!0:x=function(e,t,n){if(!t)return e;var r=".".concat(t),o="low"===n?":where(".concat(r,")"):r;return e.split(",").map(function(e){var t,n=e.trim().split(/\s+/),r=n[0]||"",a=(null===(t=r.match(/^\w+/))||void 0===t?void 0:t[0])||"";return[r="".concat(a).concat(o).concat(r.slice(a.length))].concat((0,c.Z)(n.slice(1))).join(" ")}).join(",")}(t,d,p):o&&!d&&("&"===x||""===x)&&(x="",E=!0);var C=e(r,n,{root:E,injectHash:y,parentSelectors:[].concat((0,c.Z)(s),[x])}),S=(0,i.Z)(C,2),O=S[0],Z=S[1];v=(0,l.Z)((0,l.Z)({},v),Z),h+="".concat(x).concat(O)}})}}),o){if(f&&(void 0===F&&(F=function(e,t,n){if((0,E.Z)()){(0,u.hq)(e,T);var r,o,a=document.createElement("div");a.style.position="fixed",a.style.left="0",a.style.top="0",null==t||t(a),document.body.appendChild(a);var i=n?n(a):null===(r=getComputedStyle(a).content)||void 0===r?void 0:r.includes(A);return null===(o=a.parentNode)||void 0===o||o.removeChild(a),(0,u.jL)(T),i}return!1}("@layer ".concat(T," { .").concat(T,' { content: "').concat(A,'"!important; } }'),function(e){e.className=T})),F)){var y=f.split(","),x=y[y.length-1].trim();h="@layer ".concat(x," {").concat(h,"}"),y.length>1&&(h="@layer ".concat(f,"{%%%:%}").concat(h))}}else h="{".concat(h,"}");return[h,v]};function eP(e,t){return s("".concat(e.join("%")).concat(t))}function eN(){return null}var eI="style";function eT(e,t){var n=e.token,o=e.path,l=e.hashId,s=e.layer,f=e.nonce,p=e.clientOnly,m=e.order,g=void 0===m?0:m,h=d.useContext(x),w=h.autoClear,C=(h.mock,h.defaultCache),S=h.hashPriority,O=h.container,Z=h.ssrInline,k=h.transformers,R=h.linters,M=h.cache,j=n._tokenKey,P=[j].concat((0,c.Z)(o)),N=X(eI,P,function(){var e=P.join("|");if(!function(){if(!r&&(r={},(0,E.Z)())){var e,t=document.createElement("div");t.className=eO,t.style.position="fixed",t.style.visibility="hidden",t.style.top="-9999px",document.body.appendChild(t);var n=getComputedStyle(t).content||"";(n=n.replace(/^"/,"").replace(/"$/,"")).split(";").forEach(function(e){var t=e.split(":"),n=(0,i.Z)(t,2),o=n[0],a=n[1];r[o]=a});var o=document.querySelector("style[".concat(eO,"]"));o&&(ek=!1,null===(e=o.parentNode)||void 0===e||e.removeChild(o)),document.body.removeChild(t)}}(),r[e]){var n=function(e){var t=r[e],n=null;if(t&&(0,E.Z)()){if(ek)n=eZ;else{var o=document.querySelector("style[".concat(b,'="').concat(r[e],'"]'));o?n=o.innerHTML:delete r[e]}}return[n,t]}(e),a=(0,i.Z)(n,2),c=a[0],u=a[1];if(c)return[c,j,u,{},p,g]}var d=ej(t(),{hashId:l,hashPriority:S,layer:s,path:o.join("-"),transformers:k,linters:R}),f=(0,i.Z)(d,2),m=f[0],h=f[1],v=eM(m),y=eP(P,v);return[v,j,y,h,p,g]},function(e,t){var n=(0,i.Z)(e,3)[2];(t||w)&&z&&(0,u.jL)(n,{mark:b})},function(e){var t=(0,i.Z)(e,4),n=t[0],r=(t[1],t[2]),o=t[3];if(z&&n!==eZ){var a={mark:b,prepend:"queue",attachTo:O,priority:g},c="function"==typeof f?f():f;c&&(a.csp={nonce:c});var l=(0,u.hq)(n,r,a);l[y]=M.instanceId,l.setAttribute(v,j),Object.keys(o).forEach(function(e){(0,u.hq)(eM(o[e]),"_effect-".concat(e),a)})}}),I=(0,i.Z)(N,3),T=I[0],A=I[1],F=I[2];return function(e){var t,n;return t=Z&&!z&&C?d.createElement("style",(0,Q.Z)({},(n={},(0,a.Z)(n,v,A),(0,a.Z)(n,b,F),n),{dangerouslySetInnerHTML:{__html:T}})):d.createElement(eN,null),d.createElement(d.Fragment,null,t,e)}}var eA="cssVar",eF=function(e,t){var n=e.key,r=e.prefix,o=e.unitless,a=e.ignore,l=e.token,s=e.scope,f=void 0===s?"":s,p=(0,d.useContext)(x),m=p.cache.instanceId,g=p.container,h=l._tokenKey,w=[].concat((0,c.Z)(e.path),[n,f,h]);return X(eA,w,function(){var e=H(t(),n,{prefix:r,unitless:o,ignore:a,scope:f}),c=(0,i.Z)(e,2),l=c[0],s=c[1],u=eP(w,s);return[l,s,u,n]},function(e){var t=(0,i.Z)(e,3)[2];z&&(0,u.jL)(t,{mark:b})},function(e){var t=(0,i.Z)(e,3),r=t[1],o=t[2];if(r){var a=(0,u.hq)(r,o,{mark:b,prepend:"queue",attachTo:g,priority:-999});a[y]=m,a.setAttribute(v,n)}})};o={},(0,a.Z)(o,eI,function(e,t,n){var r=(0,i.Z)(e,6),o=r[0],a=r[1],c=r[2],l=r[3],s=r[4],u=r[5],d=(n||{}).plain;if(s)return null;var f=o,p={"data-rc-order":"prependQueue","data-rc-priority":"".concat(u)};return f=_(o,a,c,p,d),l&&Object.keys(l).forEach(function(e){if(!t[e]){t[e]=!0;var n=eM(l[e]);f+=_(n,a,"_effect-".concat(e),p,d)}}),[u,c,f]}),(0,a.Z)(o,$,function(e,t,n){var r=(0,i.Z)(e,5),o=r[2],a=r[3],c=r[4],l=(n||{}).plain;if(!a)return null;var s=o._tokenKey,u=_(a,c,s,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},l);return[-999,s,u]}),(0,a.Z)(o,eA,function(e,t,n){var r=(0,i.Z)(e,4),o=r[1],a=r[2],c=r[3],l=(n||{}).plain;if(!o)return null;var s=_(o,c,a,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},l);return[-999,a,s]});var ez=function(){function e(t,n){(0,p.Z)(this,e),(0,a.Z)(this,"name",void 0),(0,a.Z)(this,"style",void 0),(0,a.Z)(this,"_keyframe",!0),this.name=t,this.style=n}return(0,m.Z)(e,[{key:"getName",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?"".concat(e,"-").concat(this.name):this.name}}]),e}();function eL(e){return e.notSplit=!0,e}eL(["borderTop","borderBottom"]),eL(["borderTop"]),eL(["borderBottom"]),eL(["borderLeft","borderRight"]),eL(["borderLeft"]),eL(["borderRight"])},688:function(e,t,n){n.d(t,{Z:function(){return R}});var r=n(2110),o=n(406),a=n(833),i=n(6787),c=n(4090),l=n(6480),s=n.n(l),u=n(2215),d=n(7689),f=n(5239),p=n(6976),m=n(4050),g=n(4687),h=n(3850);function v(e){return"object"===(0,p.Z)(e)&&"string"==typeof e.name&&"string"==typeof e.theme&&("object"===(0,p.Z)(e.icon)||"function"==typeof e.icon)}function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce(function(t,n){var r=e[n];return"class"===n?(t.className=r,delete t.class):(delete t[n],t[n.replace(/-(.)/g,function(e,t){return t.toUpperCase()})]=r),t},{})}function y(e){return(0,u.R_)(e)[0]}function x(e){return e?Array.isArray(e)?e:[e]:[]}var w=function(e){var t=(0,c.useContext)(d.Z),n=t.csp,r=t.prefixCls,o="\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";r&&(o=o.replace(/anticon/g,r)),(0,c.useEffect)(function(){var t=e.current,r=(0,g.A)(t);(0,m.hq)(o,"@ant-design-icons",{prepend:!0,csp:n,attachTo:r})},[])},E=["icon","className","onClick","style","primaryColor","secondaryColor"],C={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1},S=function(e){var t,n,r=e.icon,o=e.className,a=e.onClick,l=e.style,s=e.primaryColor,u=e.secondaryColor,d=(0,i.Z)(e,E),p=c.useRef(),m=C;if(s&&(m={primaryColor:s,secondaryColor:u||y(s)}),w(p),t=v(r),n="icon should be icon definiton, but got ".concat(r),(0,h.ZP)(t,"[@ant-design/icons] ".concat(n)),!v(r))return null;var g=r;return g&&"function"==typeof g.icon&&(g=(0,f.Z)((0,f.Z)({},g),{},{icon:g.icon(m.primaryColor,m.secondaryColor)})),function e(t,n,r){return r?c.createElement(t.tag,(0,f.Z)((0,f.Z)({key:n},b(t.attrs)),r),(t.children||[]).map(function(r,o){return e(r,"".concat(n,"-").concat(t.tag,"-").concat(o))})):c.createElement(t.tag,(0,f.Z)({key:n},b(t.attrs)),(t.children||[]).map(function(r,o){return e(r,"".concat(n,"-").concat(t.tag,"-").concat(o))}))}(g.icon,"svg-".concat(g.name),(0,f.Z)((0,f.Z)({className:o,onClick:a,style:l,"data-icon":g.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},d),{},{ref:p}))};function O(e){var t=x(e),n=(0,o.Z)(t,2),r=n[0],a=n[1];return S.setTwoToneColors({primaryColor:r,secondaryColor:a})}S.displayName="IconReact",S.getTwoToneColors=function(){return(0,f.Z)({},C)},S.setTwoToneColors=function(e){var t=e.primaryColor,n=e.secondaryColor;C.primaryColor=t,C.secondaryColor=n||y(t),C.calculated=!!n};var Z=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];O(u.iN.primary);var k=c.forwardRef(function(e,t){var n,l=e.className,u=e.icon,f=e.spin,p=e.rotate,m=e.tabIndex,g=e.onClick,h=e.twoToneColor,v=(0,i.Z)(e,Z),b=c.useContext(d.Z),y=b.prefixCls,w=void 0===y?"anticon":y,E=b.rootClassName,C=s()(E,w,(n={},(0,a.Z)(n,"".concat(w,"-").concat(u.name),!!u.name),(0,a.Z)(n,"".concat(w,"-spin"),!!f||"loading"===u.name),n),l),O=m;void 0===O&&g&&(O=-1);var k=x(h),R=(0,o.Z)(k,2),M=R[0],j=R[1];return c.createElement("span",(0,r.Z)({role:"img","aria-label":u.name},v,{ref:t,tabIndex:O,onClick:g,className:C}),c.createElement(S,{icon:u,primaryColor:M,secondaryColor:j,style:p?{msTransform:"rotate(".concat(p,"deg)"),transform:"rotate(".concat(p,"deg)")}:void 0}))});k.displayName="AntdIcon",k.getTwoToneColor=function(){var e=S.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},k.setTwoToneColor=O;var R=k},7689:function(e,t,n){var r=(0,n(4090).createContext)({});t.Z=r},9537:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},7136:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},1183:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},383:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},653:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},388:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},9334:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},6871:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}}]},name:"search",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},1785:function(e,t,n){n.d(t,{T6:function(){return f},VD:function(){return p},WE:function(){return s},Yt:function(){return m},lC:function(){return a},py:function(){return l},rW:function(){return o},s:function(){return d},ve:function(){return c},vq:function(){return u}});var r=n(7974);function o(e,t,n){return{r:255*(0,r.sh)(e,255),g:255*(0,r.sh)(t,255),b:255*(0,r.sh)(n,255)}}function a(e,t,n){var o=Math.max(e=(0,r.sh)(e,255),t=(0,r.sh)(t,255),n=(0,r.sh)(n,255)),a=Math.min(e,t,n),i=0,c=0,l=(o+a)/2;if(o===a)c=0,i=0;else{var s=o-a;switch(c=l>.5?s/(2-o-a):s/(o+a),o){case e:i=(t-n)/s+(t1&&(n-=1),n<1/6)?e+6*n*(t-e):n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function c(e,t,n){if(e=(0,r.sh)(e,360),t=(0,r.sh)(t,100),n=(0,r.sh)(n,100),0===t)a=n,c=n,o=n;else{var o,a,c,l=n<.5?n*(1+t):n+t-n*t,s=2*n-l;o=i(s,l,e+1/3),a=i(s,l,e),c=i(s,l,e-1/3)}return{r:255*o,g:255*a,b:255*c}}function l(e,t,n){var o=Math.max(e=(0,r.sh)(e,255),t=(0,r.sh)(t,255),n=(0,r.sh)(n,255)),a=Math.min(e,t,n),i=0,c=o-a;if(o===a)i=0;else{switch(o){case e:i=(t-n)/c+(t>16,g:(65280&e)>>8,b:255&e}}},6564:function(e,t,n){n.d(t,{R:function(){return r}});var r={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}},6991:function(e,t,n){n.d(t,{uA:function(){return i}});var r=n(1785),o=n(6564),a=n(7974);function i(e){var t={r:0,g:0,b:0},n=1,i=null,c=null,l=null,s=!1,f=!1;return"string"==typeof e&&(e=function(e){if(0===(e=e.trim().toLowerCase()).length)return!1;var t=!1;if(o.R[e])e=o.R[e],t=!0;else if("transparent"===e)return{r:0,g:0,b:0,a:0,format:"name"};var n=u.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=u.rgba.exec(e))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=u.hsl.exec(e))?{h:n[1],s:n[2],l:n[3]}:(n=u.hsla.exec(e))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=u.hsv.exec(e))?{h:n[1],s:n[2],v:n[3]}:(n=u.hsva.exec(e))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=u.hex8.exec(e))?{r:(0,r.VD)(n[1]),g:(0,r.VD)(n[2]),b:(0,r.VD)(n[3]),a:(0,r.T6)(n[4]),format:t?"name":"hex8"}:(n=u.hex6.exec(e))?{r:(0,r.VD)(n[1]),g:(0,r.VD)(n[2]),b:(0,r.VD)(n[3]),format:t?"name":"hex"}:(n=u.hex4.exec(e))?{r:(0,r.VD)(n[1]+n[1]),g:(0,r.VD)(n[2]+n[2]),b:(0,r.VD)(n[3]+n[3]),a:(0,r.T6)(n[4]+n[4]),format:t?"name":"hex8"}:!!(n=u.hex3.exec(e))&&{r:(0,r.VD)(n[1]+n[1]),g:(0,r.VD)(n[2]+n[2]),b:(0,r.VD)(n[3]+n[3]),format:t?"name":"hex"}}(e)),"object"==typeof e&&(d(e.r)&&d(e.g)&&d(e.b)?(t=(0,r.rW)(e.r,e.g,e.b),s=!0,f="%"===String(e.r).substr(-1)?"prgb":"rgb"):d(e.h)&&d(e.s)&&d(e.v)?(i=(0,a.JX)(e.s),c=(0,a.JX)(e.v),t=(0,r.WE)(e.h,i,c),s=!0,f="hsv"):d(e.h)&&d(e.s)&&d(e.l)&&(i=(0,a.JX)(e.s),l=(0,a.JX)(e.l),t=(0,r.ve)(e.h,i,l),s=!0,f="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=(0,a.Yq)(n),{ok:s,format:e.format||f,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}var c="(?:".concat("[-\\+]?\\d*\\.\\d+%?",")|(?:").concat("[-\\+]?\\d+%?",")"),l="[\\s|\\(]+(".concat(c,")[,|\\s]+(").concat(c,")[,|\\s]+(").concat(c,")\\s*\\)?"),s="[\\s|\\(]+(".concat(c,")[,|\\s]+(").concat(c,")[,|\\s]+(").concat(c,")[,|\\s]+(").concat(c,")\\s*\\)?"),u={CSS_UNIT:new RegExp(c),rgb:RegExp("rgb"+l),rgba:RegExp("rgba"+s),hsl:RegExp("hsl"+l),hsla:RegExp("hsla"+s),hsv:RegExp("hsv"+l),hsva:RegExp("hsva"+s),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function d(e){return!!u.CSS_UNIT.exec(String(e))}},6336:function(e,t,n){n.d(t,{C:function(){return c}});var r=n(1785),o=n(6564),a=n(6991),i=n(7974),c=function(){function e(t,n){if(void 0===t&&(t=""),void 0===n&&(n={}),t instanceof e)return t;"number"==typeof t&&(t=(0,r.Yt)(t)),this.originalInput=t;var o,i=(0,a.uA)(t);this.originalInput=t,this.r=i.r,this.g=i.g,this.b=i.b,this.a=i.a,this.roundA=Math.round(100*this.a)/100,this.format=null!==(o=n.format)&&void 0!==o?o:i.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=i.ok}return e.prototype.isDark=function(){return 128>this.getBrightness()},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},e.prototype.getLuminance=function(){var e=this.toRgb(),t=e.r/255,n=e.g/255,r=e.b/255;return .2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(e){return this.a=(0,i.Yq)(e),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){return 0===this.toHsl().s},e.prototype.toHsv=function(){var e=(0,r.py)(this.r,this.g,this.b);return{h:360*e.h,s:e.s,v:e.v,a:this.a}},e.prototype.toHsvString=function(){var e=(0,r.py)(this.r,this.g,this.b),t=Math.round(360*e.h),n=Math.round(100*e.s),o=Math.round(100*e.v);return 1===this.a?"hsv(".concat(t,", ").concat(n,"%, ").concat(o,"%)"):"hsva(".concat(t,", ").concat(n,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var e=(0,r.lC)(this.r,this.g,this.b);return{h:360*e.h,s:e.s,l:e.l,a:this.a}},e.prototype.toHslString=function(){var e=(0,r.lC)(this.r,this.g,this.b),t=Math.round(360*e.h),n=Math.round(100*e.s),o=Math.round(100*e.l);return 1===this.a?"hsl(".concat(t,", ").concat(n,"%, ").concat(o,"%)"):"hsla(".concat(t,", ").concat(n,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(e){return void 0===e&&(e=!1),(0,r.vq)(this.r,this.g,this.b,e)},e.prototype.toHexString=function(e){return void 0===e&&(e=!1),"#"+this.toHex(e)},e.prototype.toHex8=function(e){return void 0===e&&(e=!1),(0,r.s)(this.r,this.g,this.b,this.a,e)},e.prototype.toHex8String=function(e){return void 0===e&&(e=!1),"#"+this.toHex8(e)},e.prototype.toHexShortString=function(e){return void 0===e&&(e=!1),1===this.a?this.toHexString(e):this.toHex8String(e)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var e=Math.round(this.r),t=Math.round(this.g),n=Math.round(this.b);return 1===this.a?"rgb(".concat(e,", ").concat(t,", ").concat(n,")"):"rgba(".concat(e,", ").concat(t,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var e=function(e){return"".concat(Math.round(100*(0,i.sh)(e,255)),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var e=function(e){return Math.round(100*(0,i.sh)(e,255))};return 1===this.a?"rgb(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%)"):"rgba(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(0===this.a)return"transparent";if(this.a<1)return!1;for(var e="#"+(0,r.vq)(this.r,this.g,this.b,!1),t=0,n=Object.entries(o.R);t=0;return!t&&r&&(e.startsWith("hex")||"name"===e)?"name"===e&&0===this.a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),("hex"===e||"hex6"===e)&&(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.l+=t/100,n.l=(0,i.V2)(n.l),new e(n)},e.prototype.brighten=function(t){void 0===t&&(t=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(-(t/100*255)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(-(t/100*255)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(-(t/100*255)))),new e(n)},e.prototype.darken=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.l-=t/100,n.l=(0,i.V2)(n.l),new e(n)},e.prototype.tint=function(e){return void 0===e&&(e=10),this.mix("white",e)},e.prototype.shade=function(e){return void 0===e&&(e=10),this.mix("black",e)},e.prototype.desaturate=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.s-=t/100,n.s=(0,i.V2)(n.s),new e(n)},e.prototype.saturate=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.s+=t/100,n.s=(0,i.V2)(n.s),new e(n)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var n=this.toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,new e(n)},e.prototype.mix=function(t,n){void 0===n&&(n=50);var r=this.toRgb(),o=new e(t).toRgb(),a=n/100;return new e({r:(o.r-r.r)*a+r.r,g:(o.g-r.g)*a+r.g,b:(o.b-r.b)*a+r.b,a:(o.a-r.a)*a+r.a})},e.prototype.analogous=function(t,n){void 0===t&&(t=6),void 0===n&&(n=30);var r=this.toHsl(),o=360/n,a=[this];for(r.h=(r.h-(o*t>>1)+720)%360;--t;)r.h=(r.h+o)%360,a.push(new e(r));return a},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){void 0===t&&(t=6);for(var n=this.toHsv(),r=n.h,o=n.s,a=n.v,i=[],c=1/t;t--;)i.push(new e({h:r,s:o,v:a})),a=(a+c)%1;return i},e.prototype.splitcomplement=function(){var t=this.toHsl(),n=t.h;return[this,new e({h:(n+72)%360,s:t.s,l:t.l}),new e({h:(n+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var n=this.toRgb(),r=new e(t).toRgb(),o=n.a+r.a*(1-n.a);return new e({r:(n.r*n.a+r.r*r.a*(1-n.a))/o,g:(n.g*n.a+r.g*r.a*(1-n.a))/o,b:(n.b*n.a+r.b*r.a*(1-n.a))/o,a:o})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var n=this.toHsl(),r=n.h,o=[this],a=360/t,i=1;iMath.abs(e-t))?1:e=360===t?(e<0?e%t+t:e%t)/parseFloat(String(t)):e%t/parseFloat(String(t))}function o(e){return Math.min(1,Math.max(0,e))}function a(e){return(isNaN(e=parseFloat(e))||e<0||e>1)&&(e=1),e}function i(e){return e<=1?"".concat(100*Number(e),"%"):e}function c(e){return 1===e.length?"0"+e:String(e)}n.d(t,{FZ:function(){return c},JX:function(){return i},V2:function(){return o},Yq:function(){return a},sh:function(){return r}})},8804:function(e,t,n){n.d(t,{Z:function(){return y}});var r,o=n(406),a=n(4090),i=n(9542),c=n(2127);n(3850);var l=n(4084),s=a.createContext(null),u=n(3787),d=n(4800),f=[],p=n(4050);function m(e){var t=e.match(/^(.*)px$/),n=Number(null==t?void 0:t[1]);return Number.isNaN(n)?function(e){if("undefined"==typeof document)return 0;if(void 0===r){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var n=document.createElement("div"),o=n.style;o.position="absolute",o.top="0",o.left="0",o.pointerEvents="none",o.visibility="hidden",o.width="200px",o.height="150px",o.overflow="hidden",n.appendChild(t),document.body.appendChild(n);var a=t.offsetWidth;n.style.overflow="scroll";var i=t.offsetWidth;a===i&&(i=n.clientWidth),document.body.removeChild(n),r=a-i}return r}():n}var g="rc-util-locker-".concat(Date.now()),h=0,v=!1,b=function(e){return!1!==e&&((0,c.Z)()&&e?"string"==typeof e?document.querySelector(e):"function"==typeof e?e():e:null)},y=a.forwardRef(function(e,t){var n,r,y,x,w=e.open,E=e.autoLock,C=e.getContainer,S=(e.debug,e.autoDestroy),O=void 0===S||S,Z=e.children,k=a.useState(w),R=(0,o.Z)(k,2),M=R[0],j=R[1],P=M||w;a.useEffect(function(){(O||w)&&j(w)},[w,O]);var N=a.useState(function(){return b(C)}),I=(0,o.Z)(N,2),T=I[0],A=I[1];a.useEffect(function(){var e=b(C);A(null!=e?e:null)});var F=function(e,t){var n=a.useState(function(){return(0,c.Z)()?document.createElement("div"):null}),r=(0,o.Z)(n,1)[0],i=a.useRef(!1),l=a.useContext(s),p=a.useState(f),m=(0,o.Z)(p,2),g=m[0],h=m[1],v=l||(i.current?void 0:function(e){h(function(t){return[e].concat((0,u.Z)(t))})});function b(){r.parentElement||document.body.appendChild(r),i.current=!0}function y(){var e;null===(e=r.parentElement)||void 0===e||e.removeChild(r),i.current=!1}return(0,d.Z)(function(){return e?l?l(b):b():y(),y},[e]),(0,d.Z)(function(){g.length&&(g.forEach(function(e){return e()}),h(f))},[g]),[r,v]}(P&&!T,0),z=(0,o.Z)(F,2),L=z[0],_=z[1],B=null!=T?T:L;n=!!(E&&w&&(0,c.Z)()&&(B===L||B===document.body)),r=a.useState(function(){return h+=1,"".concat(g,"_").concat(h)}),y=(0,o.Z)(r,1)[0],(0,d.Z)(function(){if(n){var e=function(e){if("undefined"==typeof document||!e||!(e instanceof Element))return{width:0,height:0};var t=getComputedStyle(e,"::-webkit-scrollbar"),n=t.width,r=t.height;return{width:m(n),height:m(r)}}(document.body).width,t=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;(0,p.hq)("\nhtml body {\n overflow-y: hidden;\n ".concat(t?"width: calc(100% - ".concat(e,"px);"):"","\n}"),y)}else(0,p.jL)(y);return function(){(0,p.jL)(y)}},[n,y]);var H=null;Z&&(0,l.Yr)(Z)&&t&&(H=Z.ref);var D=(0,l.x1)(H,t);if(!P||!(0,c.Z)()||void 0===T)return null;var W=!1===B||("boolean"==typeof x&&(v=x),v),V=Z;return t&&(V=a.cloneElement(Z,{ref:D})),a.createElement(s.Provider,{value:_},W?V:(0,i.createPortal)(V,B))})},1737:function(e,t,n){n.d(t,{Z:function(){return D}});var r=n(5239),o=n(406),a=n(6787),i=n(8804),c=n(6480),l=n.n(c),s=n(6505),u=n(7472),d=n(4687),f=n(4811),p=n(1010),m=n(4800),g=n(6158),h=n(4090),v=n(2110),b=n(9367),y=n(4084);function x(e){var t=e.prefixCls,n=e.align,r=e.arrow,o=e.arrowPos,a=r||{},i=a.className,c=a.content,s=o.x,u=o.y,d=h.useRef();if(!n||!n.points)return null;var f={position:"absolute"};if(!1!==n.autoArrow){var p=n.points[0],m=n.points[1],g=p[0],v=p[1],b=m[0],y=m[1];g!==b&&["t","b"].includes(g)?"t"===g?f.top=0:f.bottom=0:f.top=void 0===u?0:u,v!==y&&["l","r"].includes(v)?"l"===v?f.left=0:f.right=0:f.left=void 0===s?0:s}return h.createElement("div",{ref:d,className:l()("".concat(t,"-arrow"),i),style:f},c)}function w(e){var t=e.prefixCls,n=e.open,r=e.zIndex,o=e.mask,a=e.motion;return o?h.createElement(b.ZP,(0,v.Z)({},a,{motionAppear:!0,visible:n,removeOnLeave:!0}),function(e){var n=e.className;return h.createElement("div",{style:{zIndex:r},className:l()("".concat(t,"-mask"),n)})}):null}var E=h.memo(function(e){return e.children},function(e,t){return t.cache}),C=h.forwardRef(function(e,t){var n=e.popup,a=e.className,i=e.prefixCls,c=e.style,u=e.target,d=e.onVisibleChanged,f=e.open,p=e.keepDom,g=e.fresh,C=e.onClick,S=e.mask,O=e.arrow,Z=e.arrowPos,k=e.align,R=e.motion,M=e.maskMotion,j=e.forceRender,P=e.getPopupContainer,N=e.autoDestroy,I=e.portal,T=e.zIndex,A=e.onMouseEnter,F=e.onMouseLeave,z=e.onPointerEnter,L=e.ready,_=e.offsetX,B=e.offsetY,H=e.offsetR,D=e.offsetB,W=e.onAlign,V=e.onPrepare,q=e.stretch,X=e.targetWidth,G=e.targetHeight,U="function"==typeof n?n():n,K=f||p,$=(null==P?void 0:P.length)>0,Y=h.useState(!P||!$),Q=(0,o.Z)(Y,2),J=Q[0],ee=Q[1];if((0,m.Z)(function(){!J&&$&&u&&ee(!0)},[J,$,u]),!J)return null;var et="auto",en={left:"-1000vw",top:"-1000vh",right:et,bottom:et};if(L||!f){var er,eo=k.points,ea=k.dynamicInset||(null===(er=k._experimental)||void 0===er?void 0:er.dynamicInset),ei=ea&&"r"===eo[0][1],ec=ea&&"b"===eo[0][0];ei?(en.right=H,en.left=et):(en.left=_,en.right=et),ec?(en.bottom=D,en.top=et):(en.top=B,en.bottom=et)}var el={};return q&&(q.includes("height")&&G?el.height=G:q.includes("minHeight")&&G&&(el.minHeight=G),q.includes("width")&&X?el.width=X:q.includes("minWidth")&&X&&(el.minWidth=X)),f||(el.pointerEvents="none"),h.createElement(I,{open:j||K,getContainer:P&&function(){return P(u)},autoDestroy:N},h.createElement(w,{prefixCls:i,open:f,zIndex:T,mask:S,motion:M}),h.createElement(s.Z,{onResize:W,disabled:!f},function(e){return h.createElement(b.ZP,(0,v.Z)({motionAppear:!0,motionEnter:!0,motionLeave:!0,removeOnLeave:!1,forceRender:j,leavedClassName:"".concat(i,"-hidden")},R,{onAppearPrepare:V,onEnterPrepare:V,visible:f,onVisibleChanged:function(e){var t;null==R||null===(t=R.onVisibleChanged)||void 0===t||t.call(R,e),d(e)}}),function(n,o){var s=n.className,u=n.style,d=l()(i,s,a);return h.createElement("div",{ref:(0,y.sQ)(e,t,o),className:d,style:(0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({"--arrow-x":"".concat(Z.x||0,"px"),"--arrow-y":"".concat(Z.y||0,"px")},en),el),u),{},{boxSizing:"border-box",zIndex:T},c),onMouseEnter:A,onMouseLeave:F,onPointerEnter:z,onClick:C},O&&h.createElement(x,{prefixCls:i,arrow:O,arrowPos:Z,align:k}),h.createElement(E,{cache:!f&&!g},U))})}))}),S=h.forwardRef(function(e,t){var n=e.children,r=e.getTriggerDOMNode,o=(0,y.Yr)(n),a=h.useCallback(function(e){(0,y.mH)(t,r?r(e):e)},[r]),i=(0,y.x1)(a,n.ref);return o?h.cloneElement(n,{ref:i}):n}),O=h.createContext(null);function Z(e){return e?Array.isArray(e)?e:[e]:[]}var k=n(3193);function R(e,t,n,r){return t||(n?{motionName:"".concat(e,"-").concat(n)}:r?{motionName:r}:null)}function M(e){return e.ownerDocument.defaultView}function j(e){for(var t=[],n=null==e?void 0:e.parentElement,r=["hidden","scroll","clip","auto"];n;){var o=M(n).getComputedStyle(n);[o.overflowX,o.overflowY,o.overflow].some(function(e){return r.includes(e)})&&t.push(n),n=n.parentElement}return t}function P(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Number.isNaN(e)?t:e}function N(e){return P(parseFloat(e),0)}function I(e,t){var n=(0,r.Z)({},e);return(t||[]).forEach(function(e){if(!(e instanceof HTMLBodyElement||e instanceof HTMLHtmlElement)){var t=M(e).getComputedStyle(e),r=t.overflow,o=t.overflowClipMargin,a=t.borderTopWidth,i=t.borderBottomWidth,c=t.borderLeftWidth,l=t.borderRightWidth,s=e.getBoundingClientRect(),u=e.offsetHeight,d=e.clientHeight,f=e.offsetWidth,p=e.clientWidth,m=N(a),g=N(i),h=N(c),v=N(l),b=P(Math.round(s.width/f*1e3)/1e3),y=P(Math.round(s.height/u*1e3)/1e3),x=m*y,w=h*b,E=0,C=0;if("clip"===r){var S=N(o);E=S*b,C=S*y}var O=s.x+w-E,Z=s.y+x-C,k=O+s.width+2*E-w-v*b-(f-p-h-v)*b,R=Z+s.height+2*C-x-g*y-(u-d-m-g)*y;n.left=Math.max(n.left,O),n.top=Math.max(n.top,Z),n.right=Math.min(n.right,k),n.bottom=Math.min(n.bottom,R)}}),n}function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n="".concat(t),r=n.match(/^(.*)\%$/);return r?parseFloat(r[1])/100*e:parseFloat(n)}function A(e,t){var n=(0,o.Z)(t||[],2),r=n[0],a=n[1];return[T(e.width,r),T(e.height,a)]}function F(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return[e[0],e[1]]}function z(e,t){var n,r=t[0],o=t[1];return n="t"===r?e.y:"b"===r?e.y+e.height:e.y+e.height/2,{x:"l"===o?e.x:"r"===o?e.x+e.width:e.x+e.width/2,y:n}}function L(e,t){var n={t:"b",b:"t",l:"r",r:"l"};return e.map(function(e,r){return r===t?n[e]||"c":e}).join("")}var _=n(3787);n(3850);var B=n(9223),H=["prefixCls","children","action","showAction","hideAction","popupVisible","defaultPopupVisible","onPopupVisibleChange","afterPopupVisibleChange","mouseEnterDelay","mouseLeaveDelay","focusDelay","blurDelay","mask","maskClosable","getPopupContainer","forceRender","autoDestroy","destroyPopupOnHide","popup","popupClassName","popupStyle","popupPlacement","builtinPlacements","popupAlign","zIndex","stretch","getPopupClassNameFromAlign","fresh","alignPoint","onPopupClick","onPopupAlign","arrow","popupMotion","maskMotion","popupTransitionName","popupAnimation","maskTransitionName","maskAnimation","className","getTriggerDOMNode"],D=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.Z;return h.forwardRef(function(t,n){var i,c,v,b,y,x,w,E,N,T,D,W,V,q,X,G,U,K=t.prefixCls,$=void 0===K?"rc-trigger-popup":K,Y=t.children,Q=t.action,J=t.showAction,ee=t.hideAction,et=t.popupVisible,en=t.defaultPopupVisible,er=t.onPopupVisibleChange,eo=t.afterPopupVisibleChange,ea=t.mouseEnterDelay,ei=t.mouseLeaveDelay,ec=void 0===ei?.1:ei,el=t.focusDelay,es=t.blurDelay,eu=t.mask,ed=t.maskClosable,ef=t.getPopupContainer,ep=t.forceRender,em=t.autoDestroy,eg=t.destroyPopupOnHide,eh=t.popup,ev=t.popupClassName,eb=t.popupStyle,ey=t.popupPlacement,ex=t.builtinPlacements,ew=void 0===ex?{}:ex,eE=t.popupAlign,eC=t.zIndex,eS=t.stretch,eO=t.getPopupClassNameFromAlign,eZ=t.fresh,ek=t.alignPoint,eR=t.onPopupClick,eM=t.onPopupAlign,ej=t.arrow,eP=t.popupMotion,eN=t.maskMotion,eI=t.popupTransitionName,eT=t.popupAnimation,eA=t.maskTransitionName,eF=t.maskAnimation,ez=t.className,eL=t.getTriggerDOMNode,e_=(0,a.Z)(t,H),eB=h.useState(!1),eH=(0,o.Z)(eB,2),eD=eH[0],eW=eH[1];(0,m.Z)(function(){eW((0,g.Z)())},[]);var eV=h.useRef({}),eq=h.useContext(O),eX=h.useMemo(function(){return{registerSubPopup:function(e,t){eV.current[e]=t,null==eq||eq.registerSubPopup(e,t)}}},[eq]),eG=(0,p.Z)(),eU=h.useState(null),eK=(0,o.Z)(eU,2),e$=eK[0],eY=eK[1],eQ=(0,f.Z)(function(e){(0,u.S)(e)&&e$!==e&&eY(e),null==eq||eq.registerSubPopup(eG,e)}),eJ=h.useState(null),e0=(0,o.Z)(eJ,2),e1=e0[0],e2=e0[1],e4=h.useRef(null),e5=(0,f.Z)(function(e){(0,u.S)(e)&&e1!==e&&(e2(e),e4.current=e)}),e3=h.Children.only(Y),e6=(null==e3?void 0:e3.props)||{},e8={},e9=(0,f.Z)(function(e){var t,n;return(null==e1?void 0:e1.contains(e))||(null===(t=(0,d.A)(e1))||void 0===t?void 0:t.host)===e||e===e1||(null==e$?void 0:e$.contains(e))||(null===(n=(0,d.A)(e$))||void 0===n?void 0:n.host)===e||e===e$||Object.values(eV.current).some(function(t){return(null==t?void 0:t.contains(e))||e===t})}),e7=R($,eP,eT,eI),te=R($,eN,eF,eA),tt=h.useState(en||!1),tn=(0,o.Z)(tt,2),tr=tn[0],to=tn[1],ta=null!=et?et:tr,ti=(0,f.Z)(function(e){void 0===et&&to(e)});(0,m.Z)(function(){to(et||!1)},[et]);var tc=h.useRef(ta);tc.current=ta;var tl=h.useRef([]);tl.current=[];var ts=(0,f.Z)(function(e){var t;ti(e),(null!==(t=tl.current[tl.current.length-1])&&void 0!==t?t:ta)!==e&&(tl.current.push(e),null==er||er(e))}),tu=h.useRef(),td=function(){clearTimeout(tu.current)},tf=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;td(),0===t?ts(e):tu.current=setTimeout(function(){ts(e)},1e3*t)};h.useEffect(function(){return td},[]);var tp=h.useState(!1),tm=(0,o.Z)(tp,2),tg=tm[0],th=tm[1];(0,m.Z)(function(e){(!e||ta)&&th(!0)},[ta]);var tv=h.useState(null),tb=(0,o.Z)(tv,2),ty=tb[0],tx=tb[1],tw=h.useState([0,0]),tE=(0,o.Z)(tw,2),tC=tE[0],tS=tE[1],tO=function(e){tS([e.clientX,e.clientY])},tZ=(i=ek?tC:e1,c=h.useState({ready:!1,offsetX:0,offsetY:0,offsetR:0,offsetB:0,arrowX:0,arrowY:0,scaleX:1,scaleY:1,align:ew[ey]||{}}),b=(v=(0,o.Z)(c,2))[0],y=v[1],x=h.useRef(0),w=h.useMemo(function(){return e$?j(e$):[]},[e$]),E=h.useRef({}),ta||(E.current={}),N=(0,f.Z)(function(){if(e$&&i&&ta){var e,t,n,a,c,l,s,d=e$.ownerDocument,f=M(e$).getComputedStyle(e$),p=f.width,m=f.height,g=f.position,h=e$.style.left,v=e$.style.top,b=e$.style.right,x=e$.style.bottom,C=e$.style.overflow,S=(0,r.Z)((0,r.Z)({},ew[ey]),eE),O=d.createElement("div");if(null===(e=e$.parentElement)||void 0===e||e.appendChild(O),O.style.left="".concat(e$.offsetLeft,"px"),O.style.top="".concat(e$.offsetTop,"px"),O.style.position=g,O.style.height="".concat(e$.offsetHeight,"px"),O.style.width="".concat(e$.offsetWidth,"px"),e$.style.left="0",e$.style.top="0",e$.style.right="auto",e$.style.bottom="auto",e$.style.overflow="hidden",Array.isArray(i))n={x:i[0],y:i[1],width:0,height:0};else{var Z=i.getBoundingClientRect();n={x:Z.x,y:Z.y,width:Z.width,height:Z.height}}var R=e$.getBoundingClientRect(),j=d.documentElement,N=j.clientWidth,T=j.clientHeight,_=j.scrollWidth,B=j.scrollHeight,H=j.scrollTop,D=j.scrollLeft,W=R.height,V=R.width,q=n.height,X=n.width,G=S.htmlRegion,U="visible",K="visibleFirst";"scroll"!==G&&G!==K&&(G=U);var $=G===K,Y=I({left:-D,top:-H,right:_-D,bottom:B-H},w),Q=I({left:0,top:0,right:N,bottom:T},w),J=G===U?Q:Y,ee=$?Q:J;e$.style.left="auto",e$.style.top="auto",e$.style.right="0",e$.style.bottom="0";var et=e$.getBoundingClientRect();e$.style.left=h,e$.style.top=v,e$.style.right=b,e$.style.bottom=x,e$.style.overflow=C,null===(t=e$.parentElement)||void 0===t||t.removeChild(O);var en=P(Math.round(V/parseFloat(p)*1e3)/1e3),er=P(Math.round(W/parseFloat(m)*1e3)/1e3);if(!(0===en||0===er||(0,u.S)(i)&&!(0,k.Z)(i))){var eo=S.offset,ea=S.targetOffset,ei=A(R,eo),ec=(0,o.Z)(ei,2),el=ec[0],es=ec[1],eu=A(n,ea),ed=(0,o.Z)(eu,2),ef=ed[0],ep=ed[1];n.x-=ef,n.y-=ep;var em=S.points||[],eg=(0,o.Z)(em,2),eh=eg[0],ev=F(eg[1]),eb=F(eh),ex=z(n,ev),eC=z(R,eb),eS=(0,r.Z)({},S),eO=ex.x-eC.x+el,eZ=ex.y-eC.y+es,ek=tt(eO,eZ),eR=tt(eO,eZ,Q),ej=z(n,["t","l"]),eP=z(R,["t","l"]),eN=z(n,["b","r"]),eI=z(R,["b","r"]),eT=S.overflow||{},eA=eT.adjustX,eF=eT.adjustY,ez=eT.shiftX,eL=eT.shiftY,e_=function(e){return"boolean"==typeof e?e:e>=0};tn();var eB=e_(eF),eH=eb[0]===ev[0];if(eB&&"t"===eb[0]&&(c>ee.bottom||E.current.bt)){var eD=eZ;eH?eD-=W-q:eD=ej.y-eI.y-es;var eW=tt(eO,eD),eV=tt(eO,eD,Q);eW>ek||eW===ek&&(!$||eV>=eR)?(E.current.bt=!0,eZ=eD,es=-es,eS.points=[L(eb,0),L(ev,0)]):E.current.bt=!1}if(eB&&"b"===eb[0]&&(aek||eX===ek&&(!$||eG>=eR)?(E.current.tb=!0,eZ=eq,es=-es,eS.points=[L(eb,0),L(ev,0)]):E.current.tb=!1}var eU=e_(eA),eK=eb[1]===ev[1];if(eU&&"l"===eb[1]&&(s>ee.right||E.current.rl)){var eY=eO;eK?eY-=V-X:eY=ej.x-eI.x-el;var eQ=tt(eY,eZ),eJ=tt(eY,eZ,Q);eQ>ek||eQ===ek&&(!$||eJ>=eR)?(E.current.rl=!0,eO=eY,el=-el,eS.points=[L(eb,1),L(ev,1)]):E.current.rl=!1}if(eU&&"r"===eb[1]&&(lek||e1===ek&&(!$||e2>=eR)?(E.current.lr=!0,eO=e0,el=-el,eS.points=[L(eb,1),L(ev,1)]):E.current.lr=!1}tn();var e4=!0===ez?0:ez;"number"==typeof e4&&(lQ.right&&(eO-=s-Q.right-el,n.x>Q.right-e4&&(eO+=n.x-Q.right+e4)));var e5=!0===eL?0:eL;"number"==typeof e5&&(aQ.bottom&&(eZ-=c-Q.bottom-es,n.y>Q.bottom-e5&&(eZ+=n.y-Q.bottom+e5)));var e3=R.x+eO,e6=R.y+eZ,e8=n.x,e9=n.y;null==eM||eM(e$,eS);var e7=et.right-R.x-(eO+R.width),te=et.bottom-R.y-(eZ+R.height);y({ready:!0,offsetX:eO/en,offsetY:eZ/er,offsetR:e7/en,offsetB:te/er,arrowX:((Math.max(e3,e8)+Math.min(e3+V,e8+X))/2-e3)/en,arrowY:((Math.max(e6,e9)+Math.min(e6+W,e9+q))/2-e6)/er,scaleX:en,scaleY:er,align:eS})}function tt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:J,r=R.x+e,o=R.y+t,a=Math.max(r,n.left),i=Math.max(o,n.top);return Math.max(0,(Math.min(r+V,n.right)-a)*(Math.min(o+W,n.bottom)-i))}function tn(){c=(a=R.y+eZ)+W,s=(l=R.x+eO)+V}}}),T=function(){y(function(e){return(0,r.Z)((0,r.Z)({},e),{},{ready:!1})})},(0,m.Z)(T,[ey]),(0,m.Z)(function(){ta||T()},[ta]),[b.ready,b.offsetX,b.offsetY,b.offsetR,b.offsetB,b.arrowX,b.arrowY,b.scaleX,b.scaleY,b.align,function(){x.current+=1;var e=x.current;Promise.resolve().then(function(){x.current===e&&N()})}]),tk=(0,o.Z)(tZ,11),tR=tk[0],tM=tk[1],tj=tk[2],tP=tk[3],tN=tk[4],tI=tk[5],tT=tk[6],tA=tk[7],tF=tk[8],tz=tk[9],tL=tk[10],t_=(D=void 0===Q?"hover":Q,h.useMemo(function(){var e=Z(null!=J?J:D),t=Z(null!=ee?ee:D),n=new Set(e),r=new Set(t);return eD&&(n.has("hover")&&(n.delete("hover"),n.add("click")),r.has("hover")&&(r.delete("hover"),r.add("click"))),[n,r]},[eD,D,J,ee])),tB=(0,o.Z)(t_,2),tH=tB[0],tD=tB[1],tW=tH.has("click"),tV=tD.has("click")||tD.has("contextMenu"),tq=(0,f.Z)(function(){tg||tL()});W=function(){tc.current&&ek&&tV&&tf(!1)},(0,m.Z)(function(){if(ta&&e1&&e$){var e=j(e1),t=j(e$),n=M(e$),r=new Set([n].concat((0,_.Z)(e),(0,_.Z)(t)));function o(){tq(),W()}return r.forEach(function(e){e.addEventListener("scroll",o,{passive:!0})}),n.addEventListener("resize",o,{passive:!0}),tq(),function(){r.forEach(function(e){e.removeEventListener("scroll",o),n.removeEventListener("resize",o)})}}},[ta,e1,e$]),(0,m.Z)(function(){tq()},[tC,ey]),(0,m.Z)(function(){ta&&!(null!=ew&&ew[ey])&&tq()},[JSON.stringify(eE)]);var tX=h.useMemo(function(){var e=function(e,t,n,r){for(var o=n.points,a=Object.keys(e),i=0;i0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}(null===(c=e[l])||void 0===c?void 0:c.points,o,r))return"".concat(t,"-placement-").concat(l)}return""}(ew,$,tz,ek);return l()(e,null==eO?void 0:eO(tz))},[tz,eO,ew,$,ek]);h.useImperativeHandle(n,function(){return{nativeElement:e4.current,forceAlign:tq}});var tG=h.useState(0),tU=(0,o.Z)(tG,2),tK=tU[0],t$=tU[1],tY=h.useState(0),tQ=(0,o.Z)(tY,2),tJ=tQ[0],t0=tQ[1],t1=function(){if(eS&&e1){var e=e1.getBoundingClientRect();t$(e.width),t0(e.height)}};function t2(e,t,n,r){e8[e]=function(o){var a;null==r||r(o),tf(t,n);for(var i=arguments.length,c=Array(i>1?i-1:0),l=1;l1?n-1:0),o=1;o1?n-1:0),o=1;o{switch(e){case"simple":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,l.bM)(t,s.K.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,c.q)((0,l.bM)(t,s.K.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}},m=(0,l.fn)("Icon"),g=o.forwardRef((e,t)=>{let{icon:n,variant:s="simple",tooltip:g,size:h=i.u8.SM,color:v,className:b}=e,y=(0,r._T)(e,["icon","variant","tooltip","size","color","className"]),x=p(s,v),{tooltipProps:w,getReferenceProps:E}=(0,a.l)();return o.createElement("span",Object.assign({ref:(0,l.lq)([t,w.refs.setReference]),className:(0,c.q)(m("root"),"inline-flex flex-shrink-0 items-center",x.bgColor,x.textColor,x.borderColor,x.ringColor,f[s].rounded,f[s].border,f[s].shadow,f[s].ring,u[h].paddingX,u[h].paddingY,b)},E,y),o.createElement(a.Z,Object.assign({text:g},w)),o.createElement(n,{className:(0,c.q)(m("icon"),"shrink-0",d[h].height,d[h].width)}))});g.displayName="Icon"},2179:function(e,t,n){n.d(t,{Z:function(){return S}});var r=n(9703),o=n(8437),a=n(4090);let i=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],c=e=>({_s:e,status:i[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),l=e=>e?6:5,s=(e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return l(t)}},u=e=>"object"==typeof e?[e.enter,e.exit]:[e,e],d=(e,t)=>setTimeout(()=>{isNaN(document.body.offsetTop)||e(t+1)},0),f=(e,t,n,r,o)=>{clearTimeout(r.current);let a=c(e);t(a),n.current=a,o&&o({current:a})},p=function(){let{enter:e=!0,exit:t=!0,preEnter:n,preExit:r,timeout:o,initialEntered:i,mountOnEnter:p,unmountOnExit:m,onStateChange:g}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[h,v]=(0,a.useState)(()=>c(i?2:l(p))),b=(0,a.useRef)(h),y=(0,a.useRef)(),[x,w]=u(o),E=(0,a.useCallback)(()=>{let e=s(b.current._s,m);e&&f(e,v,b,y,g)},[g,m]),C=(0,a.useCallback)(o=>{let a=e=>{switch(f(e,v,b,y,g),e){case 1:x>=0&&(y.current=setTimeout(E,x));break;case 4:w>=0&&(y.current=setTimeout(E,w));break;case 0:case 3:y.current=d(a,e)}},i=b.current.isEnter;"boolean"!=typeof o&&(o=!i),o?i||a(e?n?0:1:2):i&&a(t?r?3:4:l(m))},[E,g,e,t,n,r,x,w,m]);return(0,a.useEffect)(()=>()=>clearTimeout(y.current),[]),[h,C,E]};var m=n(4942),g=n(9250),h=n(5492);let v=e=>{var t=(0,r._T)(e,[]);return a.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),a.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),a.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var b=n(2898);let y={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},x=e=>"light"!==e?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}},w=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,h.bM)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,h.bM)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,h.bM)(t,b.K.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,h.bM)(t,b.K.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,h.bM)(t,b.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,h.bM)(t,b.K.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,h.bM)(t,b.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,h.bM)(t,b.K.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,h.bM)("transparent").bgColor,hoverBgColor:t?(0,g.q)((0,h.bM)(t,b.K.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,h.bM)(t,b.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,h.bM)(t,b.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,h.bM)(t,b.K.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,h.bM)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},E=(0,h.fn)("Button"),C=e=>{let{loading:t,iconSize:n,iconPosition:r,Icon:o,needMargin:i,transitionStatus:c}=e,l=i?r===m.zS.Left?(0,g.q)("-ml-1","mr-1.5"):(0,g.q)("-mr-1","ml-1.5"):"",s=(0,g.q)("w-0 h-0"),u={default:s,entering:s,entered:n,exiting:n,exited:s};return t?a.createElement(v,{className:(0,g.q)(E("icon"),"animate-spin shrink-0",l,u.default,u[c]),style:{transition:"width 150ms"}}):a.createElement(o,{className:(0,g.q)(E("icon"),"shrink-0",n,l)})},S=a.forwardRef((e,t)=>{let{icon:n,iconPosition:i=m.zS.Left,size:c=m.u8.SM,color:l,variant:s="primary",disabled:u,loading:d=!1,loadingText:f,children:v,tooltip:b,className:S}=e,O=(0,r._T)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),Z=d||u,k=void 0!==n||d,R=d&&f,M=!(!v&&!R),j=(0,g.q)(y[c].height,y[c].width),P="light"!==s?(0,g.q)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",N=w(s,l),I=x(s)[c],{tooltipProps:T,getReferenceProps:A}=(0,o.l)(300),[F,z]=p({timeout:50});return(0,a.useEffect)(()=>{z(d)},[d]),a.createElement("button",Object.assign({ref:(0,h.lq)([t,T.refs.setReference]),className:(0,g.q)(E("root"),"flex-shrink-0 inline-flex justify-center items-center group font-medium outline-none",P,I.paddingX,I.paddingY,I.fontSize,N.textColor,N.bgColor,N.borderColor,N.hoverBorderColor,Z?"opacity-50 cursor-not-allowed":(0,g.q)(w(s,l).hoverTextColor,w(s,l).hoverBgColor,w(s,l).hoverBorderColor),S),disabled:Z},A,O),a.createElement(o.Z,Object.assign({text:b},T)),k&&i!==m.zS.Right?a.createElement(C,{loading:d,iconSize:j,iconPosition:i,Icon:n,transitionStatus:F.status,needMargin:M}):null,R||v?a.createElement("span",{className:(0,g.q)(E("text"),"text-tremor-default whitespace-nowrap")},R?f:v):null,k&&i===m.zS.Right?a.createElement(C,{loading:d,iconSize:j,iconPosition:i,Icon:n,transitionStatus:F.status,needMargin:M}):null)});S.displayName="Button"},3810:function(e,t,n){n.d(t,{Z:function(){return d}});var r=n(9703),o=n(4090),a=n(4942),i=n(2898),c=n(9250),l=n(5492);let s=(0,l.fn)("Card"),u=e=>{if(!e)return"";switch(e){case a.zS.Left:return"border-l-4";case a.m.Top:return"border-t-4";case a.zS.Right:return"border-r-4";case a.m.Bottom:return"border-b-4";default:return""}},d=o.forwardRef((e,t)=>{let{decoration:n="",decorationColor:a,children:d,className:f}=e,p=(0,r._T)(e,["decoration","decorationColor","children","className"]);return o.createElement("div",Object.assign({ref:t,className:(0,c.q)(s("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",a?(0,l.bM)(a,i.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",u(n),f)},p),d)});d.displayName="Card"},384:function(e,t,n){n.d(t,{Z:function(){return s}});var r=n(9703),o=n(9250),a=n(5492),i=n(4090),c=n(217);let l=(0,a.fn)("Col"),s=i.forwardRef((e,t)=>{let{numColSpan:n=1,numColSpanSm:a,numColSpanMd:s,numColSpanLg:u,children:d,className:f}=e,p=(0,r._T)(e,["numColSpan","numColSpanSm","numColSpanMd","numColSpanLg","children","className"]),m=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"";return i.createElement("div",Object.assign({ref:t,className:(0,o.q)(l("root"),(()=>{let e=m(n,c.PT),t=m(a,c.SP),r=m(s,c.VS),i=m(u,c._w);return(0,o.q)(e,t,r,i)})(),f)},p),d)});s.displayName="Col"},6453:function(e,t,n){n.d(t,{Z:function(){return u}});var r=n(9703),o=n(9250),a=n(5492),i=n(4090),c=n(217);let l=(0,a.fn)("Grid"),s=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"",u=i.forwardRef((e,t)=>{let{numItems:n=1,numItemsSm:a,numItemsMd:u,numItemsLg:d,children:f,className:p}=e,m=(0,r._T)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),g=s(n,c._m),h=s(a,c.LH),v=s(u,c.l5),b=s(d,c.N4),y=(0,o.q)(g,h,v,b);return i.createElement("div",Object.assign({ref:t,className:(0,o.q)(l("root"),"grid",y,p)},m),f)});u.displayName="Grid"},217:function(e,t,n){n.d(t,{LH:function(){return o},N4:function(){return i},PT:function(){return c},SP:function(){return l},VS:function(){return s},_m:function(){return r},_w:function(){return u},l5:function(){return a}});let r={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},o={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},a={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},i={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"},c={1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},l={1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},s={1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},u={1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"}},827:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("Table"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement("div",{className:(0,a.q)(i("root"),"overflow-auto",c)},o.createElement("table",Object.assign({ref:t,className:(0,a.q)(i("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},l),n))});c.displayName="Table"},3851:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableBody"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("tbody",Object.assign({ref:t,className:(0,a.q)(i("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",c)},l),n))});c.displayName="TableBody"},2044:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableCell"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("td",Object.assign({ref:t,className:(0,a.q)(i("root"),"align-middle whitespace-nowrap text-left p-4",c)},l),n))});c.displayName="TableCell"},4167:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableHead"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("thead",Object.assign({ref:t,className:(0,a.q)(i("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",c)},l),n))});c.displayName="TableHead"},4480:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableHeaderCell"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("th",Object.assign({ref:t,className:(0,a.q)(i("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content","dark:text-dark-tremor-content",c)},l),n))});c.displayName="TableHeaderCell"},2287:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableRow"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("tr",Object.assign({ref:t,className:(0,a.q)(i("row"),c)},l),n))});c.displayName="TableRow"},1801:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2898),o=n(9250),a=n(5492),i=n(4090);let c=i.forwardRef((e,t)=>{let{color:n,className:c,children:l}=e;return i.createElement("p",{ref:t,className:(0,o.q)("text-tremor-default",n?(0,a.bM)(n,r.K.text).textColor:(0,o.q)("text-tremor-content","dark:text-dark-tremor-content"),c)},l)});c.displayName="Text"},2440:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(9703),o=n(2898),a=n(9250),i=n(5492),c=n(4090);let l=c.forwardRef((e,t)=>{let{color:n,children:l,className:s}=e,u=(0,r._T)(e,["color","children","className"]);return c.createElement("p",Object.assign({ref:t,className:(0,a.q)("font-medium text-tremor-title",n?(0,i.bM)(n,o.K.darkText).textColor:"text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis",s)},u),l)});l.displayName="Title"},8437:function(e,t,n){n.d(t,{Z:function(){return eB},l:function(){return e_}});var r=n(4090),o=n.t(r,2),a=n(9542);function i(e){return s(e)?(e.nodeName||"").toLowerCase():"#document"}function c(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function l(e){var t;return null==(t=(s(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function s(e){return e instanceof Node||e instanceof c(e).Node}function u(e){return e instanceof Element||e instanceof c(e).Element}function d(e){return e instanceof HTMLElement||e instanceof c(e).HTMLElement}function f(e){return"undefined"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof c(e).ShadowRoot)}function p(e){let{overflow:t,overflowX:n,overflowY:r,display:o}=b(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function m(e){let t=h(),n=b(e);return"none"!==n.transform||"none"!==n.perspective||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","perspective","filter"].some(e=>(n.willChange||"").includes(e))||["paint","layout","strict","content"].some(e=>(n.contain||"").includes(e))}function g(e){let t=x(e);for(;d(t)&&!v(t);){if(m(t))return t;t=x(t)}return null}function h(){return"undefined"!=typeof CSS&&!!CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")}function v(e){return["html","body","#document"].includes(i(e))}function b(e){return c(e).getComputedStyle(e)}function y(e){return u(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function x(e){if("html"===i(e))return e;let t=e.assignedSlot||e.parentNode||f(e)&&e.host||l(e);return f(t)?t.host:t}function w(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);let o=function e(t){let n=x(t);return v(n)?t.ownerDocument?t.ownerDocument.body:t.body:d(n)&&p(n)?n:e(n)}(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=c(o);return a?t.concat(i,i.visualViewport||[],p(o)?o:[],i.frameElement&&n?w(i.frameElement):[]):t.concat(o,w(o,[],n))}let E=Math.min,C=Math.max,S=Math.round,O=Math.floor,Z=e=>({x:e,y:e}),k={left:"right",right:"left",bottom:"top",top:"bottom"},R={start:"end",end:"start"};function M(e,t){return"function"==typeof e?e(t):e}function j(e){return e.split("-")[0]}function P(e){return e.split("-")[1]}function N(e){return"x"===e?"y":"x"}function I(e){return"y"===e?"height":"width"}function T(e){return["top","bottom"].includes(j(e))?"y":"x"}function A(e){return e.replace(/start|end/g,e=>R[e])}function F(e){return e.replace(/left|right|bottom|top/g,e=>k[e])}function z(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function L(e,t,n){let r,{reference:o,floating:a}=e,i=T(t),c=N(T(t)),l=I(c),s=j(t),u="y"===i,d=o.x+o.width/2-a.width/2,f=o.y+o.height/2-a.height/2,p=o[l]/2-a[l]/2;switch(s){case"top":r={x:d,y:o.y-a.height};break;case"bottom":r={x:d,y:o.y+o.height};break;case"right":r={x:o.x+o.width,y:f};break;case"left":r={x:o.x-a.width,y:f};break;default:r={x:o.x,y:o.y}}switch(P(t)){case"start":r[c]-=p*(n&&u?-1:1);break;case"end":r[c]+=p*(n&&u?-1:1)}return r}let _=async(e,t,n)=>{let{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,c=a.filter(Boolean),l=await (null==i.isRTL?void 0:i.isRTL(t)),s=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=L(s,r,l),f=r,p={},m=0;for(let n=0;n{!function(n){try{t=t||e.matches(n)}catch(e){}}(n)});let o=g(e);if(t&&o){let e=o.getBoundingClientRect();n=e.x,r=e.y}return[t,n,r]}function $(e){return G(l(e)).left+y(e).scrollLeft}function Y(e,t,n){let r;if("viewport"===t)r=function(e,t){let n=c(e),r=l(e),o=n.visualViewport,a=r.clientWidth,i=r.clientHeight,s=0,u=0;if(o){a=o.width,i=o.height;let e=h();(!e||e&&"fixed"===t)&&(s=o.offsetLeft,u=o.offsetTop)}return{width:a,height:i,x:s,y:u}}(e,n);else if("document"===t)r=function(e){let t=l(e),n=y(e),r=e.ownerDocument.body,o=C(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=C(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),i=-n.scrollLeft+$(e),c=-n.scrollTop;return"rtl"===b(r).direction&&(i+=C(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:c}}(l(e));else if(u(t))r=function(e,t){let n=G(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=d(e)?V(e):Z(1),i=e.clientWidth*a.x;return{width:i,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{let n=X(e);r={...t,x:t.x-n.x,y:t.y-n.y}}return z(r)}function Q(e,t){return d(e)&&"fixed"!==b(e).position?t?t(e):e.offsetParent:null}function J(e,t){let n=c(e);if(!d(e))return n;let r=Q(e,t);for(;r&&["table","td","th"].includes(i(r))&&"static"===b(r).position;)r=Q(r,t);return r&&("html"===i(r)||"body"===i(r)&&"static"===b(r).position&&!m(r))?n:r||g(e)||n}let ee=async function(e){let t=this.getOffsetParent||J,n=this.getDimensions;return{reference:function(e,t,n,r){let o=d(t),a=l(t),c="fixed"===n,s=G(e,!0,c,t),u={scrollLeft:0,scrollTop:0},f=Z(0);if(o||!o&&!c){if(("body"!==i(t)||p(a))&&(u=y(t)),o){let e=G(t,!0,c,t);f.x=e.x+t.clientLeft,f.y=e.y+t.clientTop}else a&&(f.x=$(a))}let m=s.left+u.scrollLeft-f.x,g=s.top+u.scrollTop-f.y,[h,v,b]=K(r);return h&&(m+=v,g+=b,o&&(m+=t.clientLeft,g+=t.clientTop)),{x:m,y:g,width:s.width,height:s.height}}(e.reference,await t(e.floating),e.strategy,e.floating),floating:{x:0,y:0,...await n(e.floating)}}},et={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e,a=l(r),[c]=t?K(t.floating):[!1];if(r===a||c)return n;let s={scrollLeft:0,scrollTop:0},u=Z(1),f=Z(0),m=d(r);if((m||!m&&"fixed"!==o)&&(("body"!==i(r)||p(a))&&(s=y(r)),d(r))){let e=G(r);u=V(r),f.x=e.x+r.clientLeft,f.y=e.y+r.clientTop}return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-s.scrollLeft*u.x+f.x,y:n.y*u.y-s.scrollTop*u.y+f.y}},getDocumentElement:l,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e,a=[..."clippingAncestors"===n?function(e,t){let n=t.get(e);if(n)return n;let r=w(e,[],!1).filter(e=>u(e)&&"body"!==i(e)),o=null,a="fixed"===b(e).position,c=a?x(e):e;for(;u(c)&&!v(c);){let t=b(c),n=m(c);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&!!o&&["absolute","fixed"].includes(o.position)||p(c)&&!n&&function e(t,n){let r=x(t);return!(r===n||!u(r)||v(r))&&("fixed"===b(r).position||e(r,n))}(e,c))?r=r.filter(e=>e!==c):o=t,c=x(c)}return t.set(e,r),r}(t,this._c):[].concat(n),r],c=a[0],l=a.reduce((e,n)=>{let r=Y(t,n,o);return e.top=C(r.top,e.top),e.right=E(r.right,e.right),e.bottom=E(r.bottom,e.bottom),e.left=C(r.left,e.left),e},Y(t,c,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:J,getElementRects:ee,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:n}=D(e);return{width:t,height:n}},getScale:V,isElement:u,isRTL:function(e){return"rtl"===b(e).direction}};function en(e,t,n,r){let o;void 0===r&&(r={});let{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:c="function"==typeof ResizeObserver,layoutShift:s="function"==typeof IntersectionObserver,animationFrame:u=!1}=r,d=W(e),f=a||i?[...d?w(d):[],...w(t)]:[];f.forEach(e=>{a&&e.addEventListener("scroll",n,{passive:!0}),i&&e.addEventListener("resize",n)});let p=d&&s?function(e,t){let n,r=null,o=l(e);function a(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return!function i(c,l){void 0===c&&(c=!1),void 0===l&&(l=1),a();let{left:s,top:u,width:d,height:f}=e.getBoundingClientRect();if(c||t(),!d||!f)return;let p=O(u),m=O(o.clientWidth-(s+d)),g={rootMargin:-p+"px "+-m+"px "+-O(o.clientHeight-(u+f))+"px "+-O(s)+"px",threshold:C(0,E(1,l))||1},h=!0;function v(e){let t=e[0].intersectionRatio;if(t!==l){if(!h)return i();t?i(!1,t):n=setTimeout(()=>{i(!1,1e-7)},100)}h=!1}try{r=new IntersectionObserver(v,{...g,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(v,g)}r.observe(e)}(!0),a}(d,n):null,m=-1,g=null;c&&(g=new ResizeObserver(e=>{let[r]=e;r&&r.target===d&&g&&(g.unobserve(t),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var e;null==(e=g)||e.observe(t)})),n()}),d&&!u&&g.observe(d),g.observe(t));let h=u?G(e):null;return u&&function t(){let r=G(e);h&&(r.x!==h.x||r.y!==h.y||r.width!==h.width||r.height!==h.height)&&n(),h=r,o=requestAnimationFrame(t)}(),n(),()=>{var e;f.forEach(e=>{a&&e.removeEventListener("scroll",n),i&&e.removeEventListener("resize",n)}),null==p||p(),null==(e=g)||e.disconnect(),g=null,u&&cancelAnimationFrame(o)}}let er=(e,t,n)=>{let r=new Map,o={platform:et,...n},a={...o.platform,_c:r};return _(e,t,{...o,platform:a})};var eo="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;function ea(e,t){let n,r,o;if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if((n=e.length)!=t.length)return!1;for(r=n;0!=r--;)if(!ea(e[r],t[r]))return!1;return!0}if((n=(o=Object.keys(e)).length)!==Object.keys(t).length)return!1;for(r=n;0!=r--;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!=r--;){let n=o[r];if(("_owner"!==n||!e.$$typeof)&&!ea(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}function ei(e){let t=r.useRef(e);return eo(()=>{t.current=e}),t}var ec="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;let el=!1,es=0,eu=()=>"floating-ui-"+es++,ed=o["useId".toString()]||function(){let[e,t]=r.useState(()=>el?eu():void 0);return ec(()=>{null==e&&t(eu())},[]),r.useEffect(()=>{el||(el=!0)},[]),e},ef=r.createContext(null),ep=r.createContext(null),em=()=>{var e;return(null==(e=r.useContext(ef))?void 0:e.id)||null},eg=()=>r.useContext(ep);function eh(e){return(null==e?void 0:e.ownerDocument)||document}function ev(e){return eh(e).defaultView||window}function eb(e){return!!e&&e instanceof ev(e).Element}function ey(e){return!!e&&e instanceof ev(e).HTMLElement}function ex(e,t){let n=["mouse","pen"];return t||n.push("",void 0),n.includes(e)}function ew(e){let t=(0,r.useRef)(e);return ec(()=>{t.current=e}),t}let eE="data-floating-ui-safe-polygon";function eC(e,t,n){return n&&!ex(n)?0:"number"==typeof e?e:null==e?void 0:e[t]}let eS=function(e,t){let{enabled:n=!0,delay:o=0,handleClose:a=null,mouseOnly:i=!1,restMs:c=0,move:l=!0}=void 0===t?{}:t,{open:s,onOpenChange:u,dataRef:d,events:f,elements:{domReference:p,floating:m},refs:g}=e,h=eg(),v=em(),b=ew(a),y=ew(o),x=r.useRef(),w=r.useRef(),E=r.useRef(),C=r.useRef(),S=r.useRef(!0),O=r.useRef(!1),Z=r.useRef(()=>{}),k=r.useCallback(()=>{var e;let t=null==(e=d.current.openEvent)?void 0:e.type;return(null==t?void 0:t.includes("mouse"))&&"mousedown"!==t},[d]);r.useEffect(()=>{if(n)return f.on("dismiss",e),()=>{f.off("dismiss",e)};function e(){clearTimeout(w.current),clearTimeout(C.current),S.current=!0}},[n,f]),r.useEffect(()=>{if(!n||!b.current||!s)return;function e(){k()&&u(!1)}let t=eh(m).documentElement;return t.addEventListener("mouseleave",e),()=>{t.removeEventListener("mouseleave",e)}},[m,s,u,n,b,d,k]);let R=r.useCallback(function(e){void 0===e&&(e=!0);let t=eC(y.current,"close",x.current);t&&!E.current?(clearTimeout(w.current),w.current=setTimeout(()=>u(!1),t)):e&&(clearTimeout(w.current),u(!1))},[y,u]),M=r.useCallback(()=>{Z.current(),E.current=void 0},[]),j=r.useCallback(()=>{if(O.current){let e=eh(g.floating.current).body;e.style.pointerEvents="",e.removeAttribute(eE),O.current=!1}},[g]);return r.useEffect(()=>{if(n&&eb(p))return s&&p.addEventListener("mouseleave",a),null==m||m.addEventListener("mouseleave",a),l&&p.addEventListener("mousemove",r,{once:!0}),p.addEventListener("mouseenter",r),p.addEventListener("mouseleave",o),()=>{s&&p.removeEventListener("mouseleave",a),null==m||m.removeEventListener("mouseleave",a),l&&p.removeEventListener("mousemove",r),p.removeEventListener("mouseenter",r),p.removeEventListener("mouseleave",o)};function t(){return!!d.current.openEvent&&["click","mousedown"].includes(d.current.openEvent.type)}function r(e){if(clearTimeout(w.current),S.current=!1,i&&!ex(x.current)||c>0&&0===eC(y.current,"open"))return;d.current.openEvent=e;let t=eC(y.current,"open",x.current);t?w.current=setTimeout(()=>{u(!0)},t):u(!0)}function o(n){if(t())return;Z.current();let r=eh(m);if(clearTimeout(C.current),b.current){s||clearTimeout(w.current),E.current=b.current({...e,tree:h,x:n.clientX,y:n.clientY,onClose(){j(),M(),R()}});let t=E.current;r.addEventListener("mousemove",t),Z.current=()=>{r.removeEventListener("mousemove",t)};return}R()}function a(n){t()||null==b.current||b.current({...e,tree:h,x:n.clientX,y:n.clientY,onClose(){j(),M(),R()}})(n)}},[p,m,n,e,i,c,l,R,M,j,u,s,h,y,b,d]),ec(()=>{var e,t,r;if(n&&s&&null!=(e=b.current)&&e.__options.blockPointerEvents&&k()){let e=eh(m).body;if(e.setAttribute(eE,""),e.style.pointerEvents="none",O.current=!0,eb(p)&&m){let e=null==h?void 0:null==(t=h.nodesRef.current.find(e=>e.id===v))?void 0:null==(r=t.context)?void 0:r.elements.floating;return e&&(e.style.pointerEvents=""),p.style.pointerEvents="auto",m.style.pointerEvents="auto",()=>{p.style.pointerEvents="",m.style.pointerEvents=""}}}},[n,s,v,m,p,h,b,d,k]),ec(()=>{s||(x.current=void 0,M(),j())},[s,M,j]),r.useEffect(()=>()=>{M(),clearTimeout(w.current),clearTimeout(C.current),j()},[n,M,j]),r.useMemo(()=>{if(!n)return{};function e(e){x.current=e.pointerType}return{reference:{onPointerDown:e,onPointerEnter:e,onMouseMove(){s||0===c||(clearTimeout(C.current),C.current=setTimeout(()=>{S.current||u(!0)},c))}},floating:{onMouseEnter(){clearTimeout(w.current)},onMouseLeave(){f.emit("dismiss",{type:"mouseLeave",data:{returnFocus:!1}}),R(!1)}}}},[f,n,c,s,u,R])};function eO(e,t){if(!e||!t)return!1;let n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&function(e){if("undefined"==typeof ShadowRoot)return!1;let t=ev(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}(n)){let n=t;do{if(n&&e===n)return!0;n=n.parentNode||n.host}while(n)}return!1}function eZ(e,t){let n=e.filter(e=>{var n;return e.parentId===t&&(null==(n=e.context)?void 0:n.open)})||[],r=n;for(;r.length;)r=e.filter(e=>{var t;return null==(t=r)?void 0:t.some(t=>{var n;return e.parentId===t.id&&(null==(n=e.context)?void 0:n.open)})})||[],n=n.concat(r);return n}let ek=o["useInsertionEffect".toString()]||(e=>e());function eR(e){let t=r.useRef(()=>{});return ek(()=>{t.current=e}),r.useCallback(function(){for(var e=arguments.length,n=Array(e),r=0;r!1),C="function"==typeof p?E:p,S=r.useRef(!1),{escapeKeyBubbles:O,outsidePressBubbles:Z}=eN(b);return r.useEffect(()=>{if(!n||!d)return;function e(e){if("Escape"===e.key){let e=y?eZ(y.nodesRef.current,i):[];if(e.length>0){let t=!0;if(e.forEach(e=>{var n;if(null!=(n=e.context)&&n.open&&!e.context.dataRef.current.__escapeKeyBubbles){t=!1;return}}),!t)return}a.emit("dismiss",{type:"escapeKey",data:{returnFocus:{preventScroll:!1}}}),o(!1)}}function t(e){var t;let n=S.current;if(S.current=!1,n||"function"==typeof C&&!C(e))return;let r="composedPath"in e?e.composedPath()[0]:e.target;if(ey(r)&&s){let t=s.ownerDocument.defaultView||window,n=r.scrollWidth>r.clientWidth,o=r.scrollHeight>r.clientHeight,a=o&&e.offsetX>r.clientWidth;if(o&&"rtl"===t.getComputedStyle(r).direction&&(a=e.offsetX<=r.offsetWidth-r.clientWidth),a||n&&e.offsetY>r.clientHeight)return}let c=y&&eZ(y.nodesRef.current,i).some(t=>{var n;return eM(e,null==(n=t.context)?void 0:n.elements.floating)});if(eM(e,s)||eM(e,l)||c)return;let u=y?eZ(y.nodesRef.current,i):[];if(u.length>0){let e=!0;if(u.forEach(t=>{var n;if(null!=(n=t.context)&&n.open&&!t.context.dataRef.current.__outsidePressBubbles){e=!1;return}}),!e)return}a.emit("dismiss",{type:"outsidePress",data:{returnFocus:x?{preventScroll:!0}:function(e){if(0===e.mozInputSource&&e.isTrusted)return!0;let t=/Android/i;return(t.test(function(){let e=navigator.userAgentData;return null!=e&&e.platform?e.platform:navigator.platform}())||t.test(function(){let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(e=>{let{brand:t,version:n}=e;return t+"/"+n}).join(" "):navigator.userAgent}()))&&e.pointerType?"click"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType}(e)||0===(t=e).width&&0===t.height||1===t.width&&1===t.height&&0===t.pressure&&0===t.detail&&"mouse"!==t.pointerType||t.width<1&&t.height<1&&0===t.pressure&&0===t.detail}}),o(!1)}function r(){o(!1)}u.current.__escapeKeyBubbles=O,u.current.__outsidePressBubbles=Z;let p=eh(s);f&&p.addEventListener("keydown",e),C&&p.addEventListener(m,t);let g=[];return v&&(eb(l)&&(g=w(l)),eb(s)&&(g=g.concat(w(s))),!eb(c)&&c&&c.contextElement&&(g=g.concat(w(c.contextElement)))),(g=g.filter(e=>{var t;return e!==(null==(t=p.defaultView)?void 0:t.visualViewport)})).forEach(e=>{e.addEventListener("scroll",r,{passive:!0})}),()=>{f&&p.removeEventListener("keydown",e),C&&p.removeEventListener(m,t),g.forEach(e=>{e.removeEventListener("scroll",r)})}},[u,s,l,c,f,C,m,a,y,i,n,o,v,d,O,Z,x]),r.useEffect(()=>{S.current=!1},[C,m]),r.useMemo(()=>d?{reference:{[ej[h]]:()=>{g&&(a.emit("dismiss",{type:"referencePress",data:{returnFocus:!1}}),o(!1))}},floating:{[eP[m]]:()=>{S.current=!0}}}:{},[d,a,g,m,h,o])},eT=function(e,t){let{open:n,onOpenChange:o,dataRef:a,events:i,refs:c,elements:{floating:l,domReference:s}}=e,{enabled:u=!0,keyboardOnly:d=!0}=void 0===t?{}:t,f=r.useRef(""),p=r.useRef(!1),m=r.useRef();return r.useEffect(()=>{if(!u)return;let e=eh(l).defaultView||window;function t(){!n&&ey(s)&&s===function(e){let t=e.activeElement;for(;(null==(n=t)?void 0:null==(r=n.shadowRoot)?void 0:r.activeElement)!=null;){var n,r;t=t.shadowRoot.activeElement}return t}(eh(s))&&(p.current=!0)}return e.addEventListener("blur",t),()=>{e.removeEventListener("blur",t)}},[l,s,n,u]),r.useEffect(()=>{if(u)return i.on("dismiss",e),()=>{i.off("dismiss",e)};function e(e){("referencePress"===e.type||"escapeKey"===e.type)&&(p.current=!0)}},[i,u]),r.useEffect(()=>()=>{clearTimeout(m.current)},[]),r.useMemo(()=>u?{reference:{onPointerDown(e){let{pointerType:t}=e;f.current=t,p.current=!!(t&&d)},onMouseLeave(){p.current=!1},onFocus(e){var t;p.current||"focus"===e.type&&(null==(t=a.current.openEvent)?void 0:t.type)==="mousedown"&&a.current.openEvent&&eM(a.current.openEvent,s)||(a.current.openEvent=e.nativeEvent,o(!0))},onBlur(e){p.current=!1;let t=e.relatedTarget,n=eb(t)&&t.hasAttribute("data-floating-ui-focus-guard")&&"outside"===t.getAttribute("data-type");m.current=setTimeout(()=>{eO(c.floating.current,t)||eO(s,t)||n||o(!1)})}}}:{},[u,d,s,c,a,o])},eA=function(e,t){let{open:n}=e,{enabled:o=!0,role:a="dialog"}=void 0===t?{}:t,i=ed(),c=ed();return r.useMemo(()=>{let e={id:i,role:a};return o?"tooltip"===a?{reference:{"aria-describedby":n?i:void 0},floating:e}:{reference:{"aria-expanded":n?"true":"false","aria-haspopup":"alertdialog"===a?"dialog":a,"aria-controls":n?i:void 0,..."listbox"===a&&{role:"combobox"},..."menu"===a&&{id:c}},floating:{...e,..."menu"===a&&{"aria-labelledby":c}}}:{}},[o,a,n,i,c])};function eF(e,t,n){let r=new Map;return{..."floating"===n&&{tabIndex:-1},...e,...t.map(e=>e?e[n]:null).concat(e).reduce((e,t)=>(t&&Object.entries(t).forEach(t=>{let[n,o]=t;if(0===n.indexOf("on")){if(r.has(n)||r.set(n,[]),"function"==typeof o){var a;null==(a=r.get(n))||a.push(o),e[n]=function(){for(var e,t=arguments.length,o=Array(t),a=0;ae(...o))}}}else e[n]=o}),e),{})}}let ez=function(e){void 0===e&&(e=[]);let t=e,n=r.useCallback(t=>eF(t,e,"reference"),t),o=r.useCallback(t=>eF(t,e,"floating"),t),a=r.useCallback(t=>eF(t,e,"item"),e.map(e=>null==e?void 0:e.item));return r.useMemo(()=>({getReferenceProps:n,getFloatingProps:o,getItemProps:a}),[n,o,a])};var eL=n(9250);let e_=e=>{var t,n;let[o,i]=(0,r.useState)(!1),[c,l]=(0,r.useState)(),{x:s,y:u,refs:d,strategy:f,context:p}=function(e){void 0===e&&(e={});let{open:t=!1,onOpenChange:n,nodeId:o}=e,i=function(e){void 0===e&&(e={});let{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:i,whileElementsMounted:c,open:l}=e,[s,u]=r.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[d,f]=r.useState(o);ea(d,o)||f(o);let p=r.useRef(null),m=r.useRef(null),g=r.useRef(s),h=ei(c),v=ei(i),[b,y]=r.useState(null),[x,w]=r.useState(null),E=r.useCallback(e=>{p.current!==e&&(p.current=e,y(e))},[]),C=r.useCallback(e=>{m.current!==e&&(m.current=e,w(e))},[]),S=r.useCallback(()=>{if(!p.current||!m.current)return;let e={placement:t,strategy:n,middleware:d};v.current&&(e.platform=v.current),er(p.current,m.current,e).then(e=>{let t={...e,isPositioned:!0};O.current&&!ea(g.current,t)&&(g.current=t,a.flushSync(()=>{u(t)}))})},[d,t,n,v]);eo(()=>{!1===l&&g.current.isPositioned&&(g.current.isPositioned=!1,u(e=>({...e,isPositioned:!1})))},[l]);let O=r.useRef(!1);eo(()=>(O.current=!0,()=>{O.current=!1}),[]),eo(()=>{if(b&&x){if(h.current)return h.current(b,x,S);S()}},[b,x,S,h]);let Z=r.useMemo(()=>({reference:p,floating:m,setReference:E,setFloating:C}),[E,C]),k=r.useMemo(()=>({reference:b,floating:x}),[b,x]);return r.useMemo(()=>({...s,update:S,refs:Z,elements:k,reference:E,floating:C}),[s,S,Z,k,E,C])}(e),c=eg(),l=r.useRef(null),s=r.useRef({}),u=r.useState(()=>(function(){let e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach(e=>e(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(e=>e!==n))}}})())[0],[d,f]=r.useState(null),p=r.useCallback(e=>{let t=eb(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),contextElement:e}:e;i.refs.setReference(t)},[i.refs]),m=r.useCallback(e=>{(eb(e)||null===e)&&(l.current=e,f(e)),(eb(i.refs.reference.current)||null===i.refs.reference.current||null!==e&&!eb(e))&&i.refs.setReference(e)},[i.refs]),g=r.useMemo(()=>({...i.refs,setReference:m,setPositionReference:p,domReference:l}),[i.refs,m,p]),h=r.useMemo(()=>({...i.elements,domReference:d}),[i.elements,d]),v=eR(n),b=r.useMemo(()=>({...i,refs:g,elements:h,dataRef:s,nodeId:o,events:u,open:t,onOpenChange:v}),[i,o,u,t,v,g,h]);return ec(()=>{let e=null==c?void 0:c.nodesRef.current.find(e=>e.id===o);e&&(e.context=b)}),r.useMemo(()=>({...i,context:b,refs:g,reference:m,positionReference:p}),[i,g,b,m,p])}({open:o,onOpenChange:t=>{t&&e?l(setTimeout(()=>{i(t)},e)):(clearTimeout(c),i(t))},placement:"top",whileElementsMounted:en,middleware:[{name:"offset",options:5,async fn(e){var t,n;let{x:r,y:o,placement:a,middlewareData:i}=e,c=await H(e,5);return a===(null==(t=i.offset)?void 0:t.placement)&&null!=(n=i.arrow)&&n.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:a}}}},{name:"flip",options:t={fallbackAxisSideDirection:"start"},async fn(e){var n,r,o,a,i;let{placement:c,middlewareData:l,rects:s,initialPlacement:u,platform:d,elements:f}=e,{mainAxis:p=!0,crossAxis:m=!0,fallbackPlacements:g,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:b=!0,...y}=M(t,e);if(null!=(n=l.arrow)&&n.alignmentOffset)return{};let x=j(c),w=j(u)===u,E=await (null==d.isRTL?void 0:d.isRTL(f.floating)),C=g||(w||!b?[F(u)]:function(e){let t=F(e);return[A(e),t,A(t)]}(u));g||"none"===v||C.push(...function(e,t,n,r){let o=P(e),a=function(e,t,n){let r=["left","right"],o=["right","left"];switch(e){case"top":case"bottom":if(n)return t?o:r;return t?r:o;case"left":case"right":return t?["top","bottom"]:["bottom","top"];default:return[]}}(j(e),"start"===n,r);return o&&(a=a.map(e=>e+"-"+o),t&&(a=a.concat(a.map(A)))),a}(u,b,v,E));let S=[u,...C],O=await B(e,y),Z=[],k=(null==(r=l.flip)?void 0:r.overflows)||[];if(p&&Z.push(O[x]),m){let e=function(e,t,n){void 0===n&&(n=!1);let r=P(e),o=N(T(e)),a=I(o),i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=F(i)),[i,F(i)]}(c,s,E);Z.push(O[e[0]],O[e[1]])}if(k=[...k,{placement:c,overflows:Z}],!Z.every(e=>e<=0)){let e=((null==(o=l.flip)?void 0:o.index)||0)+1,t=S[e];if(t)return{data:{index:e,overflows:k},reset:{placement:t}};let n=null==(a=k.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!n)switch(h){case"bestFit":{let e=null==(i=k.map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:i[0];e&&(n=e);break}case"initialPlacement":n=u}if(c!==n)return{reset:{placement:n}}}return{}}},(void 0===n&&(n={}),{name:"shift",options:n,async fn(e){let{x:t,y:r,placement:o}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=M(n,e),s={x:t,y:r},u=await B(e,l),d=T(j(o)),f=N(d),p=s[f],m=s[d];if(a){let e="y"===f?"top":"left",t="y"===f?"bottom":"right",n=p+u[e],r=p-u[t];p=C(n,E(p,r))}if(i){let e="y"===d?"top":"left",t="y"===d?"bottom":"right",n=m+u[e],r=m-u[t];m=C(n,E(m,r))}let g=c.fn({...e,[f]:p,[d]:m});return{...g,data:{x:g.x-t,y:g.y-r}}}})]}),m=eS(p,{move:!1}),{getReferenceProps:g,getFloatingProps:h}=ez([m,eT(p),eI(p),eA(p,{role:"tooltip"})]);return{tooltipProps:{open:o,x:s,y:u,refs:d,strategy:f,getFloatingProps:h},getReferenceProps:g}},eB=e=>{let{text:t,open:n,x:o,y:a,refs:i,strategy:c,getFloatingProps:l}=e;return n&&t?r.createElement("div",Object.assign({className:(0,eL.q)("max-w-xs text-sm z-20 rounded-tremor-default opacity-100 px-2.5 py-1","text-white bg-tremor-background-emphasis","text-white dark:bg-dark-tremor-background-subtle"),ref:i.setFloating,style:{position:c,top:null!=a?a:0,left:null!=o?o:0}},l()),t):null};eB.displayName="Tooltip"},4942:function(e,t,n){n.d(t,{fr:function(){return r},m:function(){return i},u8:function(){return o},zS:function(){return a}});let r={Slate:"slate",Gray:"gray",Zinc:"zinc",Neutral:"neutral",Stone:"stone",Red:"red",Orange:"orange",Amber:"amber",Yellow:"yellow",Lime:"lime",Green:"green",Emerald:"emerald",Teal:"teal",Cyan:"cyan",Sky:"sky",Blue:"blue",Indigo:"indigo",Violet:"violet",Purple:"purple",Fuchsia:"fuchsia",Pink:"pink",Rose:"rose"},o={XS:"xs",SM:"sm",MD:"md",LG:"lg",XL:"xl"},a={Left:"left",Right:"right"},i={Top:"top",Bottom:"bottom"}},2898:function(e,t,n){n.d(t,{K:function(){return o}});var r=n(4942);let o={canvasBackground:50,lightBackground:100,background:500,darkBackground:600,darkestBackground:800,lightBorder:200,border:500,darkBorder:700,lightRing:200,ring:300,lightText:400,text:500,darkText:700,darkestText:900,icon:500};r.fr.Blue,r.fr.Cyan,r.fr.Sky,r.fr.Indigo,r.fr.Violet,r.fr.Purple,r.fr.Fuchsia,r.fr.Slate,r.fr.Gray,r.fr.Zinc,r.fr.Neutral,r.fr.Stone,r.fr.Red,r.fr.Orange,r.fr.Amber,r.fr.Yellow,r.fr.Lime,r.fr.Green,r.fr.Emerald,r.fr.Teal,r.fr.Pink,r.fr.Rose},9250:function(e,t,n){n.d(t,{q:function(){return z}});var r=/^\[(.+)\]$/;function o(e,t){var n=e;return t.split("-").forEach(function(e){n.nextPart.has(e)||n.nextPart.set(e,{nextPart:new Map,validators:[]}),n=n.nextPart.get(e)}),n}var a=/\s+/;function i(){for(var e,t,n=0,r="";ne&&(t=0,r=n,n=new Map)}return{get:function(e){var t=n.get(e);return void 0!==t?t:void 0!==(t=r.get(e))?(o(e,t),t):void 0},set:function(e,t){n.has(e)?n.set(e,t):o(e,t)}}}(e.cacheSize),splitModifiers:(n=1===(t=e.separator||":").length,a=t[0],i=t.length,function(e){for(var r,o=[],c=0,l=0,s=0;sl?r-l:void 0}}),...(u=e.theme,d=e.prefix,f={nextPart:new Map,validators:[]},(p=Object.entries(e.classGroups),d?p.map(function(e){return[e[0],e[1].map(function(e){return"string"==typeof e?d+e:"object"==typeof e?Object.fromEntries(Object.entries(e).map(function(e){return[d+e[0],e[1]]})):e})]}):p).forEach(function(e){var t=e[0];(function e(t,n,r,a){t.forEach(function(t){if("string"==typeof t){(""===t?n:o(n,t)).classGroupId=r;return}if("function"==typeof t){if(t.isThemeGetter){e(t(a),n,r,a);return}n.validators.push({validator:t,classGroupId:r});return}Object.entries(t).forEach(function(t){var i=t[0];e(t[1],o(n,i),r,a)})})})(e[1],f,t,u)}),c=e.conflictingClassGroups,s=void 0===(l=e.conflictingClassGroupModifiers)?{}:l,{getClassGroupId:function(e){var t=e.split("-");return""===t[0]&&1!==t.length&&t.shift(),function e(t,n){if(0===t.length)return n.classGroupId;var r,o=t[0],a=n.nextPart.get(o),i=a?e(t.slice(1),a):void 0;if(i)return i;if(0!==n.validators.length){var c=t.join("-");return null===(r=n.validators.find(function(e){return(0,e.validator)(c)}))||void 0===r?void 0:r.classGroupId}}(t,f)||function(e){if(r.test(e)){var t=r.exec(e)[1],n=null==t?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}}(e)},getConflictingClassGroupIds:function(e,t){var n=c[e]||[];return t&&s[e]?[].concat(n,s[e]):n}})}}(l.slice(1).reduce(function(e,t){return t(e)},i()))).cache.get,n=e.cache.set,u=d,d(a)};function d(r){var o,i,c,l,s,u=t(r);if(u)return u;var d=(i=(o=e).splitModifiers,c=o.getClassGroupId,l=o.getConflictingClassGroupIds,s=new Set,r.trim().split(a).map(function(e){var t=i(e),n=t.modifiers,r=t.hasImportantModifier,o=t.baseClassName,a=t.maybePostfixModifierPosition,l=c(a?o.substring(0,a):o),s=!!a;if(!l){if(!a||!(l=c(o)))return{isTailwindClass:!1,originalClassName:e};s=!1}var u=(function(e){if(e.length<=1)return e;var t=[],n=[];return e.forEach(function(e){"["===e[0]?(t.push.apply(t,n.sort().concat([e])),n=[]):n.push(e)}),t.push.apply(t,n.sort()),t})(n).join(":");return{isTailwindClass:!0,modifierId:r?u+"!":u,classGroupId:l,originalClassName:e,hasPostfixModifier:s}}).reverse().filter(function(e){if(!e.isTailwindClass)return!0;var t=e.modifierId,n=e.classGroupId,r=e.hasPostfixModifier,o=t+n;return!s.has(o)&&(s.add(o),l(n,r).forEach(function(e){return s.add(t+e)}),!0)}).reverse().map(function(e){return e.originalClassName}).join(" "));return n(r,d),d}return function(){return u(i.apply(null,arguments))}}function l(e){var t=function(t){return t[e]||[]};return t.isThemeGetter=!0,t}var s=/^\[(?:([a-z-]+):)?(.+)\]$/i,u=/^\d+\/\d+$/,d=new Set(["px","full","screen"]),f=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,p=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,m=/^-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;function g(e){return w(e)||d.has(e)||u.test(e)||h(e)}function h(e){return R(e,"length",M)}function v(e){return R(e,"size",j)}function b(e){return R(e,"position",j)}function y(e){return R(e,"url",P)}function x(e){return R(e,"number",w)}function w(e){return!Number.isNaN(Number(e))}function E(e){return e.endsWith("%")&&w(e.slice(0,-1))}function C(e){return N(e)||R(e,"number",N)}function S(e){return s.test(e)}function O(){return!0}function Z(e){return f.test(e)}function k(e){return R(e,"",I)}function R(e,t,n){var r=s.exec(e);return!!r&&(r[1]?r[1]===t:n(r[2]))}function M(e){return p.test(e)}function j(){return!1}function P(e){return e.startsWith("url(")}function N(e){return Number.isInteger(Number(e))}function I(e){return m.test(e)}function T(){var e=l("colors"),t=l("spacing"),n=l("blur"),r=l("brightness"),o=l("borderColor"),a=l("borderRadius"),i=l("borderSpacing"),c=l("borderWidth"),s=l("contrast"),u=l("grayscale"),d=l("hueRotate"),f=l("invert"),p=l("gap"),m=l("gradientColorStops"),R=l("gradientColorStopPositions"),M=l("inset"),j=l("margin"),P=l("opacity"),N=l("padding"),I=l("saturate"),T=l("scale"),A=l("sepia"),F=l("skew"),z=l("space"),L=l("translate"),_=function(){return["auto","contain","none"]},B=function(){return["auto","hidden","clip","visible","scroll"]},H=function(){return["auto",S,t]},D=function(){return[S,t]},W=function(){return["",g]},V=function(){return["auto",w,S]},q=function(){return["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"]},X=function(){return["solid","dashed","dotted","double","none"]},G=function(){return["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","plus-lighter"]},U=function(){return["start","end","center","between","around","evenly","stretch"]},K=function(){return["","0",S]},$=function(){return["auto","avoid","all","avoid-page","page","left","right","column"]},Y=function(){return[w,x]},Q=function(){return[w,S]};return{cacheSize:500,theme:{colors:[O],spacing:[g],blur:["none","",Z,S],brightness:Y(),borderColor:[e],borderRadius:["none","","full",Z,S],borderSpacing:D(),borderWidth:W(),contrast:Y(),grayscale:K(),hueRotate:Q(),invert:K(),gap:D(),gradientColorStops:[e],gradientColorStopPositions:[E,h],inset:H(),margin:H(),opacity:Y(),padding:D(),saturate:Y(),scale:Y(),sepia:K(),skew:Q(),space:D(),translate:D()},classGroups:{aspect:[{aspect:["auto","square","video",S]}],container:["container"],columns:[{columns:[Z]}],"break-after":[{"break-after":$()}],"break-before":[{"break-before":$()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none"]}],clear:[{clear:["left","right","both","none"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[].concat(q(),[S])}],overflow:[{overflow:B()}],"overflow-x":[{"overflow-x":B()}],"overflow-y":[{"overflow-y":B()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[M]}],"inset-x":[{"inset-x":[M]}],"inset-y":[{"inset-y":[M]}],start:[{start:[M]}],end:[{end:[M]}],top:[{top:[M]}],right:[{right:[M]}],bottom:[{bottom:[M]}],left:[{left:[M]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",C]}],basis:[{basis:H()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",S]}],grow:[{grow:K()}],shrink:[{shrink:K()}],order:[{order:["first","last","none",C]}],"grid-cols":[{"grid-cols":[O]}],"col-start-end":[{col:["auto",{span:["full",C]},S]}],"col-start":[{"col-start":V()}],"col-end":[{"col-end":V()}],"grid-rows":[{"grid-rows":[O]}],"row-start-end":[{row:["auto",{span:[C]},S]}],"row-start":[{"row-start":V()}],"row-end":[{"row-end":V()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",S]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",S]}],gap:[{gap:[p]}],"gap-x":[{"gap-x":[p]}],"gap-y":[{"gap-y":[p]}],"justify-content":[{justify:["normal"].concat(U())}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal"].concat(U(),["baseline"])}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[].concat(U(),["baseline"])}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[N]}],px:[{px:[N]}],py:[{py:[N]}],ps:[{ps:[N]}],pe:[{pe:[N]}],pt:[{pt:[N]}],pr:[{pr:[N]}],pb:[{pb:[N]}],pl:[{pl:[N]}],m:[{m:[j]}],mx:[{mx:[j]}],my:[{my:[j]}],ms:[{ms:[j]}],me:[{me:[j]}],mt:[{mt:[j]}],mr:[{mr:[j]}],mb:[{mb:[j]}],ml:[{ml:[j]}],"space-x":[{"space-x":[z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit",S,t]}],"min-w":[{"min-w":["min","max","fit",S,g]}],"max-w":[{"max-w":["0","none","full","min","max","fit","prose",{screen:[Z]},Z,S]}],h:[{h:[S,t,"auto","min","max","fit"]}],"min-h":[{"min-h":["min","max","fit",S,g]}],"max-h":[{"max-h":[S,t,"min","max","fit"]}],"font-size":[{text:["base",Z,h]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",x]}],"font-family":[{font:[O]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",S]}],"line-clamp":[{"line-clamp":["none",w,x]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",S,g]}],"list-image":[{"list-image":["none",S]}],"list-style-type":[{list:["none","disc","decimal",S]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[P]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[P]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[].concat(X(),["wavy"])}],"text-decoration-thickness":[{decoration:["auto","from-font",g]}],"underline-offset":[{"underline-offset":["auto",S,g]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],indent:[{indent:D()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",S]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",S]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[P]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[].concat(q(),[b])}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",v]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},y]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[R]}],"gradient-via-pos":[{via:[R]}],"gradient-to-pos":[{to:[R]}],"gradient-from":[{from:[m]}],"gradient-via":[{via:[m]}],"gradient-to":[{to:[m]}],rounded:[{rounded:[a]}],"rounded-s":[{"rounded-s":[a]}],"rounded-e":[{"rounded-e":[a]}],"rounded-t":[{"rounded-t":[a]}],"rounded-r":[{"rounded-r":[a]}],"rounded-b":[{"rounded-b":[a]}],"rounded-l":[{"rounded-l":[a]}],"rounded-ss":[{"rounded-ss":[a]}],"rounded-se":[{"rounded-se":[a]}],"rounded-ee":[{"rounded-ee":[a]}],"rounded-es":[{"rounded-es":[a]}],"rounded-tl":[{"rounded-tl":[a]}],"rounded-tr":[{"rounded-tr":[a]}],"rounded-br":[{"rounded-br":[a]}],"rounded-bl":[{"rounded-bl":[a]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[P]}],"border-style":[{border:[].concat(X(),["hidden"])}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[P]}],"divide-style":[{divide:X()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:[""].concat(X())}],"outline-offset":[{"outline-offset":[S,g]}],"outline-w":[{outline:[g]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:W()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[P]}],"ring-offset-w":[{"ring-offset":[g]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Z,k]}],"shadow-color":[{shadow:[O]}],opacity:[{opacity:[P]}],"mix-blend":[{"mix-blend":G()}],"bg-blend":[{"bg-blend":G()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[s]}],"drop-shadow":[{"drop-shadow":["","none",Z,S]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[f]}],saturate:[{saturate:[I]}],sepia:[{sepia:[A]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[s]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[P]}],"backdrop-saturate":[{"backdrop-saturate":[I]}],"backdrop-sepia":[{"backdrop-sepia":[A]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",S]}],duration:[{duration:Q()}],ease:[{ease:["linear","in","out","in-out",S]}],delay:[{delay:Q()}],animate:[{animate:["none","spin","ping","pulse","bounce",S]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[T]}],"scale-x":[{"scale-x":[T]}],"scale-y":[{"scale-y":[T]}],rotate:[{rotate:[C,S]}],"translate-x":[{"translate-x":[L]}],"translate-y":[{"translate-y":[L]}],"skew-x":[{"skew-x":[F]}],"skew-y":[{"skew-y":[F]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",S]}],accent:[{accent:["auto",e]}],appearance:["appearance-none"],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",S]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":D()}],"scroll-mx":[{"scroll-mx":D()}],"scroll-my":[{"scroll-my":D()}],"scroll-ms":[{"scroll-ms":D()}],"scroll-me":[{"scroll-me":D()}],"scroll-mt":[{"scroll-mt":D()}],"scroll-mr":[{"scroll-mr":D()}],"scroll-mb":[{"scroll-mb":D()}],"scroll-ml":[{"scroll-ml":D()}],"scroll-p":[{"scroll-p":D()}],"scroll-px":[{"scroll-px":D()}],"scroll-py":[{"scroll-py":D()}],"scroll-ps":[{"scroll-ps":D()}],"scroll-pe":[{"scroll-pe":D()}],"scroll-pt":[{"scroll-pt":D()}],"scroll-pr":[{"scroll-pr":D()}],"scroll-pb":[{"scroll-pb":D()}],"scroll-pl":[{"scroll-pl":D()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","pinch-zoom","manipulation",{pan:["x","left","right","y","up","down"]}]}],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",S]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[g,x]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}}var A=Object.prototype.hasOwnProperty,F=new Set(["string","number","boolean"]);let z=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;rr.includes(e);function a(e){return t=>{e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}}function i(e){return t=>"tremor-".concat(e,"-").concat(t)}function c(e,t){let n=o(e);if("white"===e||"black"===e||"transparent"===e||!t||!n){let t=e.includes("#")||e.includes("--")||e.includes("rgb")?"[".concat(e,"]"):e;return{bgColor:"bg-".concat(t),hoverBgColor:"hover:bg-".concat(t),selectBgColor:"ui-selected:bg-".concat(t),textColor:"text-".concat(t),selectTextColor:"ui-selected:text-".concat(t),hoverTextColor:"hover:text-".concat(t),borderColor:"border-".concat(t),selectBorderColor:"ui-selected:border-".concat(t),hoverBorderColor:"hover:border-".concat(t),ringColor:"ring-".concat(t),strokeColor:"stroke-".concat(t),fillColor:"fill-".concat(t)}}return{bgColor:"bg-".concat(e,"-").concat(t),selectBgColor:"ui-selected:bg-".concat(e,"-").concat(t),hoverBgColor:"hover:bg-".concat(e,"-").concat(t),textColor:"text-".concat(e,"-").concat(t),selectTextColor:"ui-selected:text-".concat(e,"-").concat(t),hoverTextColor:"hover:text-".concat(e,"-").concat(t),borderColor:"border-".concat(e,"-").concat(t),selectBorderColor:"ui-selected:border-".concat(e,"-").concat(t),hoverBorderColor:"hover:border-".concat(e,"-").concat(t),ringColor:"ring-".concat(e,"-").concat(t),strokeColor:"stroke-".concat(e,"-").concat(t),fillColor:"fill-".concat(e,"-").concat(t)}}},1467:function(e,t,n){n.d(t,{i:function(){return c}});var r=n(4090),o=n(4329),a=n(4165),i=n(7499);function c(e){return t=>r.createElement(a.ZP,{theme:{token:{motion:!1,zIndexPopupBase:0}}},r.createElement(e,Object.assign({},t)))}t.Z=(e,t,n,a)=>c(c=>{let{prefixCls:l,style:s}=c,u=r.useRef(null),[d,f]=r.useState(0),[p,m]=r.useState(0),[g,h]=(0,o.Z)(!1,{value:c.open}),{getPrefixCls:v}=r.useContext(i.E_),b=v(t||"select",l);r.useEffect(()=>{if(h(!0),"undefined"!=typeof ResizeObserver){let e=new ResizeObserver(e=>{let t=e[0].target;f(t.offsetHeight+8),m(t.offsetWidth)}),t=setInterval(()=>{var r;let o=n?".".concat(n(b)):".".concat(b,"-dropdown"),a=null===(r=u.current)||void 0===r?void 0:r.querySelector(o);a&&(clearInterval(t),e.observe(a))},10);return()=>{clearInterval(t),e.disconnect()}}},[]);let y=Object.assign(Object.assign({},c),{style:Object.assign(Object.assign({},s),{margin:0}),open:g,visible:g,getPopupContainer:()=>u.current});return a&&(y=a(y)),r.createElement("div",{ref:u,style:{paddingBottom:d,position:"relative",minWidth:p}},r.createElement(e,Object.assign({},y)))})},1761:function(e,t,n){n.d(t,{Cn:function(){return s},u6:function(){return i}});var r=n(4090),o=n(4750),a=n(6718);let i=1e3,c={Modal:100,Drawer:100,Popover:100,Popconfirm:100,Tooltip:100,Tour:100},l={SelectLike:50,Dropdown:50,DatePicker:50,Menu:50,ImagePreview:1};function s(e,t){let[,n]=(0,o.ZP)(),s=r.useContext(a.Z);if(void 0!==t)return[t,t];let u=null!=s?s:0;return e in c?(u+=(s?0:n.zIndexPopupBase)+c[e],u=Math.min(u,n.zIndexPopupBase+i)):u+=l[e],[void 0===s?t:u,u]}},7387:function(e,t,n){n.d(t,{m:function(){return c}});let r=()=>({height:0,opacity:0}),o=e=>{let{scrollHeight:t}=e;return{height:t,opacity:1}},a=e=>({height:e?e.offsetHeight:0}),i=(e,t)=>(null==t?void 0:t.deadline)===!0||"height"===t.propertyName,c=(e,t,n)=>void 0!==n?n:"".concat(e,"-").concat(t);t.Z=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ant";return{motionName:"".concat(e,"-motion-collapse"),onAppearStart:r,onEnterStart:r,onAppearActive:o,onEnterActive:o,onLeaveStart:a,onLeaveActive:r,onAppearEnd:i,onEnterEnd:i,onLeaveEnd:i,motionDeadline:500}}},5823:function(e,t,n){n.d(t,{M2:function(){return i},Tm:function(){return c},l$:function(){return a}});var r,o=n(4090);let{isValidElement:a}=r||(r=n.t(o,2));function i(e){return e&&a(e)&&e.type===o.Fragment}function c(e,t){return a(e)?o.cloneElement(e,"function"==typeof t?t(e.props||{}):t):e}},7794:function(e,t,n){n.d(t,{F:function(){return i},Z:function(){return a}});var r=n(6480),o=n.n(r);function a(e,t,n){return o()({["".concat(e,"-status-success")]:"success"===t,["".concat(e,"-status-warning")]:"warning"===t,["".concat(e,"-status-error")]:"error"===t,["".concat(e,"-status-validating")]:"validating"===t,["".concat(e,"-has-feedback")]:n})}let i=(e,t)=>t||e},9233:function(e,t,n){n.d(t,{G8:function(){return a},ln:function(){return i}});var r=n(4090);function o(){}n(3850);let a=r.createContext({}),i=()=>{let e=()=>{};return e.deprecated=o,e}},6718:function(e,t,n){let r=n(4090).createContext(void 0);t.Z=r},1350:function(e,t,n){n.d(t,{Te:function(){return s},aG:function(){return i},hU:function(){return u},nx:function(){return c}});var r=n(4090),o=n(5823);let a=/^[\u4e00-\u9fa5]{2}$/,i=a.test.bind(a);function c(e){return"danger"===e?{danger:!0}:{type:e}}function l(e){return"string"==typeof e}function s(e){return"text"===e||"link"===e}function u(e,t){let n=!1,a=[];return r.Children.forEach(e,e=>{let t=typeof e,r="string"===t||"number"===t;if(n&&r){let t=a.length-1,n=a[t];a[t]="".concat(n).concat(e)}else a.push(e);n=r}),r.Children.map(a,e=>(function(e,t){if(null==e)return;let n=t?" ":"";return"string"!=typeof e&&"number"!=typeof e&&l(e.type)&&i(e.props.children)?(0,o.Tm)(e,{children:e.props.children.split("").join(n)}):l(e)?i(e)?r.createElement("span",null,e.split("").join(n)):r.createElement("span",null,e):(0,o.M2)(e)?r.createElement("span",null,e):e})(e,t))}},1861:function(e,t,n){n.d(t,{ZP:function(){return ev}});var r=n(4090),o=n(6480),a=n.n(o),i=n(5704),c=n(4084),l=n(3193),s=n(7499),u=n(5823),d=n(6585);let f=e=>{let{componentCls:t,colorPrimary:n}=e;return{[t]:{position:"absolute",background:"transparent",pointerEvents:"none",boxSizing:"border-box",color:"var(--wave-color, ".concat(n,")"),boxShadow:"0 0 0 0 currentcolor",opacity:.2,"&.wave-motion-appear":{transition:["box-shadow 0.4s ".concat(e.motionEaseOutCirc),"opacity 2s ".concat(e.motionEaseOutCirc)].join(","),"&-active":{boxShadow:"0 0 0 6px currentcolor",opacity:0},"&.wave-quick":{transition:["box-shadow 0.3s ".concat(e.motionEaseInOut),"opacity 0.35s ".concat(e.motionEaseInOut)].join(",")}}}}};var p=(0,d.ZP)("Wave",e=>[f(e)]),m=n(8563),g=n(9223),h=n(9367),v=n(7274);function b(e){return e&&"#fff"!==e&&"#ffffff"!==e&&"rgb(255, 255, 255)"!==e&&"rgba(255, 255, 255, 1)"!==e&&function(e){let t=(e||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return!t||!t[1]||!t[2]||!t[3]||!(t[1]===t[2]&&t[2]===t[3])}(e)&&!/rgba\((?:\d*, ){3}0\)/.test(e)&&"transparent"!==e}let y="ant-wave-target";function x(e){return Number.isNaN(e)?0:e}let w=e=>{let{className:t,target:n,component:o}=e,i=r.useRef(null),[c,l]=r.useState(null),[s,u]=r.useState([]),[d,f]=r.useState(0),[p,m]=r.useState(0),[w,E]=r.useState(0),[C,S]=r.useState(0),[O,Z]=r.useState(!1),k={left:d,top:p,width:w,height:C,borderRadius:s.map(e=>"".concat(e,"px")).join(" ")};function R(){let e=getComputedStyle(n);l(function(e){let{borderTopColor:t,borderColor:n,backgroundColor:r}=getComputedStyle(e);return b(t)?t:b(n)?n:b(r)?r:null}(n));let t="static"===e.position,{borderLeftWidth:r,borderTopWidth:o}=e;f(t?n.offsetLeft:x(-parseFloat(r))),m(t?n.offsetTop:x(-parseFloat(o))),E(n.offsetWidth),S(n.offsetHeight);let{borderTopLeftRadius:a,borderTopRightRadius:i,borderBottomLeftRadius:c,borderBottomRightRadius:s}=e;u([a,i,s,c].map(e=>x(parseFloat(e))))}if(c&&(k["--wave-color"]=c),r.useEffect(()=>{if(n){let e;let t=(0,g.Z)(()=>{R(),Z(!0)});return"undefined"!=typeof ResizeObserver&&(e=new ResizeObserver(R)).observe(n),()=>{g.Z.cancel(t),null==e||e.disconnect()}}},[]),!O)return null;let M=("Checkbox"===o||"Radio"===o)&&(null==n?void 0:n.classList.contains(y));return r.createElement(h.ZP,{visible:!0,motionAppear:!0,motionName:"wave-motion",motionDeadline:5e3,onAppearEnd:(e,t)=>{var n;if(t.deadline||"opacity"===t.propertyName){let e=null===(n=i.current)||void 0===n?void 0:n.parentElement;(0,v.v)(e).then(()=>{null==e||e.remove()})}return!1}},e=>{let{className:n}=e;return r.createElement("div",{ref:i,className:a()(t,{"wave-quick":M},n),style:k})})};var E=(e,t)=>{var n;let{component:o}=t;if("Checkbox"===o&&!(null===(n=e.querySelector("input"))||void 0===n?void 0:n.checked))return;let a=document.createElement("div");a.style.position="absolute",a.style.left="0px",a.style.top="0px",null==e||e.insertBefore(a,null==e?void 0:e.firstChild),(0,v.s)(r.createElement(w,Object.assign({},t,{target:e})),a)},C=n(4750),S=e=>{let{children:t,disabled:n,component:o}=e,{getPrefixCls:i}=(0,r.useContext)(s.E_),d=(0,r.useRef)(null),f=i("wave"),[,h]=p(f),v=function(e,t,n){let{wave:o}=r.useContext(s.E_),[,a,i]=(0,C.ZP)(),c=(0,m.zX)(r=>{let c=e.current;if((null==o?void 0:o.disabled)||!c)return;let l=c.querySelector(".".concat(y))||c,{showEffect:s}=o||{};(s||E)(l,{className:t,token:a,component:n,event:r,hashId:i})}),l=r.useRef();return e=>{g.Z.cancel(l.current),l.current=(0,g.Z)(()=>{c(e)})}}(d,a()(f,h),o);if(r.useEffect(()=>{let e=d.current;if(!e||1!==e.nodeType||n)return;let t=t=>{!(0,l.Z)(t.target)||!e.getAttribute||e.getAttribute("disabled")||e.disabled||e.className.includes("disabled")||e.className.includes("-leave")||v(t)};return e.addEventListener("click",t,!0),()=>{e.removeEventListener("click",t,!0)}},[n]),!r.isValidElement(t))return null!=t?t:null;let b=(0,c.Yr)(t)?(0,c.sQ)(t.ref,d):d;return(0,u.Tm)(t,{ref:b})},O=n(7094),Z=n(4629),k=n(2801),R=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let M=r.createContext(void 0);var j=n(1350);let P=(0,r.forwardRef)((e,t)=>{let{className:n,style:o,children:i,prefixCls:c}=e,l=a()("".concat(c,"-icon"),n);return r.createElement("span",{ref:t,className:l,style:o},i)});var N=n(9334);let I=(0,r.forwardRef)((e,t)=>{let{prefixCls:n,className:o,style:i,iconClassName:c}=e,l=a()("".concat(n,"-loading-icon"),o);return r.createElement(P,{prefixCls:n,className:l,style:i,ref:t},r.createElement(N.Z,{className:c}))}),T=()=>({width:0,opacity:0,transform:"scale(0)"}),A=e=>({width:e.scrollWidth,opacity:1,transform:"scale(1)"});var F=e=>{let{prefixCls:t,loading:n,existIcon:o,className:a,style:i}=e,c=!!n;return o?r.createElement(I,{prefixCls:t,className:a,style:i}):r.createElement(h.ZP,{visible:c,motionName:"".concat(t,"-loading-icon-motion"),motionLeave:c,removeOnLeave:!0,onAppearStart:T,onAppearActive:A,onEnterStart:T,onEnterActive:A,onLeaveStart:A,onLeaveActive:T},(e,n)=>{let{className:o,style:c}=e;return r.createElement(I,{prefixCls:t,className:a,style:Object.assign(Object.assign({},i),c),ref:n,iconClassName:o})})},z=n(8985),L=n(1303),_=n(316);let B=(e,t)=>({["> span, > ".concat(e)]:{"&:not(:last-child)":{["&, & > ".concat(e)]:{"&:not(:disabled)":{borderInlineEndColor:t}}},"&:not(:first-child)":{["&, & > ".concat(e)]:{"&:not(:disabled)":{borderInlineStartColor:t}}}}});var H=e=>{let{componentCls:t,fontSize:n,lineWidth:r,groupBorderColor:o,colorErrorHover:a}=e;return{["".concat(t,"-group")]:[{position:"relative",display:"inline-flex",["> span, > ".concat(t)]:{"&:not(:last-child)":{["&, & > ".concat(t)]:{borderStartEndRadius:0,borderEndEndRadius:0}},"&:not(:first-child)":{marginInlineStart:e.calc(r).mul(-1).equal(),["&, & > ".concat(t)]:{borderStartStartRadius:0,borderEndStartRadius:0}}},[t]:{position:"relative",zIndex:1,"&:hover,\n &:focus,\n &:active":{zIndex:2},"&[disabled]":{zIndex:0}},["".concat(t,"-icon-only")]:{fontSize:n}},B("".concat(t,"-primary"),o),B("".concat(t,"-danger"),a)]}},D=n(9202);let W=e=>{let{paddingInline:t,onlyIconSize:n,paddingBlock:r}=e;return(0,_.TS)(e,{buttonPaddingHorizontal:t,buttonPaddingVertical:r,buttonIconOnlyFontSize:n})},V=e=>{var t,n,r,o,a,i;let c=null!==(t=e.contentFontSize)&&void 0!==t?t:e.fontSize,l=null!==(n=e.contentFontSizeSM)&&void 0!==n?n:e.fontSize,s=null!==(r=e.contentFontSizeLG)&&void 0!==r?r:e.fontSizeLG,u=null!==(o=e.contentLineHeight)&&void 0!==o?o:(0,D.D)(c),d=null!==(a=e.contentLineHeightSM)&&void 0!==a?a:(0,D.D)(l),f=null!==(i=e.contentLineHeightLG)&&void 0!==i?i:(0,D.D)(s);return{fontWeight:400,defaultShadow:"0 ".concat(e.controlOutlineWidth,"px 0 ").concat(e.controlTmpOutline),primaryShadow:"0 ".concat(e.controlOutlineWidth,"px 0 ").concat(e.controlOutline),dangerShadow:"0 ".concat(e.controlOutlineWidth,"px 0 ").concat(e.colorErrorOutline),primaryColor:e.colorTextLightSolid,dangerColor:e.colorTextLightSolid,borderColorDisabled:e.colorBorder,defaultGhostColor:e.colorBgContainer,ghostBg:"transparent",defaultGhostBorderColor:e.colorBgContainer,paddingInline:e.paddingContentHorizontal-e.lineWidth,paddingInlineLG:e.paddingContentHorizontal-e.lineWidth,paddingInlineSM:8-e.lineWidth,onlyIconSize:e.fontSizeLG,onlyIconSizeSM:e.fontSizeLG-2,onlyIconSizeLG:e.fontSizeLG+2,groupBorderColor:e.colorPrimaryHover,linkHoverBg:"transparent",textHoverBg:e.colorBgTextHover,defaultColor:e.colorText,defaultBg:e.colorBgContainer,defaultBorderColor:e.colorBorder,defaultBorderColorDisabled:e.colorBorder,contentFontSize:c,contentFontSizeSM:l,contentFontSizeLG:s,contentLineHeight:u,contentLineHeightSM:d,contentLineHeightLG:f,paddingBlock:Math.max((e.controlHeight-c*u)/2-e.lineWidth,0),paddingBlockSM:Math.max((e.controlHeightSM-l*d)/2-e.lineWidth,0),paddingBlockLG:Math.max((e.controlHeightLG-s*f)/2-e.lineWidth,0)}},q=e=>{let{componentCls:t,iconCls:n,fontWeight:r}=e;return{[t]:{outline:"none",position:"relative",display:"inline-block",fontWeight:r,whiteSpace:"nowrap",textAlign:"center",backgroundImage:"none",background:"transparent",border:"".concat((0,z.bf)(e.lineWidth)," ").concat(e.lineType," transparent"),cursor:"pointer",transition:"all ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut),userSelect:"none",touchAction:"manipulation",color:e.colorText,"&:disabled > *":{pointerEvents:"none"},"> span":{display:"inline-block"},["".concat(t,"-icon")]:{lineHeight:0},["> ".concat(n," + span, > span + ").concat(n)]:{marginInlineStart:e.marginXS},["&:not(".concat(t,"-icon-only) > ").concat(t,"-icon")]:{["&".concat(t,"-loading-icon, &:not(:last-child)")]:{marginInlineEnd:e.marginXS}},"> a":{color:"currentColor"},"&:not(:disabled)":Object.assign({},(0,L.Qy)(e)),["&".concat(t,"-two-chinese-chars::first-letter")]:{letterSpacing:"0.34em"},["&".concat(t,"-two-chinese-chars > *:not(").concat(n,")")]:{marginInlineEnd:"-0.34em",letterSpacing:"0.34em"},["&-icon-only".concat(t,"-compact-item")]:{flex:"none"}}}},X=(e,t,n)=>({["&:not(:disabled):not(".concat(e,"-disabled)")]:{"&:hover":t,"&:active":n}}),G=e=>({minWidth:e.controlHeight,paddingInlineStart:0,paddingInlineEnd:0,borderRadius:"50%"}),U=e=>({borderRadius:e.controlHeight,paddingInlineStart:e.calc(e.controlHeight).div(2).equal(),paddingInlineEnd:e.calc(e.controlHeight).div(2).equal()}),K=e=>({cursor:"not-allowed",borderColor:e.borderColorDisabled,color:e.colorTextDisabled,background:e.colorBgContainerDisabled,boxShadow:"none"}),$=(e,t,n,r,o,a,i,c)=>({["&".concat(e,"-background-ghost")]:Object.assign(Object.assign({color:n||void 0,background:t,borderColor:r||void 0,boxShadow:"none"},X(e,Object.assign({background:t},i),Object.assign({background:t},c))),{"&:disabled":{cursor:"not-allowed",color:o||void 0,borderColor:a||void 0}})}),Y=e=>({["&:disabled, &".concat(e.componentCls,"-disabled")]:Object.assign({},K(e))}),Q=e=>Object.assign({},Y(e)),J=e=>({["&:disabled, &".concat(e.componentCls,"-disabled")]:{cursor:"not-allowed",color:e.colorTextDisabled}}),ee=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Q(e)),{background:e.defaultBg,borderColor:e.defaultBorderColor,color:e.defaultColor,boxShadow:e.defaultShadow}),X(e.componentCls,{color:e.colorPrimaryHover,borderColor:e.colorPrimaryHover},{color:e.colorPrimaryActive,borderColor:e.colorPrimaryActive})),$(e.componentCls,e.ghostBg,e.defaultGhostColor,e.defaultGhostBorderColor,e.colorTextDisabled,e.colorBorder)),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign(Object.assign({color:e.colorError,borderColor:e.colorError},X(e.componentCls,{color:e.colorErrorHover,borderColor:e.colorErrorBorderHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),$(e.componentCls,e.ghostBg,e.colorError,e.colorError,e.colorTextDisabled,e.colorBorder)),Y(e))}),et=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Q(e)),{color:e.primaryColor,background:e.colorPrimary,boxShadow:e.primaryShadow}),X(e.componentCls,{color:e.colorTextLightSolid,background:e.colorPrimaryHover},{color:e.colorTextLightSolid,background:e.colorPrimaryActive})),$(e.componentCls,e.ghostBg,e.colorPrimary,e.colorPrimary,e.colorTextDisabled,e.colorBorder,{color:e.colorPrimaryHover,borderColor:e.colorPrimaryHover},{color:e.colorPrimaryActive,borderColor:e.colorPrimaryActive})),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign(Object.assign({background:e.colorError,boxShadow:e.dangerShadow,color:e.dangerColor},X(e.componentCls,{background:e.colorErrorHover},{background:e.colorErrorActive})),$(e.componentCls,e.ghostBg,e.colorError,e.colorError,e.colorTextDisabled,e.colorBorder,{color:e.colorErrorHover,borderColor:e.colorErrorHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),Y(e))}),en=e=>Object.assign(Object.assign({},ee(e)),{borderStyle:"dashed"}),er=e=>Object.assign(Object.assign(Object.assign({color:e.colorLink},X(e.componentCls,{color:e.colorLinkHover,background:e.linkHoverBg},{color:e.colorLinkActive})),J(e)),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign({color:e.colorError},X(e.componentCls,{color:e.colorErrorHover},{color:e.colorErrorActive})),J(e))}),eo=e=>Object.assign(Object.assign(Object.assign({},X(e.componentCls,{color:e.colorText,background:e.textHoverBg},{color:e.colorText,background:e.colorBgTextActive})),J(e)),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign({color:e.colorError},J(e)),X(e.componentCls,{color:e.colorErrorHover,background:e.colorErrorBg},{color:e.colorErrorHover,background:e.colorErrorBg}))}),ea=e=>{let{componentCls:t}=e;return{["".concat(t,"-default")]:ee(e),["".concat(t,"-primary")]:et(e),["".concat(t,"-dashed")]:en(e),["".concat(t,"-link")]:er(e),["".concat(t,"-text")]:eo(e),["".concat(t,"-ghost")]:$(e.componentCls,e.ghostBg,e.colorBgContainer,e.colorBgContainer,e.colorTextDisabled,e.colorBorder)}},ei=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",{componentCls:n,controlHeight:r,fontSize:o,lineHeight:a,borderRadius:i,buttonPaddingHorizontal:c,iconCls:l,buttonPaddingVertical:s}=e,u="".concat(n,"-icon-only");return[{["".concat(n).concat(t)]:{fontSize:o,lineHeight:a,height:r,padding:"".concat((0,z.bf)(s)," ").concat((0,z.bf)(c)),borderRadius:i,["&".concat(u)]:{width:r,paddingInlineStart:0,paddingInlineEnd:0,["&".concat(n,"-round")]:{width:"auto"},[l]:{fontSize:e.buttonIconOnlyFontSize}},["&".concat(n,"-loading")]:{opacity:e.opacityLoading,cursor:"default"},["".concat(n,"-loading-icon")]:{transition:"width ".concat(e.motionDurationSlow," ").concat(e.motionEaseInOut,", opacity ").concat(e.motionDurationSlow," ").concat(e.motionEaseInOut)}}},{["".concat(n).concat(n,"-circle").concat(t)]:G(e)},{["".concat(n).concat(n,"-round").concat(t)]:U(e)}]},ec=e=>ei((0,_.TS)(e,{fontSize:e.contentFontSize,lineHeight:e.contentLineHeight})),el=e=>ei((0,_.TS)(e,{controlHeight:e.controlHeightSM,fontSize:e.contentFontSizeSM,lineHeight:e.contentLineHeightSM,padding:e.paddingXS,buttonPaddingHorizontal:e.paddingInlineSM,buttonPaddingVertical:e.paddingBlockSM,borderRadius:e.borderRadiusSM,buttonIconOnlyFontSize:e.onlyIconSizeSM}),"".concat(e.componentCls,"-sm")),es=e=>ei((0,_.TS)(e,{controlHeight:e.controlHeightLG,fontSize:e.contentFontSizeLG,lineHeight:e.contentLineHeightLG,buttonPaddingHorizontal:e.paddingInlineLG,buttonPaddingVertical:e.paddingBlockLG,borderRadius:e.borderRadiusLG,buttonIconOnlyFontSize:e.onlyIconSizeLG}),"".concat(e.componentCls,"-lg")),eu=e=>{let{componentCls:t}=e;return{[t]:{["&".concat(t,"-block")]:{width:"100%"}}}};var ed=(0,d.I$)("Button",e=>{let t=W(e);return[q(t),el(t),ec(t),es(t),eu(t),ea(t),H(t)]},V,{unitless:{fontWeight:!0,contentLineHeight:!0,contentLineHeightSM:!0,contentLineHeightLG:!0}}),ef=n(2288);let ep=e=>{let{componentCls:t,calc:n}=e;return{[t]:{["&-compact-item".concat(t,"-primary")]:{["&:not([disabled]) + ".concat(t,"-compact-item").concat(t,"-primary:not([disabled])")]:{position:"relative","&:before":{position:"absolute",top:n(e.lineWidth).mul(-1).equal(),insetInlineStart:n(e.lineWidth).mul(-1).equal(),display:"inline-block",width:e.lineWidth,height:"calc(100% + ".concat((0,z.bf)(e.lineWidth)," * 2)"),backgroundColor:e.colorPrimaryHover,content:'""'}}},"&-compact-vertical-item":{["&".concat(t,"-primary")]:{["&:not([disabled]) + ".concat(t,"-compact-vertical-item").concat(t,"-primary:not([disabled])")]:{position:"relative","&:before":{position:"absolute",top:n(e.lineWidth).mul(-1).equal(),insetInlineStart:n(e.lineWidth).mul(-1).equal(),display:"inline-block",width:"calc(100% + ".concat((0,z.bf)(e.lineWidth)," * 2)"),height:e.lineWidth,backgroundColor:e.colorPrimaryHover,content:'""'}}}}}}};var em=(0,d.bk)(["Button","compact"],e=>{let t=W(e);return[(0,ef.c)(t),function(e){var t;let n="".concat(e.componentCls,"-compact-vertical");return{[n]:Object.assign(Object.assign({},{["&-item:not(".concat(n,"-last-item)")]:{marginBottom:e.calc(e.lineWidth).mul(-1).equal()},"&-item":{"&:hover,&:focus,&:active":{zIndex:2},"&[disabled]":{zIndex:0}}}),(t=e.componentCls,{["&-item:not(".concat(n,"-first-item):not(").concat(n,"-last-item)")]:{borderRadius:0},["&-item".concat(n,"-first-item:not(").concat(n,"-last-item)")]:{["&, &".concat(t,"-sm, &").concat(t,"-lg")]:{borderEndEndRadius:0,borderEndStartRadius:0}},["&-item".concat(n,"-last-item:not(").concat(n,"-first-item)")]:{["&, &".concat(t,"-sm, &").concat(t,"-lg")]:{borderStartStartRadius:0,borderStartEndRadius:0}}}))}}(t),ep(t)]},V),eg=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let eh=(0,r.forwardRef)((e,t)=>{var n,o;let{loading:l=!1,prefixCls:u,type:d="default",danger:f,shape:p="default",size:m,styles:g,disabled:h,className:v,rootClassName:b,children:y,icon:x,ghost:w=!1,block:E=!1,htmlType:C="button",classNames:R,style:N={}}=e,I=eg(e,["loading","prefixCls","type","danger","shape","size","styles","disabled","className","rootClassName","children","icon","ghost","block","htmlType","classNames","style"]),{getPrefixCls:T,autoInsertSpaceInButton:A,direction:z,button:L}=(0,r.useContext)(s.E_),_=T("btn",u),[B,H,D]=ed(_),W=(0,r.useContext)(O.Z),V=null!=h?h:W,q=(0,r.useContext)(M),X=(0,r.useMemo)(()=>(function(e){if("object"==typeof e&&e){let t=null==e?void 0:e.delay;return{loading:(t=Number.isNaN(t)||"number"!=typeof t?0:t)<=0,delay:t}}return{loading:!!e,delay:0}})(l),[l]),[G,U]=(0,r.useState)(X.loading),[K,$]=(0,r.useState)(!1),Y=(0,r.createRef)(),Q=(0,c.sQ)(t,Y),J=1===r.Children.count(y)&&!x&&!(0,j.Te)(d);(0,r.useEffect)(()=>{let e=null;return X.delay>0?e=setTimeout(()=>{e=null,U(!0)},X.delay):U(X.loading),function(){e&&(clearTimeout(e),e=null)}},[X]),(0,r.useEffect)(()=>{if(!Q||!Q.current||!1===A)return;let e=Q.current.textContent;J&&(0,j.aG)(e)?K||$(!0):K&&$(!1)},[Q]);let ee=t=>{let{onClick:n}=e;if(G||V){t.preventDefault();return}null==n||n(t)},et=!1!==A,{compactSize:en,compactItemClassnames:er}=(0,k.ri)(_,z),eo=(0,Z.Z)(e=>{var t,n;return null!==(n=null!==(t=null!=m?m:en)&&void 0!==t?t:q)&&void 0!==n?n:e}),ea=eo&&({large:"lg",small:"sm",middle:void 0})[eo]||"",ei=G?"loading":x,ec=(0,i.Z)(I,["navigate"]),el=a()(_,H,D,{["".concat(_,"-").concat(p)]:"default"!==p&&p,["".concat(_,"-").concat(d)]:d,["".concat(_,"-").concat(ea)]:ea,["".concat(_,"-icon-only")]:!y&&0!==y&&!!ei,["".concat(_,"-background-ghost")]:w&&!(0,j.Te)(d),["".concat(_,"-loading")]:G,["".concat(_,"-two-chinese-chars")]:K&&et&&!G,["".concat(_,"-block")]:E,["".concat(_,"-dangerous")]:!!f,["".concat(_,"-rtl")]:"rtl"===z},er,v,b,null==L?void 0:L.className),es=Object.assign(Object.assign({},null==L?void 0:L.style),N),eu=a()(null==R?void 0:R.icon,null===(n=null==L?void 0:L.classNames)||void 0===n?void 0:n.icon),ef=Object.assign(Object.assign({},(null==g?void 0:g.icon)||{}),(null===(o=null==L?void 0:L.styles)||void 0===o?void 0:o.icon)||{}),ep=x&&!G?r.createElement(P,{prefixCls:_,className:eu,style:ef},x):r.createElement(F,{existIcon:!!x,prefixCls:_,loading:!!G}),eh=y||0===y?(0,j.hU)(y,J&&et):null;if(void 0!==ec.href)return B(r.createElement("a",Object.assign({},ec,{className:a()(el,{["".concat(_,"-disabled")]:V}),href:V?void 0:ec.href,style:es,onClick:ee,ref:Q,tabIndex:V?-1:0}),ep,eh));let ev=r.createElement("button",Object.assign({},I,{type:C,className:el,style:es,onClick:ee,disabled:V,ref:Q}),ep,eh,!!er&&r.createElement(em,{key:"compact",prefixCls:_}));return(0,j.Te)(d)||(ev=r.createElement(S,{component:"Button",disabled:!!G},ev)),B(ev)});eh.Group=e=>{let{getPrefixCls:t,direction:n}=r.useContext(s.E_),{prefixCls:o,size:i,className:c}=e,l=R(e,["prefixCls","size","className"]),u=t("btn-group",o),[,,d]=(0,C.ZP)(),f="";switch(i){case"large":f="lg";break;case"small":f="sm"}let p=a()(u,{["".concat(u,"-").concat(f)]:f,["".concat(u,"-rtl")]:"rtl"===n},c,d);return r.createElement(M.Provider,{value:i},r.createElement("div",Object.assign({},l,{className:p})))},eh.__ANT_BUTTON=!0;var ev=eh},7094:function(e,t,n){n.d(t,{n:function(){return a}});var r=n(4090);let o=r.createContext(!1),a=e=>{let{children:t,disabled:n}=e,a=r.useContext(o);return r.createElement(o.Provider,{value:null!=n?n:a},t)};t.Z=o},7303:function(e,t,n){n.d(t,{q:function(){return a}});var r=n(4090);let o=r.createContext(void 0),a=e=>{let{children:t,size:n}=e,a=r.useContext(o);return r.createElement(o.Provider,{value:n||a},t)};t.Z=o},7499:function(e,t,n){n.d(t,{E_:function(){return a},oR:function(){return o}});var r=n(4090);let o="anticon",a=r.createContext({getPrefixCls:(e,t)=>t||(e?"ant-".concat(e):"ant"),iconPrefixCls:o}),{Consumer:i}=a},2935:function(e,t,n){var r=n(4750);t.Z=e=>{let[,,,,t]=(0,r.ZP)();return t?"".concat(e,"-css-var"):""}},4629:function(e,t,n){var r=n(4090),o=n(7303);t.Z=e=>{let t=r.useContext(o.Z);return r.useMemo(()=>e?"string"==typeof e?null!=e?e:t:e instanceof Function?e(t):t:t,[e,t])}},4165:function(e,t,n){let r,o,a,i;n.d(t,{ZP:function(){return V},w6:function(){return H}});var c=n(4090),l=n.t(c,2),s=n(8985),u=n(7689),d=n(1475),f=n(6597),p=n(9233),m=n(2519),g=n(4678),h=n(3302),v=e=>{let{locale:t={},children:n,_ANT_MARK__:r}=e;c.useEffect(()=>(0,g.f)(t&&t.Modal),[t]);let o=c.useMemo(()=>Object.assign(Object.assign({},t),{exist:!0}),[t]);return c.createElement(h.Z.Provider,{value:o},n)},b=n(9474),y=n(3345),x=n(6864),w=n(7499),E=n(2215),C=n(6336),S=n(2127),O=n(4050);let Z="-ant-".concat(Date.now(),"-").concat(Math.random());var k=n(7094),R=n(7303),M=n(2536);let{useId:j}=Object.assign({},l);var P=void 0===j?()=>"":j,N=n(9367),I=n(4750);function T(e){let{children:t}=e,[,n]=(0,I.ZP)(),{motion:r}=n,o=c.useRef(!1);return(o.current=o.current||!1===r,o.current)?c.createElement(N.zt,{motion:r},t):t}var A=()=>null,F=n(8030),z=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let L=["getTargetContainer","getPopupContainer","renderEmpty","pageHeader","input","pagination","form","select","button"];function _(){return r||"ant"}function B(){return o||w.oR}let H=()=>({getPrefixCls:(e,t)=>t||(e?"".concat(_(),"-").concat(e):_()),getIconPrefixCls:B,getRootPrefixCls:()=>r||_(),getTheme:()=>a,holderRender:i}),D=e=>{let{children:t,csp:n,autoInsertSpaceInButton:r,alert:o,anchor:a,form:i,locale:l,componentSize:g,direction:h,space:E,virtual:C,dropdownMatchSelectWidth:S,popupMatchSelectWidth:O,popupOverflow:Z,legacyLocale:j,parentContext:N,iconPrefixCls:I,theme:_,componentDisabled:B,segmented:H,statistic:D,spin:W,calendar:V,carousel:q,cascader:X,collapse:G,typography:U,checkbox:K,descriptions:$,divider:Y,drawer:Q,skeleton:J,steps:ee,image:et,layout:en,list:er,mentions:eo,modal:ea,progress:ei,result:ec,slider:el,breadcrumb:es,menu:eu,pagination:ed,input:ef,empty:ep,badge:em,radio:eg,rate:eh,switch:ev,transfer:eb,avatar:ey,message:ex,tag:ew,table:eE,card:eC,tabs:eS,timeline:eO,timePicker:eZ,upload:ek,notification:eR,tree:eM,colorPicker:ej,datePicker:eP,rangePicker:eN,flex:eI,wave:eT,dropdown:eA,warning:eF}=e,ez=c.useCallback((t,n)=>{let{prefixCls:r}=e;if(n)return n;let o=r||N.getPrefixCls("");return t?"".concat(o,"-").concat(t):o},[N.getPrefixCls,e.prefixCls]),eL=I||N.iconPrefixCls||w.oR,e_=n||N.csp;(0,F.Z)(eL,e_);let eB=function(e,t){(0,p.ln)("ConfigProvider");let n=e||{},r=!1!==n.inherit&&t?t:y.u_,o=P();return(0,d.Z)(()=>{var a,i;if(!e)return t;let c=Object.assign({},r.components);Object.keys(e.components||{}).forEach(t=>{c[t]=Object.assign(Object.assign({},c[t]),e.components[t])});let l="css-var-".concat(o.replace(/:/g,"")),s=(null!==(a=n.cssVar)&&void 0!==a?a:r.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:"ant"},"object"==typeof r.cssVar?r.cssVar:{}),"object"==typeof n.cssVar?n.cssVar:{}),{key:"object"==typeof n.cssVar&&(null===(i=n.cssVar)||void 0===i?void 0:i.key)||l});return Object.assign(Object.assign(Object.assign({},r),n),{token:Object.assign(Object.assign({},r.token),n.token),components:c,cssVar:s})},[n,r],(e,t)=>e.some((e,n)=>{let r=t[n];return!(0,M.Z)(e,r,!0)}))}(_,N.theme),eH={csp:e_,autoInsertSpaceInButton:r,alert:o,anchor:a,locale:l||j,direction:h,space:E,virtual:C,popupMatchSelectWidth:null!=O?O:S,popupOverflow:Z,getPrefixCls:ez,iconPrefixCls:eL,theme:eB,segmented:H,statistic:D,spin:W,calendar:V,carousel:q,cascader:X,collapse:G,typography:U,checkbox:K,descriptions:$,divider:Y,drawer:Q,skeleton:J,steps:ee,image:et,input:ef,layout:en,list:er,mentions:eo,modal:ea,progress:ei,result:ec,slider:el,breadcrumb:es,menu:eu,pagination:ed,empty:ep,badge:em,radio:eg,rate:eh,switch:ev,transfer:eb,avatar:ey,message:ex,tag:ew,table:eE,card:eC,tabs:eS,timeline:eO,timePicker:eZ,upload:ek,notification:eR,tree:eM,colorPicker:ej,datePicker:eP,rangePicker:eN,flex:eI,wave:eT,dropdown:eA,warning:eF},eD=Object.assign({},N);Object.keys(eH).forEach(e=>{void 0!==eH[e]&&(eD[e]=eH[e])}),L.forEach(t=>{let n=e[t];n&&(eD[t]=n)});let eW=(0,d.Z)(()=>eD,eD,(e,t)=>{let n=Object.keys(e),r=Object.keys(t);return n.length!==r.length||n.some(n=>e[n]!==t[n])}),eV=c.useMemo(()=>({prefixCls:eL,csp:e_}),[eL,e_]),eq=c.createElement(c.Fragment,null,c.createElement(A,{dropdownMatchSelectWidth:S}),t),eX=c.useMemo(()=>{var e,t,n,r;return(0,f.T)((null===(e=b.Z.Form)||void 0===e?void 0:e.defaultValidateMessages)||{},(null===(n=null===(t=eW.locale)||void 0===t?void 0:t.Form)||void 0===n?void 0:n.defaultValidateMessages)||{},(null===(r=eW.form)||void 0===r?void 0:r.validateMessages)||{},(null==i?void 0:i.validateMessages)||{})},[eW,null==i?void 0:i.validateMessages]);Object.keys(eX).length>0&&(eq=c.createElement(m.Z.Provider,{value:eX},eq)),l&&(eq=c.createElement(v,{locale:l,_ANT_MARK__:"internalMark"},eq)),(eL||e_)&&(eq=c.createElement(u.Z.Provider,{value:eV},eq)),g&&(eq=c.createElement(R.q,{size:g},eq)),eq=c.createElement(T,null,eq);let eG=c.useMemo(()=>{let e=eB||{},{algorithm:t,token:n,components:r,cssVar:o}=e,a=z(e,["algorithm","token","components","cssVar"]),i=t&&(!Array.isArray(t)||t.length>0)?(0,s.jG)(t):y.uH,c={};Object.entries(r||{}).forEach(e=>{let[t,n]=e,r=Object.assign({},n);"algorithm"in r&&(!0===r.algorithm?r.theme=i:(Array.isArray(r.algorithm)||"function"==typeof r.algorithm)&&(r.theme=(0,s.jG)(r.algorithm)),delete r.algorithm),c[t]=r});let l=Object.assign(Object.assign({},x.Z),n);return Object.assign(Object.assign({},a),{theme:i,token:l,components:c,override:Object.assign({override:l},c),cssVar:o})},[eB]);return _&&(eq=c.createElement(y.Mj.Provider,{value:eG},eq)),eW.warning&&(eq=c.createElement(p.G8.Provider,{value:eW.warning},eq)),void 0!==B&&(eq=c.createElement(k.n,{disabled:B},eq)),c.createElement(w.E_.Provider,{value:eW},eq)},W=e=>{let t=c.useContext(w.E_),n=c.useContext(h.Z);return c.createElement(D,Object.assign({parentContext:t,legacyLocale:n},e))};W.ConfigContext=w.E_,W.SizeContext=R.Z,W.config=e=>{let{prefixCls:t,iconPrefixCls:n,theme:c,holderRender:l}=e;void 0!==t&&(r=t),void 0!==n&&(o=n),"holderRender"in e&&(i=l),c&&(Object.keys(c).some(e=>e.endsWith("Color"))?function(e,t){let n=function(e,t){let n={},r=(e,t)=>{let n=e.clone();return(n=(null==t?void 0:t(n))||n).toRgbString()},o=(e,t)=>{let o=new C.C(e),a=(0,E.R_)(o.toRgbString());n["".concat(t,"-color")]=r(o),n["".concat(t,"-color-disabled")]=a[1],n["".concat(t,"-color-hover")]=a[4],n["".concat(t,"-color-active")]=a[6],n["".concat(t,"-color-outline")]=o.clone().setAlpha(.2).toRgbString(),n["".concat(t,"-color-deprecated-bg")]=a[0],n["".concat(t,"-color-deprecated-border")]=a[2]};if(t.primaryColor){o(t.primaryColor,"primary");let e=new C.C(t.primaryColor),a=(0,E.R_)(e.toRgbString());a.forEach((e,t)=>{n["primary-".concat(t+1)]=e}),n["primary-color-deprecated-l-35"]=r(e,e=>e.lighten(35)),n["primary-color-deprecated-l-20"]=r(e,e=>e.lighten(20)),n["primary-color-deprecated-t-20"]=r(e,e=>e.tint(20)),n["primary-color-deprecated-t-50"]=r(e,e=>e.tint(50)),n["primary-color-deprecated-f-12"]=r(e,e=>e.setAlpha(.12*e.getAlpha()));let i=new C.C(a[0]);n["primary-color-active-deprecated-f-30"]=r(i,e=>e.setAlpha(.3*e.getAlpha())),n["primary-color-active-deprecated-d-02"]=r(i,e=>e.darken(2))}t.successColor&&o(t.successColor,"success"),t.warningColor&&o(t.warningColor,"warning"),t.errorColor&&o(t.errorColor,"error"),t.infoColor&&o(t.infoColor,"info");let a=Object.keys(n).map(t=>"--".concat(e,"-").concat(t,": ").concat(n[t],";"));return"\n :root {\n ".concat(a.join("\n"),"\n }\n ").trim()}(e,t);(0,S.Z)()&&(0,O.hq)(n,"".concat(Z,"-dynamic-theme"))}(_(),c):a=c)},W.useConfig=function(){return{componentDisabled:(0,c.useContext)(k.Z),componentSize:(0,c.useContext)(R.Z)}},Object.defineProperty(W,"SizeContext",{get:()=>R.Z});var V=W},7137:function(e,t,n){n.d(t,{RV:function(){return l},Rk:function(){return s},Ux:function(){return d},aM:function(){return u},pg:function(){return f},q3:function(){return i},qI:function(){return c}});var r=n(4090),o=n(6570),a=n(5704);let i=r.createContext({labelAlign:"right",vertical:!1,itemRef:()=>{}}),c=r.createContext(null),l=e=>{let t=(0,a.Z)(e,["prefixCls"]);return r.createElement(o.RV,Object.assign({},t))},s=r.createContext({prefixCls:""}),u=r.createContext({}),d=e=>{let{children:t,status:n,override:o}=e,a=(0,r.useContext)(u),i=(0,r.useMemo)(()=>{let e=Object.assign({},a);return o&&delete e.isFormItemInput,n&&(delete e.status,delete e.hasFeedback,delete e.feedbackIcon),e},[n,o,a]);return r.createElement(u.Provider,{value:i},t)},f=(0,r.createContext)(void 0)},8443:function(e,t,n){var r=n(4090),o=n(7137);let a=["outlined","borderless","filled"];t.Z=function(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=(0,r.useContext)(o.pg);t=void 0!==e?e:!1===n?"borderless":null!=i?i:"outlined";let c=a.includes(t);return[t,c]}},2902:function(e,t,n){n.d(t,{Z:function(){return tp}});var r=n(3787),o=n(6480),a=n.n(o),i=n(9367),c=n(4090),l=n(7387),s=n(7137);function u(e){let[t,n]=c.useState(e);return c.useEffect(()=>{let t=setTimeout(()=>{n(e)},e.length?0:10);return()=>{clearTimeout(t)}},[e]),t}var d=n(8985),f=n(1303),p=n(8854),m=e=>({[e.componentCls]:{["".concat(e.antCls,"-motion-collapse-legacy")]:{overflow:"hidden","&-active":{transition:"height ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut,",\n opacity ").concat(e.motionDurationMid," ").concat(e.motionEaseInOut," !important")}},["".concat(e.antCls,"-motion-collapse")]:{overflow:"hidden",transition:"height ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut,",\n opacity ").concat(e.motionDurationMid," ").concat(e.motionEaseInOut," !important")}}}),g=n(316),h=n(6585),v=e=>{let{componentCls:t}=e,n="".concat(t,"-show-help"),r="".concat(t,"-show-help-item");return{[n]:{transition:"opacity ".concat(e.motionDurationSlow," ").concat(e.motionEaseInOut),"&-appear, &-enter":{opacity:0,"&-active":{opacity:1}},"&-leave":{opacity:1,"&-active":{opacity:0}},[r]:{overflow:"hidden",transition:"height ".concat(e.motionDurationSlow," ").concat(e.motionEaseInOut,",\n opacity ").concat(e.motionDurationSlow," ").concat(e.motionEaseInOut,",\n transform ").concat(e.motionDurationSlow," ").concat(e.motionEaseInOut," !important"),["&".concat(r,"-appear, &").concat(r,"-enter")]:{transform:"translateY(-5px)",opacity:0,"&-active":{transform:"translateY(0)",opacity:1}},["&".concat(r,"-leave-active")]:{transform:"translateY(-5px)"}}}}};let b=e=>({legend:{display:"block",width:"100%",marginBottom:e.marginLG,padding:0,color:e.colorTextDescription,fontSize:e.fontSizeLG,lineHeight:"inherit",border:0,borderBottom:"".concat((0,d.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)},'input[type="search"]':{boxSizing:"border-box"},'input[type="radio"], input[type="checkbox"]':{lineHeight:"normal"},'input[type="file"]':{display:"block"},'input[type="range"]':{display:"block",width:"100%"},"select[multiple], select[size]":{height:"auto"},"input[type='file']:focus,\n input[type='radio']:focus,\n input[type='checkbox']:focus":{outline:0,boxShadow:"0 0 0 ".concat((0,d.bf)(e.controlOutlineWidth)," ").concat(e.controlOutline)},output:{display:"block",paddingTop:15,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight}}),y=(e,t)=>{let{formItemCls:n}=e;return{[n]:{["".concat(n,"-label > label")]:{height:t},["".concat(n,"-control-input")]:{minHeight:t}}}},x=e=>{let{componentCls:t}=e;return{[e.componentCls]:Object.assign(Object.assign(Object.assign({},(0,f.Wf)(e)),b(e)),{["".concat(t,"-text")]:{display:"inline-block",paddingInlineEnd:e.paddingSM},"&-small":Object.assign({},y(e,e.controlHeightSM)),"&-large":Object.assign({},y(e,e.controlHeightLG))})}},w=e=>{let{formItemCls:t,iconCls:n,componentCls:r,rootPrefixCls:o,labelRequiredMarkColor:a,labelColor:i,labelFontSize:c,labelHeight:l,labelColonMarginInlineStart:s,labelColonMarginInlineEnd:u,itemMarginBottom:d}=e;return{[t]:Object.assign(Object.assign({},(0,f.Wf)(e)),{marginBottom:d,verticalAlign:"top","&-with-help":{transition:"none"},["&-hidden,\n &-hidden.".concat(o,"-row")]:{display:"none"},"&-has-warning":{["".concat(t,"-split")]:{color:e.colorError}},"&-has-error":{["".concat(t,"-split")]:{color:e.colorWarning}},["".concat(t,"-label")]:{flexGrow:0,overflow:"hidden",whiteSpace:"nowrap",textAlign:"end",verticalAlign:"middle","&-left":{textAlign:"start"},"&-wrap":{overflow:"unset",lineHeight:e.lineHeight,whiteSpace:"unset"},"> label":{position:"relative",display:"inline-flex",alignItems:"center",maxWidth:"100%",height:l,color:i,fontSize:c,["> ".concat(n)]:{fontSize:e.fontSize,verticalAlign:"top"},["&".concat(t,"-required:not(").concat(t,"-required-mark-optional)::before")]:{display:"inline-block",marginInlineEnd:e.marginXXS,color:a,fontSize:e.fontSize,fontFamily:"SimSun, sans-serif",lineHeight:1,content:'"*"',["".concat(r,"-hide-required-mark &")]:{display:"none"}},["".concat(t,"-optional")]:{display:"inline-block",marginInlineStart:e.marginXXS,color:e.colorTextDescription,["".concat(r,"-hide-required-mark &")]:{display:"none"}},["".concat(t,"-tooltip")]:{color:e.colorTextDescription,cursor:"help",writingMode:"horizontal-tb",marginInlineStart:e.marginXXS},"&::after":{content:'":"',position:"relative",marginBlock:0,marginInlineStart:s,marginInlineEnd:u},["&".concat(t,"-no-colon::after")]:{content:'"\\a0"'}}},["".concat(t,"-control")]:{"--ant-display":"flex",flexDirection:"column",flexGrow:1,["&:first-child:not([class^=\"'".concat(o,"-col-'\"]):not([class*=\"' ").concat(o,"-col-'\"])")]:{width:"100%"},"&-input":{position:"relative",display:"flex",alignItems:"center",minHeight:e.controlHeight,"&-content":{flex:"auto",maxWidth:"100%"}}},[t]:{"&-explain, &-extra":{clear:"both",color:e.colorTextDescription,fontSize:e.fontSize,lineHeight:e.lineHeight},"&-explain-connected":{width:"100%"},"&-extra":{minHeight:e.controlHeightSM,transition:"color ".concat(e.motionDurationMid," ").concat(e.motionEaseOut)},"&-explain":{"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning}}},["&-with-help ".concat(t,"-explain")]:{height:"auto",opacity:1},["".concat(t,"-feedback-icon")]:{fontSize:e.fontSize,textAlign:"center",visibility:"visible",animationName:p.kr,animationDuration:e.motionDurationMid,animationTimingFunction:e.motionEaseOutBack,pointerEvents:"none","&-success":{color:e.colorSuccess},"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning},"&-validating":{color:e.colorPrimary}}})}},E=e=>{let{componentCls:t,formItemCls:n}=e;return{["".concat(t,"-horizontal")]:{["".concat(n,"-label")]:{flexGrow:0},["".concat(n,"-control")]:{flex:"1 1 0",minWidth:0},["".concat(n,"-label[class$='-24'], ").concat(n,"-label[class*='-24 ']")]:{["& + ".concat(n,"-control")]:{minWidth:"unset"}}}}},C=e=>{let{componentCls:t,formItemCls:n}=e;return{["".concat(t,"-inline")]:{display:"flex",flexWrap:"wrap",[n]:{flex:"none",marginInlineEnd:e.margin,marginBottom:0,"&-row":{flexWrap:"nowrap"},["> ".concat(n,"-label,\n > ").concat(n,"-control")]:{display:"inline-block",verticalAlign:"top"},["> ".concat(n,"-label")]:{flex:"none"},["".concat(t,"-text")]:{display:"inline-block"},["".concat(n,"-has-feedback")]:{display:"inline-block"}}}}},S=e=>({padding:e.verticalLabelPadding,margin:e.verticalLabelMargin,whiteSpace:"initial",textAlign:"start","> label":{margin:0,"&::after":{visibility:"hidden"}}}),O=e=>{let{componentCls:t,formItemCls:n,rootPrefixCls:r}=e;return{["".concat(n," ").concat(n,"-label")]:S(e),["".concat(t,":not(").concat(t,"-inline)")]:{[n]:{flexWrap:"wrap",["".concat(n,"-label, ").concat(n,"-control")]:{['&:not([class*=" '.concat(r,'-col-xs"])')]:{flex:"0 0 100%",maxWidth:"100%"}}}}}},Z=e=>{let{componentCls:t,formItemCls:n,rootPrefixCls:r}=e;return{["".concat(t,"-vertical")]:{[n]:{"&-row":{flexDirection:"column"},"&-label > label":{height:"auto"},["".concat(t,"-item-control")]:{width:"100%"}}},["".concat(t,"-vertical ").concat(n,"-label,\n .").concat(r,"-col-24").concat(n,"-label,\n .").concat(r,"-col-xl-24").concat(n,"-label")]:S(e),["@media (max-width: ".concat((0,d.bf)(e.screenXSMax),")")]:[O(e),{[t]:{[".".concat(r,"-col-xs-24").concat(n,"-label")]:S(e)}}],["@media (max-width: ".concat((0,d.bf)(e.screenSMMax),")")]:{[t]:{[".".concat(r,"-col-sm-24").concat(n,"-label")]:S(e)}},["@media (max-width: ".concat((0,d.bf)(e.screenMDMax),")")]:{[t]:{[".".concat(r,"-col-md-24").concat(n,"-label")]:S(e)}},["@media (max-width: ".concat((0,d.bf)(e.screenLGMax),")")]:{[t]:{[".".concat(r,"-col-lg-24").concat(n,"-label")]:S(e)}}}},k=(e,t)=>(0,g.TS)(e,{formItemCls:"".concat(e.componentCls,"-item"),rootPrefixCls:t});var R=(0,h.I$)("Form",(e,t)=>{let{rootPrefixCls:n}=t,r=k(e,n);return[x(r),w(r),v(r),E(r),C(r),Z(r),m(r),p.kr]},e=>({labelRequiredMarkColor:e.colorError,labelColor:e.colorTextHeading,labelFontSize:e.fontSize,labelHeight:e.controlHeight,labelColonMarginInlineStart:e.marginXXS/2,labelColonMarginInlineEnd:e.marginXS,itemMarginBottom:e.marginLG,verticalLabelPadding:"0 0 ".concat(e.paddingXS,"px"),verticalLabelMargin:0}),{order:-1e3}),M=n(2935);let j=[];function P(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;return{key:"string"==typeof e?e:"".concat(t,"-").concat(r),error:e,errorStatus:n}}var N=e=>{let{help:t,helpStatus:n,errors:o=j,warnings:d=j,className:f,fieldId:p,onVisibleChanged:m}=e,{prefixCls:g}=c.useContext(s.Rk),h="".concat(g,"-item-explain"),v=(0,M.Z)(g),[b,y,x]=R(g,v),w=(0,c.useMemo)(()=>(0,l.Z)(g),[g]),E=u(o),C=u(d),S=c.useMemo(()=>null!=t?[P(t,"help",n)]:[].concat((0,r.Z)(E.map((e,t)=>P(e,"error","error",t))),(0,r.Z)(C.map((e,t)=>P(e,"warning","warning",t)))),[t,n,E,C]),O={};return p&&(O.id="".concat(p,"_help")),b(c.createElement(i.ZP,{motionDeadline:w.motionDeadline,motionName:"".concat(g,"-show-help"),visible:!!S.length,onVisibleChanged:m},e=>{let{className:t,style:n}=e;return c.createElement("div",Object.assign({},O,{className:a()(h,t,x,v,f,y),style:n,role:"alert"}),c.createElement(i.V4,Object.assign({keys:S},(0,l.Z)(g),{motionName:"".concat(g,"-show-help-item"),component:!1}),e=>{let{key:t,error:n,errorStatus:r,className:o,style:i}=e;return c.createElement("div",{key:t,className:a()(o,{["".concat(h,"-").concat(r)]:r}),style:i},n)}))}))},I=n(6570),T=n(7499),A=n(7094),F=n(4629),z=n(7303);let L=e=>"object"==typeof e&&null!=e&&1===e.nodeType,_=(e,t)=>(!t||"hidden"!==e)&&"visible"!==e&&"clip"!==e,B=(e,t)=>{if(e.clientHeight{let t=(e=>{if(!e.ownerDocument||!e.ownerDocument.defaultView)return null;try{return e.ownerDocument.defaultView.frameElement}catch(e){return null}})(e);return!!t&&(t.clientHeightat||a>e&&i=t&&c>=n?a-e-r:i>t&&cn?i-t+o:0,D=e=>{let t=e.parentElement;return null==t?e.getRootNode().host||null:t},W=(e,t)=>{var n,r,o,a;if("undefined"==typeof document)return[];let{scrollMode:i,block:c,inline:l,boundary:s,skipOverflowHiddenElements:u}=t,d="function"==typeof s?s:e=>e!==s;if(!L(e))throw TypeError("Invalid target");let f=document.scrollingElement||document.documentElement,p=[],m=e;for(;L(m)&&d(m);){if((m=D(m))===f){p.push(m);break}null!=m&&m===document.body&&B(m)&&!B(document.documentElement)||null!=m&&B(m,u)&&p.push(m)}let g=null!=(r=null==(n=window.visualViewport)?void 0:n.width)?r:innerWidth,h=null!=(a=null==(o=window.visualViewport)?void 0:o.height)?a:innerHeight,{scrollX:v,scrollY:b}=window,{height:y,width:x,top:w,right:E,bottom:C,left:S}=e.getBoundingClientRect(),{top:O,right:Z,bottom:k,left:R}=(e=>{let t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e),M="start"===c||"nearest"===c?w-O:"end"===c?C+k:w+y/2-O+k,j="center"===l?S+x/2-R+Z:"end"===l?E+Z:S-R,P=[];for(let e=0;e=0&&S>=0&&C<=h&&E<=g&&w>=o&&C<=s&&S>=u&&E<=a)break;let d=getComputedStyle(t),m=parseInt(d.borderLeftWidth,10),O=parseInt(d.borderTopWidth,10),Z=parseInt(d.borderRightWidth,10),k=parseInt(d.borderBottomWidth,10),R=0,N=0,I="offsetWidth"in t?t.offsetWidth-t.clientWidth-m-Z:0,T="offsetHeight"in t?t.offsetHeight-t.clientHeight-O-k:0,A="offsetWidth"in t?0===t.offsetWidth?0:r/t.offsetWidth:0,F="offsetHeight"in t?0===t.offsetHeight?0:n/t.offsetHeight:0;if(f===t)R="start"===c?M:"end"===c?M-h:"nearest"===c?H(b,b+h,h,O,k,b+M,b+M+y,y):M-h/2,N="start"===l?j:"center"===l?j-g/2:"end"===l?j-g:H(v,v+g,g,m,Z,v+j,v+j+x,x),R=Math.max(0,R+b),N=Math.max(0,N+v);else{R="start"===c?M-o-O:"end"===c?M-s+k+T:"nearest"===c?H(o,s,n,O,k+T,M,M+y,y):M-(o+n/2)+T/2,N="start"===l?j-u-m:"center"===l?j-(u+r/2)+I/2:"end"===l?j-a+Z+I:H(u,a,r,m,Z+I,j,j+x,x);let{scrollLeft:e,scrollTop:i}=t;R=0===F?0:Math.max(0,Math.min(i+R/F,t.scrollHeight-n/F+T)),N=0===A?0:Math.max(0,Math.min(e+N/A,t.scrollWidth-r/A+I)),M+=i-R,j+=e-N}P.push({el:t,top:R,left:N})}return P},V=e=>!1===e?{block:"end",inline:"nearest"}:e===Object(e)&&0!==Object.keys(e).length?e:{block:"start",inline:"nearest"},q=["parentNode"];function X(e){return void 0===e||!1===e?[]:Array.isArray(e)?e:[e]}function G(e,t){if(!e.length)return;let n=e.join("_");return t?"".concat(t,"_").concat(n):q.includes(n)?"".concat("form_item","_").concat(n):n}function U(e,t,n,r,o,a){let i=r;return void 0!==a?i=a:n.validating?i="validating":e.length?i="error":t.length?i="warning":(n.touched||o&&n.validated)&&(i="success"),i}function K(e){return X(e).join("_")}function $(e){let[t]=(0,I.cI)(),n=c.useRef({}),r=c.useMemo(()=>null!=e?e:Object.assign(Object.assign({},t),{__INTERNAL__:{itemRef:e=>t=>{let r=K(e);t?n.current[r]=t:delete n.current[r]}},scrollToField:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=G(X(e),r.__INTERNAL__.name),o=n?document.getElementById(n):null;o&&function(e,t){if(!e.isConnected||!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1})(e))return;let n=(e=>{let t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);if("object"==typeof t&&"function"==typeof t.behavior)return t.behavior(W(e,t));let r="boolean"==typeof t||null==t?void 0:t.behavior;for(let{el:o,top:a,left:i}of W(e,V(t))){let e=a-n.top+n.bottom,t=i-n.left+n.right;o.scroll({top:e,left:t,behavior:r})}}(o,Object.assign({scrollMode:"if-needed",block:"nearest"},t))},getFieldInstance:e=>{let t=K(e);return n.current[t]}}),[e,t]);return[r]}var Y=n(2519),Q=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let J=c.forwardRef((e,t)=>{let n=c.useContext(A.Z),{getPrefixCls:r,direction:o,form:i}=c.useContext(T.E_),{prefixCls:l,className:u,rootClassName:d,size:f,disabled:p=n,form:m,colon:g,labelAlign:h,labelWrap:v,labelCol:b,wrapperCol:y,hideRequiredMark:x,layout:w="horizontal",scrollToFirstError:E,requiredMark:C,onFinishFailed:S,name:O,style:Z,feedbackIcons:k,variant:j}=e,P=Q(e,["prefixCls","className","rootClassName","size","disabled","form","colon","labelAlign","labelWrap","labelCol","wrapperCol","hideRequiredMark","layout","scrollToFirstError","requiredMark","onFinishFailed","name","style","feedbackIcons","variant"]),N=(0,F.Z)(f),L=c.useContext(Y.Z),_=(0,c.useMemo)(()=>void 0!==C?C:!x&&(!i||void 0===i.requiredMark||i.requiredMark),[x,C,i]),B=null!=g?g:null==i?void 0:i.colon,H=r("form",l),D=(0,M.Z)(H),[W,V,q]=R(H,D),X=a()(H,"".concat(H,"-").concat(w),{["".concat(H,"-hide-required-mark")]:!1===_,["".concat(H,"-rtl")]:"rtl"===o,["".concat(H,"-").concat(N)]:N},q,D,V,null==i?void 0:i.className,u,d),[G]=$(m),{__INTERNAL__:U}=G;U.name=O;let K=(0,c.useMemo)(()=>({name:O,labelAlign:h,labelCol:b,labelWrap:v,wrapperCol:y,vertical:"vertical"===w,colon:B,requiredMark:_,itemRef:U.itemRef,form:G,feedbackIcons:k}),[O,h,b,y,w,B,_,G,k]);c.useImperativeHandle(t,()=>G);let J=(e,t)=>{if(e){let n={block:"nearest"};"object"==typeof e&&(n=e),G.scrollToField(t,n)}};return W(c.createElement(s.pg.Provider,{value:j},c.createElement(A.n,{disabled:p},c.createElement(z.Z.Provider,{value:N},c.createElement(s.RV,{validateMessages:L},c.createElement(s.q3.Provider,{value:K},c.createElement(I.ZP,Object.assign({id:O},P,{name:O,onFinishFailed:e=>{if(null==S||S(e),e.errorFields.length){let t=e.errorFields[0].name;if(void 0!==E){J(E,t);return}i&&void 0!==i.scrollToFirstError&&J(i.scrollToFirstError,t)}},form:G,style:Object.assign(Object.assign({},null==i?void 0:i.style),Z),className:X}))))))))});var ee=n(9211),et=n(4084),en=n(5823),er=n(9233),eo=n(3054);let ea=()=>{let{status:e,errors:t=[],warnings:n=[]}=(0,c.useContext)(s.aM);return{status:e,errors:t,warnings:n}};ea.Context=s.aM;var ei=n(9223),ec=n(3193),el=n(4800),es=n(5704),eu=n(4750);let ed=["xxl","xl","lg","md","sm","xs"],ef=e=>({xs:"(max-width: ".concat(e.screenXSMax,"px)"),sm:"(min-width: ".concat(e.screenSM,"px)"),md:"(min-width: ".concat(e.screenMD,"px)"),lg:"(min-width: ".concat(e.screenLG,"px)"),xl:"(min-width: ".concat(e.screenXL,"px)"),xxl:"(min-width: ".concat(e.screenXXL,"px)")}),ep=e=>{let t=[].concat(ed).reverse();return t.forEach((n,r)=>{let o=n.toUpperCase(),a="screen".concat(o,"Min"),i="screen".concat(o);if(!(e[a]<=e[i]))throw Error("".concat(a,"<=").concat(i," fails : !(").concat(e[a],"<=").concat(e[i],")"));if(r{let{componentCls:t}=e;return{[t]:{position:"relative",maxWidth:"100%",minHeight:1}}},eh=(e,t)=>{let{componentCls:n,gridColumns:r}=e,o={};for(let e=r;e>=0;e--)0===e?(o["".concat(n).concat(t,"-").concat(e)]={display:"none"},o["".concat(n,"-push-").concat(e)]={insetInlineStart:"auto"},o["".concat(n,"-pull-").concat(e)]={insetInlineEnd:"auto"},o["".concat(n).concat(t,"-push-").concat(e)]={insetInlineStart:"auto"},o["".concat(n).concat(t,"-pull-").concat(e)]={insetInlineEnd:"auto"},o["".concat(n).concat(t,"-offset-").concat(e)]={marginInlineStart:0},o["".concat(n).concat(t,"-order-").concat(e)]={order:0}):(o["".concat(n).concat(t,"-").concat(e)]=[{"--ant-display":"block",display:"block"},{display:"var(--ant-display)",flex:"0 0 ".concat(e/r*100,"%"),maxWidth:"".concat(e/r*100,"%")}],o["".concat(n).concat(t,"-push-").concat(e)]={insetInlineStart:"".concat(e/r*100,"%")},o["".concat(n).concat(t,"-pull-").concat(e)]={insetInlineEnd:"".concat(e/r*100,"%")},o["".concat(n).concat(t,"-offset-").concat(e)]={marginInlineStart:"".concat(e/r*100,"%")},o["".concat(n).concat(t,"-order-").concat(e)]={order:e});return o},ev=(e,t)=>eh(e,t),eb=(e,t,n)=>({["@media (min-width: ".concat((0,d.bf)(t),")")]:Object.assign({},ev(e,n))}),ey=(0,h.I$)("Grid",e=>{let{componentCls:t}=e;return{[t]:{display:"flex",flexFlow:"row wrap",minWidth:0,"&::before, &::after":{display:"flex"},"&-no-wrap":{flexWrap:"nowrap"},"&-start":{justifyContent:"flex-start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"flex-end"},"&-space-between":{justifyContent:"space-between"},"&-space-around":{justifyContent:"space-around"},"&-space-evenly":{justifyContent:"space-evenly"},"&-top":{alignItems:"flex-start"},"&-middle":{alignItems:"center"},"&-bottom":{alignItems:"flex-end"}}}},()=>({})),ex=(0,h.I$)("Grid",e=>{let t=(0,g.TS)(e,{gridColumns:24}),n={"-sm":t.screenSMMin,"-md":t.screenMDMin,"-lg":t.screenLGMin,"-xl":t.screenXLMin,"-xxl":t.screenXXLMin};return[eg(t),ev(t,""),ev(t,"-xs"),Object.keys(n).map(e=>eb(t,n[e],e)).reduce((e,t)=>Object.assign(Object.assign({},e),t),{})]},()=>({}));var ew=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function eE(e,t){let[n,r]=c.useState("string"==typeof e?e:""),o=()=>{if("string"==typeof e&&r(e),"object"==typeof e)for(let n=0;n{o()},[JSON.stringify(e),t]),n}let eC=c.forwardRef((e,t)=>{let{prefixCls:n,justify:r,align:o,className:i,style:l,children:s,gutter:u=0,wrap:d}=e,f=ew(e,["prefixCls","justify","align","className","style","children","gutter","wrap"]),{getPrefixCls:p,direction:m}=c.useContext(T.E_),[g,h]=c.useState({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),[v,b]=c.useState({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),y=eE(o,v),x=eE(r,v),w=c.useRef(u),E=function(){let[,e]=(0,eu.ZP)(),t=ef(ep(e));return c.useMemo(()=>{let e=new Map,n=-1,r={};return{matchHandlers:{},dispatch:t=>(r=t,e.forEach(e=>e(r)),e.size>=1),subscribe(t){return e.size||this.register(),n+=1,e.set(n,t),t(r),n},unsubscribe(t){e.delete(t),e.size||this.unregister()},unregister(){Object.keys(t).forEach(e=>{let n=t[e],r=this.matchHandlers[n];null==r||r.mql.removeListener(null==r?void 0:r.listener)}),e.clear()},register(){Object.keys(t).forEach(e=>{let n=t[e],o=t=>{let{matches:n}=t;this.dispatch(Object.assign(Object.assign({},r),{[e]:n}))},a=window.matchMedia(n);a.addListener(o),this.matchHandlers[n]={mql:a,listener:o},o(a)})},responsiveMap:t}},[e])}();c.useEffect(()=>{let e=E.subscribe(e=>{b(e);let t=w.current||0;(!Array.isArray(t)&&"object"==typeof t||Array.isArray(t)&&("object"==typeof t[0]||"object"==typeof t[1]))&&h(e)});return()=>E.unsubscribe(e)},[]);let C=p("row",n),[S,O,Z]=ey(C),k=(()=>{let e=[void 0,void 0];return(Array.isArray(u)?u:[u,void 0]).forEach((t,n)=>{if("object"==typeof t)for(let r=0;r0?-(k[0]/2):void 0;j&&(M.marginLeft=j,M.marginRight=j),[,M.rowGap]=k;let[P,N]=k,I=c.useMemo(()=>({gutter:[P,N],wrap:d}),[P,N,d]);return S(c.createElement(em.Provider,{value:I},c.createElement("div",Object.assign({},f,{className:R,style:Object.assign(Object.assign({},M),l),ref:t}),s)))});var eS=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let eO=["xs","sm","md","lg","xl","xxl"],eZ=c.forwardRef((e,t)=>{let{getPrefixCls:n,direction:r}=c.useContext(T.E_),{gutter:o,wrap:i}=c.useContext(em),{prefixCls:l,span:s,order:u,offset:d,push:f,pull:p,className:m,children:g,flex:h,style:v}=e,b=eS(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),y=n("col",l),[x,w,E]=ex(y),C={};eO.forEach(t=>{let n={},o=e[t];"number"==typeof o?n.span=o:"object"==typeof o&&(n=o||{}),delete b[t],C=Object.assign(Object.assign({},C),{["".concat(y,"-").concat(t,"-").concat(n.span)]:void 0!==n.span,["".concat(y,"-").concat(t,"-order-").concat(n.order)]:n.order||0===n.order,["".concat(y,"-").concat(t,"-offset-").concat(n.offset)]:n.offset||0===n.offset,["".concat(y,"-").concat(t,"-push-").concat(n.push)]:n.push||0===n.push,["".concat(y,"-").concat(t,"-pull-").concat(n.pull)]:n.pull||0===n.pull,["".concat(y,"-").concat(t,"-flex-").concat(n.flex)]:n.flex||"auto"===n.flex,["".concat(y,"-rtl")]:"rtl"===r})});let S=a()(y,{["".concat(y,"-").concat(s)]:void 0!==s,["".concat(y,"-order-").concat(u)]:u,["".concat(y,"-offset-").concat(d)]:d,["".concat(y,"-push-").concat(f)]:f,["".concat(y,"-pull-").concat(p)]:p},m,C,w,E),O={};if(o&&o[0]>0){let e=o[0]/2;O.paddingLeft=e,O.paddingRight=e}return h&&(O.flex="number"==typeof h?"".concat(h," ").concat(h," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(h)?"0 0 ".concat(h):h,!1!==i||O.minWidth||(O.minWidth=0)),x(c.createElement("div",Object.assign({},b,{style:Object.assign(Object.assign({},O),v),className:S,ref:t}),g))}),ek=e=>{let{formItemCls:t}=e;return{"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)":{["".concat(t,"-control")]:{display:"flex"}}}};var eR=(0,h.bk)(["Form","item-item"],(e,t)=>{let{rootPrefixCls:n}=t;return[ek(k(e,n))]}),eM=e=>{let{prefixCls:t,status:n,wrapperCol:r,children:o,errors:i,warnings:l,_internalItemRender:u,extra:d,help:f,fieldId:p,marginBottom:m,onErrorVisibleChanged:g}=e,h="".concat(t,"-item"),v=c.useContext(s.q3),b=r||v.wrapperCol||{},y=a()("".concat(h,"-control"),b.className),x=c.useMemo(()=>Object.assign({},v),[v]);delete x.labelCol,delete x.wrapperCol;let w=c.createElement("div",{className:"".concat(h,"-control-input")},c.createElement("div",{className:"".concat(h,"-control-input-content")},o)),E=c.useMemo(()=>({prefixCls:t,status:n}),[t,n]),C=null!==m||i.length||l.length?c.createElement("div",{style:{display:"flex",flexWrap:"nowrap"}},c.createElement(s.Rk.Provider,{value:E},c.createElement(N,{fieldId:p,errors:i,warnings:l,help:f,helpStatus:n,className:"".concat(h,"-explain-connected"),onVisibleChanged:g})),!!m&&c.createElement("div",{style:{width:0,height:m}})):null,S={};p&&(S.id="".concat(p,"_extra"));let O=d?c.createElement("div",Object.assign({},S,{className:"".concat(h,"-extra")}),d):null,Z=u&&"pro_table_render"===u.mark&&u.render?u.render(e,{input:w,errorList:C,extra:O}):c.createElement(c.Fragment,null,w,C,O);return c.createElement(s.q3.Provider,{value:x},c.createElement(eZ,Object.assign({},b,{className:y}),Z),c.createElement(eR,{prefixCls:t}))},ej=n(2110),eP={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"question-circle",theme:"outlined"},eN=n(688),eI=c.forwardRef(function(e,t){return c.createElement(eN.Z,(0,ej.Z)({},e,{ref:t,icon:eP}))}),eT=n(9474),eA=n(595);function eF(e){var t=e.children,n=e.prefixCls,r=e.id,o=e.overlayInnerStyle,i=e.className,l=e.style;return c.createElement("div",{className:a()("".concat(n,"-content"),i),style:l},c.createElement("div",{className:"".concat(n,"-inner"),id:r,role:"tooltip",style:o},"function"==typeof t?t():t))}var ez=n(5239),eL=n(6787),e_=n(1737),eB={shiftX:64,adjustY:1},eH={adjustX:1,shiftY:!0},eD=[0,0],eW={left:{points:["cr","cl"],overflow:eH,offset:[-4,0],targetOffset:eD},right:{points:["cl","cr"],overflow:eH,offset:[4,0],targetOffset:eD},top:{points:["bc","tc"],overflow:eB,offset:[0,-4],targetOffset:eD},bottom:{points:["tc","bc"],overflow:eB,offset:[0,4],targetOffset:eD},topLeft:{points:["bl","tl"],overflow:eB,offset:[0,-4],targetOffset:eD},leftTop:{points:["tr","tl"],overflow:eH,offset:[-4,0],targetOffset:eD},topRight:{points:["br","tr"],overflow:eB,offset:[0,-4],targetOffset:eD},rightTop:{points:["tl","tr"],overflow:eH,offset:[4,0],targetOffset:eD},bottomRight:{points:["tr","br"],overflow:eB,offset:[0,4],targetOffset:eD},rightBottom:{points:["bl","br"],overflow:eH,offset:[4,0],targetOffset:eD},bottomLeft:{points:["tl","bl"],overflow:eB,offset:[0,4],targetOffset:eD},leftBottom:{points:["br","bl"],overflow:eH,offset:[-4,0],targetOffset:eD}},eV=["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","children","onVisibleChange","afterVisibleChange","transitionName","animation","motion","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer","overlayInnerStyle","arrowContent","overlay","id","showArrow"],eq=(0,c.forwardRef)(function(e,t){var n=e.overlayClassName,r=e.trigger,o=e.mouseEnterDelay,a=e.mouseLeaveDelay,i=e.overlayStyle,l=e.prefixCls,s=void 0===l?"rc-tooltip":l,u=e.children,d=e.onVisibleChange,f=e.afterVisibleChange,p=e.transitionName,m=e.animation,g=e.motion,h=e.placement,v=e.align,b=e.destroyTooltipOnHide,y=e.defaultVisible,x=e.getTooltipContainer,w=e.overlayInnerStyle,E=(e.arrowContent,e.overlay),C=e.id,S=e.showArrow,O=(0,eL.Z)(e,eV),Z=(0,c.useRef)(null);(0,c.useImperativeHandle)(t,function(){return Z.current});var k=(0,ez.Z)({},O);return"visible"in e&&(k.popupVisible=e.visible),c.createElement(e_.Z,(0,ej.Z)({popupClassName:n,prefixCls:s,popup:function(){return c.createElement(eF,{key:"content",prefixCls:s,id:C,overlayInnerStyle:w},E)},action:void 0===r?["hover"]:r,builtinPlacements:eW,popupPlacement:void 0===h?"right":h,ref:Z,popupAlign:void 0===v?{}:v,getPopupContainer:x,onPopupVisibleChange:d,afterPopupVisibleChange:f,popupTransitionName:p,popupAnimation:m,popupMotion:g,defaultPopupVisible:y,autoDestroy:void 0!==b&&b,mouseLeaveDelay:void 0===a?.1:a,popupStyle:i,mouseEnterDelay:void 0===o?0:o,arrow:void 0===S||S},k),u)}),eX=n(4329),eG=n(1761);let eU=(e,t,n)=>{let{sizePopupArrow:r,arrowPolygon:o,arrowPath:a,arrowShadowWidth:i,borderRadiusXS:c,calc:l}=e;return{pointerEvents:"none",width:r,height:r,overflow:"hidden","&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:r,height:l(r).div(2).equal(),background:t,clipPath:{_multi_value_:!0,value:[o,a]},content:'""'},"&::after":{content:'""',position:"absolute",width:i,height:i,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:"0 0 ".concat((0,d.bf)(c)," 0")},transform:"translateY(50%) rotate(-135deg)",boxShadow:n,zIndex:0,background:"transparent"}}};function eK(e){let{contentRadius:t,limitVerticalRadius:n}=e,r=t>12?t+2:12;return{arrowOffsetHorizontal:r,arrowOffsetVertical:n?8:r}}let e$={left:{points:["cr","cl"]},right:{points:["cl","cr"]},top:{points:["bc","tc"]},bottom:{points:["tc","bc"]},topLeft:{points:["bl","tl"]},leftTop:{points:["tr","tl"]},topRight:{points:["br","tr"]},rightTop:{points:["tl","tr"]},bottomRight:{points:["tr","br"]},rightBottom:{points:["bl","br"]},bottomLeft:{points:["tl","bl"]},leftBottom:{points:["br","bl"]}},eY={topLeft:{points:["bl","tc"]},leftTop:{points:["tr","cl"]},topRight:{points:["br","tc"]},rightTop:{points:["tl","cr"]},bottomRight:{points:["tr","bc"]},rightBottom:{points:["bl","cr"]},bottomLeft:{points:["tl","bc"]},leftBottom:{points:["br","cl"]}},eQ=new Set(["topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]);var eJ=n(6718),e0=n(2801);let e1=["blue","purple","cyan","green","magenta","pink","red","orange","yellow","volcano","geekblue","lime","gold"],e2=e=>{var t;let{componentCls:n,tooltipMaxWidth:r,tooltipColor:o,tooltipBg:a,tooltipBorderRadius:i,zIndexPopup:c,controlHeight:l,boxShadowSecondary:s,paddingSM:u,paddingXS:p}=e;return[{[n]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,f.Wf)(e)),{position:"absolute",zIndex:c,display:"block",width:"max-content",maxWidth:r,visibility:"visible",transformOrigin:"var(--arrow-x, 50%) var(--arrow-y, 50%)","&-hidden":{display:"none"},"--antd-arrow-background-color":a,["".concat(n,"-inner")]:{minWidth:l,minHeight:l,padding:"".concat((0,d.bf)(e.calc(u).div(2).equal())," ").concat((0,d.bf)(p)),color:o,textAlign:"start",textDecoration:"none",wordWrap:"break-word",backgroundColor:a,borderRadius:i,boxShadow:s,boxSizing:"border-box"},"&-placement-left,&-placement-leftTop,&-placement-leftBottom,&-placement-right,&-placement-rightTop,&-placement-rightBottom":{["".concat(n,"-inner")]:{borderRadius:e.min(i,8)}},["".concat(n,"-content")]:{position:"relative"}}),(t=(e,t)=>{let{darkColor:r}=t;return{["&".concat(n,"-").concat(e)]:{["".concat(n,"-inner")]:{backgroundColor:r},["".concat(n,"-arrow")]:{"--antd-arrow-background-color":r}}}},e1.reduce((n,r)=>{let o=e["".concat(r,"1")],a=e["".concat(r,"3")],i=e["".concat(r,"6")],c=e["".concat(r,"7")];return Object.assign(Object.assign({},n),t(r,{lightColor:o,lightBorderColor:a,darkColor:i,textColor:c}))},{}))),{"&-rtl":{direction:"rtl"}})},function(e,t,n){var r,o,a,i,c,l,s,u;let{componentCls:d,boxShadowPopoverArrow:f,arrowOffsetVertical:p,arrowOffsetHorizontal:m}=e,{arrowDistance:g=0,arrowPlacement:h={left:!0,right:!0,top:!0,bottom:!0}}={};return{[d]:Object.assign(Object.assign(Object.assign(Object.assign({["".concat(d,"-arrow")]:[Object.assign(Object.assign({position:"absolute",zIndex:1,display:"block"},eU(e,t,f)),{"&:before":{background:t}})]},(r=!!h.top,o={[["&-placement-top > ".concat(d,"-arrow"),"&-placement-topLeft > ".concat(d,"-arrow"),"&-placement-topRight > ".concat(d,"-arrow")].join(",")]:{bottom:g,transform:"translateY(100%) rotate(180deg)"},["&-placement-top > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},["&-placement-topLeft > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:m}},["&-placement-topRight > ".concat(d,"-arrow")]:{right:{_skip_check_:!0,value:m}}},r?o:{})),(a=!!h.bottom,i={[["&-placement-bottom > ".concat(d,"-arrow"),"&-placement-bottomLeft > ".concat(d,"-arrow"),"&-placement-bottomRight > ".concat(d,"-arrow")].join(",")]:{top:g,transform:"translateY(-100%)"},["&-placement-bottom > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},["&-placement-bottomLeft > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:m}},["&-placement-bottomRight > ".concat(d,"-arrow")]:{right:{_skip_check_:!0,value:m}}},a?i:{})),(c=!!h.left,l={[["&-placement-left > ".concat(d,"-arrow"),"&-placement-leftTop > ".concat(d,"-arrow"),"&-placement-leftBottom > ".concat(d,"-arrow")].join(",")]:{right:{_skip_check_:!0,value:g},transform:"translateX(100%) rotate(90deg)"},["&-placement-left > ".concat(d,"-arrow")]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},["&-placement-leftTop > ".concat(d,"-arrow")]:{top:p},["&-placement-leftBottom > ".concat(d,"-arrow")]:{bottom:p}},c?l:{})),(s=!!h.right,u={[["&-placement-right > ".concat(d,"-arrow"),"&-placement-rightTop > ".concat(d,"-arrow"),"&-placement-rightBottom > ".concat(d,"-arrow")].join(",")]:{left:{_skip_check_:!0,value:g},transform:"translateX(-100%) rotate(-90deg)"},["&-placement-right > ".concat(d,"-arrow")]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},["&-placement-rightTop > ".concat(d,"-arrow")]:{top:p},["&-placement-rightBottom > ".concat(d,"-arrow")]:{bottom:p}},s?u:{}))}}(e,"var(--antd-arrow-background-color)"),{["".concat(n,"-pure")]:{position:"relative",maxWidth:"none",margin:e.sizePopupArrow}}]},e4=e=>Object.assign(Object.assign({zIndexPopup:e.zIndexPopupBase+70},eK({contentRadius:e.borderRadius,limitVerticalRadius:!0})),function(e){let{sizePopupArrow:t,borderRadiusXS:n,borderRadiusOuter:r}=e,o=t/2,a=1*r/Math.sqrt(2),i=o-r*(1-1/Math.sqrt(2)),c=o-1/Math.sqrt(2)*n,l=r*(Math.sqrt(2)-1)+1/Math.sqrt(2)*n,s=2*o-c,u=2*o-a,d=2*o-0,f=o*Math.sqrt(2)+r*(Math.sqrt(2)-2),p=r*(Math.sqrt(2)-1),m="polygon(".concat(p,"px 100%, 50% ").concat(p,"px, ").concat(2*o-p,"px 100%, ").concat(p,"px 100%)");return{arrowShadowWidth:f,arrowPath:"path('M ".concat(0," ").concat(o," A ").concat(r," ").concat(r," 0 0 0 ").concat(a," ").concat(i," L ").concat(c," ").concat(l," A ").concat(n," ").concat(n," 0 0 1 ").concat(s," ").concat(l," L ").concat(u," ").concat(i," A ").concat(r," ").concat(r," 0 0 0 ").concat(d," ").concat(o," Z')"),arrowPolygon:m}}((0,g.TS)(e,{borderRadiusOuter:Math.min(e.borderRadiusOuter,4)})));function e5(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return(0,h.I$)("Tooltip",e=>{let{borderRadius:t,colorTextLightSolid:n,colorBgSpotlight:r}=e;return[e2((0,g.TS)(e,{tooltipMaxWidth:250,tooltipColor:n,tooltipBorderRadius:t,tooltipBg:r})),(0,p._y)(e,"zoom-big-fast")]},e4,{resetStyle:!1,injectStyle:t})(e)}let e3=e1.map(e=>"".concat(e,"-inverse"));function e6(e,t){let n=function(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return t?[].concat((0,r.Z)(e3),(0,r.Z)(e1)).includes(e):e1.includes(e)}(t),o=a()({["".concat(e,"-").concat(t)]:t&&n}),i={},c={};return t&&!n&&(i.background=t,c["--antd-arrow-background-color"]=t),{className:o,overlayStyle:i,arrowStyle:c}}var e8=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let e9=c.forwardRef((e,t)=>{var n,r;let{prefixCls:o,openClassName:i,getTooltipContainer:s,overlayClassName:u,color:d,overlayInnerStyle:f,children:p,afterOpenChange:m,afterVisibleChange:g,destroyTooltipOnHide:h,arrow:v=!0,title:b,overlay:y,builtinPlacements:x,arrowPointAtCenter:w=!1,autoAdjustOverflow:E=!0}=e,C=!!v,[,S]=(0,eu.ZP)(),{getPopupContainer:O,getPrefixCls:Z,direction:k}=c.useContext(T.E_),R=(0,er.ln)("Tooltip"),M=c.useRef(null),j=()=>{var e;null===(e=M.current)||void 0===e||e.forceAlign()};c.useImperativeHandle(t,()=>({forceAlign:j,forcePopupAlign:()=>{R.deprecated(!1,"forcePopupAlign","forceAlign"),j()}}));let[P,N]=(0,eX.Z)(!1,{value:null!==(n=e.open)&&void 0!==n?n:e.visible,defaultValue:null!==(r=e.defaultOpen)&&void 0!==r?r:e.defaultVisible}),I=!b&&!y&&0!==b,A=c.useMemo(()=>{var e,t;let n=w;return"object"==typeof v&&(n=null!==(t=null!==(e=v.pointAtCenter)&&void 0!==e?e:v.arrowPointAtCenter)&&void 0!==t?t:w),x||function(e){let{arrowWidth:t,autoAdjustOverflow:n,arrowPointAtCenter:r,offset:o,borderRadius:a,visibleFirst:i}=e,c=t/2,l={};return Object.keys(e$).forEach(e=>{let s=Object.assign(Object.assign({},r&&eY[e]||e$[e]),{offset:[0,0],dynamicInset:!0});switch(l[e]=s,eQ.has(e)&&(s.autoArrow=!1),e){case"top":case"topLeft":case"topRight":s.offset[1]=-c-o;break;case"bottom":case"bottomLeft":case"bottomRight":s.offset[1]=c+o;break;case"left":case"leftTop":case"leftBottom":s.offset[0]=-c-o;break;case"right":case"rightTop":case"rightBottom":s.offset[0]=c+o}let u=eK({contentRadius:a,limitVerticalRadius:!0});if(r)switch(e){case"topLeft":case"bottomLeft":s.offset[0]=-u.arrowOffsetHorizontal-c;break;case"topRight":case"bottomRight":s.offset[0]=u.arrowOffsetHorizontal+c;break;case"leftTop":case"rightTop":s.offset[1]=-u.arrowOffsetHorizontal-c;break;case"leftBottom":case"rightBottom":s.offset[1]=u.arrowOffsetHorizontal+c}s.overflow=function(e,t,n,r){if(!1===r)return{adjustX:!1,adjustY:!1};let o={};switch(e){case"top":case"bottom":o.shiftX=2*t.arrowOffsetHorizontal+n,o.shiftY=!0,o.adjustY=!0;break;case"left":case"right":o.shiftY=2*t.arrowOffsetVertical+n,o.shiftX=!0,o.adjustX=!0}let a=Object.assign(Object.assign({},o),r&&"object"==typeof r?r:{});return a.shiftX||(a.adjustX=!0),a.shiftY||(a.adjustY=!0),a}(e,u,t,n),i&&(s.htmlRegion="visibleFirst")}),l}({arrowPointAtCenter:n,autoAdjustOverflow:E,arrowWidth:C?S.sizePopupArrow:0,borderRadius:S.borderRadius,offset:S.marginXXS,visibleFirst:!0})},[w,v,x,S]),F=c.useMemo(()=>0===b?b:y||b||"",[y,b]),z=c.createElement(e0.BR,null,"function"==typeof F?F():F),{getPopupContainer:L,placement:_="top",mouseEnterDelay:B=.1,mouseLeaveDelay:H=.1,overlayStyle:D,rootClassName:W}=e,V=e8(e,["getPopupContainer","placement","mouseEnterDelay","mouseLeaveDelay","overlayStyle","rootClassName"]),q=Z("tooltip",o),X=Z(),G=e["data-popover-inject"],U=P;"open"in e||"visible"in e||!I||(U=!1);let K=(0,en.l$)(p)&&!(0,en.M2)(p)?p:c.createElement("span",null,p),$=K.props,Y=$.className&&"string"!=typeof $.className?$.className:a()($.className,i||"".concat(q,"-open")),[Q,J,ee]=e5(q,!G),et=e6(q,d),eo=et.arrowStyle,ea=Object.assign(Object.assign({},f),et.overlayStyle),ei=a()(u,{["".concat(q,"-rtl")]:"rtl"===k},et.className,W,J,ee),[ec,el]=(0,eG.Cn)("Tooltip",V.zIndex),es=c.createElement(eq,Object.assign({},V,{zIndex:ec,showArrow:C,placement:_,mouseEnterDelay:B,mouseLeaveDelay:H,prefixCls:q,overlayClassName:ei,overlayStyle:Object.assign(Object.assign({},eo),D),getTooltipContainer:L||s||O,ref:M,builtinPlacements:A,overlay:z,visible:U,onVisibleChange:t=>{var n,r;N(!I&&t),I||(null===(n=e.onOpenChange)||void 0===n||n.call(e,t),null===(r=e.onVisibleChange)||void 0===r||r.call(e,t))},afterVisibleChange:null!=m?m:g,overlayInnerStyle:ea,arrowContent:c.createElement("span",{className:"".concat(q,"-arrow-content")}),motion:{motionName:(0,l.m)(X,"zoom-big-fast",e.transitionName),motionDeadline:1e3},destroyTooltipOnHide:!!h}),U?(0,en.Tm)(K,{className:Y}):K);return Q(c.createElement(eJ.Z.Provider,{value:el},es))});e9._InternalPanelDoNotUseOrYouWillBeFired=e=>{let{prefixCls:t,className:n,placement:r="top",title:o,color:i,overlayInnerStyle:l}=e,{getPrefixCls:s}=c.useContext(T.E_),u=s("tooltip",t),[d,f,p]=e5(u),m=e6(u,i),g=m.arrowStyle,h=Object.assign(Object.assign({},l),m.overlayStyle),v=a()(f,p,u,"".concat(u,"-pure"),"".concat(u,"-placement-").concat(r),n,m.className);return d(c.createElement("div",{className:v,style:g},c.createElement("div",{className:"".concat(u,"-arrow")}),c.createElement(eF,Object.assign({},e,{className:f,prefixCls:u,overlayInnerStyle:h}),o)))};var e7=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},te=e=>{var t;let{prefixCls:n,label:r,htmlFor:o,labelCol:i,labelAlign:l,colon:u,required:d,requiredMark:f,tooltip:p}=e,[m]=(0,eA.Z)("Form"),{vertical:g,labelAlign:h,labelCol:v,labelWrap:b,colon:y}=c.useContext(s.q3);if(!r)return null;let x=i||v||{},w="".concat(n,"-item-label"),E=a()(w,"left"===(l||h)&&"".concat(w,"-left"),x.className,{["".concat(w,"-wrap")]:!!b}),C=r,S=!0===u||!1!==y&&!1!==u;S&&!g&&"string"==typeof r&&""!==r.trim()&&(C=r.replace(/[:|:]\s*$/,""));let O=p?"object"!=typeof p||c.isValidElement(p)?{title:p}:p:null;if(O){let{icon:e=c.createElement(eI,null)}=O,t=e7(O,["icon"]),r=c.createElement(e9,Object.assign({},t),c.cloneElement(e,{className:"".concat(n,"-item-tooltip"),title:"",onClick:e=>{e.preventDefault()},tabIndex:null}));C=c.createElement(c.Fragment,null,C,r)}let Z="optional"===f,k="function"==typeof f;k?C=f(C,{required:!!d}):Z&&!d&&(C=c.createElement(c.Fragment,null,C,c.createElement("span",{className:"".concat(n,"-item-optional"),title:""},(null==m?void 0:m.optional)||(null===(t=eT.Z.Form)||void 0===t?void 0:t.optional))));let R=a()({["".concat(n,"-item-required")]:d,["".concat(n,"-item-required-mark-optional")]:Z||k,["".concat(n,"-item-no-colon")]:!S});return c.createElement(eZ,Object.assign({},x,{className:E}),c.createElement("label",{htmlFor:o,className:R,title:"string"==typeof r?r:""},C))},tt=n(9537),tn=n(7136),tr=n(653),to=n(9334);let ta={success:tt.Z,warning:tr.Z,error:tn.Z,validating:to.Z};function ti(e){let{children:t,errors:n,warnings:r,hasFeedback:o,validateStatus:i,prefixCls:l,meta:u,noStyle:d}=e,f="".concat(l,"-item"),{feedbackIcons:p}=c.useContext(s.q3),m=U(n,r,u,null,!!o,i),{isFormItemInput:g,status:h,hasFeedback:v,feedbackIcon:b}=c.useContext(s.aM),y=c.useMemo(()=>{var e;let t;if(o){let i=!0!==o&&o.icons||p,l=m&&(null===(e=null==i?void 0:i({status:m,errors:n,warnings:r}))||void 0===e?void 0:e[m]),s=m&&ta[m];t=!1!==l&&s?c.createElement("span",{className:a()("".concat(f,"-feedback-icon"),"".concat(f,"-feedback-icon-").concat(m))},l||c.createElement(s,null)):null}let i={status:m||"",errors:n,warnings:r,hasFeedback:!!o,feedbackIcon:t,isFormItemInput:!0};return d&&(i.status=(null!=m?m:h)||"",i.isFormItemInput=g,i.hasFeedback=!!(null!=o?o:v),i.feedbackIcon=void 0!==o?i.feedbackIcon:b),i},[m,o,d,g,h]);return c.createElement(s.aM.Provider,{value:y},t)}var tc=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function tl(e){let{prefixCls:t,className:n,rootClassName:r,style:o,help:i,errors:l,warnings:d,validateStatus:f,meta:p,hasFeedback:m,hidden:g,children:h,fieldId:v,required:b,isRequired:y,onSubItemMetaChange:x}=e,w=tc(e,["prefixCls","className","rootClassName","style","help","errors","warnings","validateStatus","meta","hasFeedback","hidden","children","fieldId","required","isRequired","onSubItemMetaChange"]),E="".concat(t,"-item"),{requiredMark:C}=c.useContext(s.q3),S=c.useRef(null),O=u(l),Z=u(d),k=null!=i,R=!!(k||l.length||d.length),M=!!S.current&&(0,ec.Z)(S.current),[j,P]=c.useState(null);(0,el.Z)(()=>{R&&S.current&&P(parseInt(getComputedStyle(S.current).marginBottom,10))},[R,M]);let N=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return U(e?O:p.errors,e?Z:p.warnings,p,"",!!m,f)}(),I=a()(E,n,r,{["".concat(E,"-with-help")]:k||O.length||Z.length,["".concat(E,"-has-feedback")]:N&&m,["".concat(E,"-has-success")]:"success"===N,["".concat(E,"-has-warning")]:"warning"===N,["".concat(E,"-has-error")]:"error"===N,["".concat(E,"-is-validating")]:"validating"===N,["".concat(E,"-hidden")]:g});return c.createElement("div",{className:I,style:o,ref:S},c.createElement(eC,Object.assign({className:"".concat(E,"-row")},(0,es.Z)(w,["_internalItemRender","colon","dependencies","extra","fieldKey","getValueFromEvent","getValueProps","htmlFor","id","initialValue","isListField","label","labelAlign","labelCol","labelWrap","messageVariables","name","normalize","noStyle","preserve","requiredMark","rules","shouldUpdate","trigger","tooltip","validateFirst","validateTrigger","valuePropName","wrapperCol","validateDebounce"])),c.createElement(te,Object.assign({htmlFor:v},e,{requiredMark:C,required:null!=b?b:y,prefixCls:t})),c.createElement(eM,Object.assign({},e,p,{errors:O,warnings:Z,prefixCls:t,status:N,help:i,marginBottom:j,onErrorVisibleChanged:e=>{e||P(null)}}),c.createElement(s.qI.Provider,{value:x},c.createElement(ti,{prefixCls:t,meta:p,errors:p.errors,warnings:p.warnings,hasFeedback:m,validateStatus:N},h)))),!!j&&c.createElement("div",{className:"".concat(E,"-margin-offset"),style:{marginBottom:-j}}))}let ts=c.memo(e=>{let{children:t}=e;return t},(e,t)=>(function(e,t){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>{let r=e[n],o=t[n];return r===o||"function"==typeof r||"function"==typeof o})})(e.control,t.control)&&e.update===t.update&&e.childProps.length===t.childProps.length&&e.childProps.every((e,n)=>e===t.childProps[n]));function tu(){return{errors:[],warnings:[],touched:!1,validating:!1,name:[],validated:!1}}let td=function(e){let{name:t,noStyle:n,className:o,dependencies:i,prefixCls:l,shouldUpdate:u,rules:d,children:f,required:p,label:m,messageVariables:g,trigger:h="onChange",validateTrigger:v,hidden:b,help:y}=e,{getPrefixCls:x}=c.useContext(T.E_),{name:w}=c.useContext(s.q3),E=function(e){if("function"==typeof e)return e;let t=(0,eo.Z)(e);return t.length<=1?t[0]:t}(f),C="function"==typeof E,S=c.useContext(s.qI),{validateTrigger:O}=c.useContext(I.zb),Z=void 0!==v?v:O,k=null!=t,j=x("form",l),P=(0,M.Z)(j),[N,A,F]=R(j,P);(0,er.ln)("Form.Item");let z=c.useContext(I.ZM),L=c.useRef(),[_,B]=function(e){let[t,n]=c.useState(e),r=(0,c.useRef)(null),o=(0,c.useRef)([]),a=(0,c.useRef)(!1);return c.useEffect(()=>(a.current=!1,()=>{a.current=!0,ei.Z.cancel(r.current),r.current=null}),[]),[t,function(e){a.current||(null===r.current&&(o.current=[],r.current=(0,ei.Z)(()=>{r.current=null,n(e=>{let t=e;return o.current.forEach(e=>{t=e(t)}),t})})),o.current.push(e))}]}({}),[H,D]=(0,ee.Z)(()=>tu()),W=(e,t)=>{B(n=>{let o=Object.assign({},n),a=[].concat((0,r.Z)(e.name.slice(0,-1)),(0,r.Z)(t)).join("__SPLIT__");return e.destroy?delete o[a]:o[a]=e,o})},[V,q]=c.useMemo(()=>{let e=(0,r.Z)(H.errors),t=(0,r.Z)(H.warnings);return Object.values(_).forEach(n=>{e.push.apply(e,(0,r.Z)(n.errors||[])),t.push.apply(t,(0,r.Z)(n.warnings||[]))}),[e,t]},[_,H.errors,H.warnings]),U=function(){let{itemRef:e}=c.useContext(s.q3),t=c.useRef({});return function(n,r){let o=r&&"object"==typeof r&&r.ref,a=n.join("_");return(t.current.name!==a||t.current.originRef!==o)&&(t.current.name=a,t.current.originRef=o,t.current.ref=(0,et.sQ)(e(n),o)),t.current.ref}}();function K(t,r,i){return n&&!b?c.createElement(ti,{prefixCls:j,hasFeedback:e.hasFeedback,validateStatus:e.validateStatus,meta:H,errors:V,warnings:q,noStyle:!0},t):c.createElement(tl,Object.assign({key:"row"},e,{className:a()(o,F,P,A),prefixCls:j,fieldId:r,isRequired:i,errors:V,warnings:q,meta:H,onSubItemMetaChange:W}),t)}if(!k&&!C&&!i)return N(K(E));let $={};return"string"==typeof m?$.label=m:t&&($.label=String(t)),g&&($=Object.assign(Object.assign({},$),g)),N(c.createElement(I.gN,Object.assign({},e,{messageVariables:$,trigger:h,validateTrigger:Z,onMetaChange:e=>{let t=null==z?void 0:z.getKey(e.name);if(D(e.destroy?tu():e,!0),n&&!1!==y&&S){let n=e.name;if(e.destroy)n=L.current||n;else if(void 0!==t){let[e,o]=t;n=[e].concat((0,r.Z)(o)),L.current=n}S(e,n)}}}),(n,o,a)=>{let l=X(t).length&&o?o.name:[],s=G(l,w),f=void 0!==p?p:!!(d&&d.some(e=>{if(e&&"object"==typeof e&&e.required&&!e.warningOnly)return!0;if("function"==typeof e){let t=e(a);return t&&t.required&&!t.warningOnly}return!1})),m=Object.assign({},n),g=null;if(Array.isArray(E)&&k)g=E;else if(C&&(!(u||i)||k));else if(!i||C||k){if((0,en.l$)(E)){let t=Object.assign(Object.assign({},E.props),m);if(t.id||(t.id=s),y||V.length>0||q.length>0||e.extra){let n=[];(y||V.length>0)&&n.push("".concat(s,"_help")),e.extra&&n.push("".concat(s,"_extra")),t["aria-describedby"]=n.join(" ")}V.length>0&&(t["aria-invalid"]="true"),f&&(t["aria-required"]="true"),(0,et.Yr)(E)&&(t.ref=U(l,E)),new Set([].concat((0,r.Z)(X(h)),(0,r.Z)(X(Z)))).forEach(e=>{t[e]=function(){for(var t,n,r,o=arguments.length,a=Array(o),i=0;it.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};J.Item=td,J.List=e=>{var{prefixCls:t,children:n}=e,r=tf(e,["prefixCls","children"]);let{getPrefixCls:o}=c.useContext(T.E_),a=o("form",t),i=c.useMemo(()=>({prefixCls:a,status:"error"}),[a]);return c.createElement(I.aV,Object.assign({},r),(e,t,r)=>c.createElement(s.Rk.Provider,{value:i},n(e.map(e=>Object.assign(Object.assign({},e),{fieldKey:e.key})),t,{errors:r.errors,warnings:r.warnings})))},J.ErrorList=N,J.useForm=$,J.useFormInstance=function(){let{form:e}=(0,c.useContext)(s.q3);return e},J.useWatch=I.qo,J.Provider=s.RV,J.create=()=>{};var tp=J},2519:function(e,t,n){var r=n(4090);t.Z=(0,r.createContext)(void 0)},8707:function(e,t,n){n.d(t,{Z:function(){return em}});var r=n(4090),o=n(383),a=n(2110),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z"}}]},name:"up",theme:"outlined"},c=n(688),l=r.forwardRef(function(e,t){return r.createElement(c.Z,(0,a.Z)({},e,{ref:t,icon:i}))}),s=n(6480),u=n.n(s),d=n(833),f=n(6976),p=n(406),m=n(6787),g=n(7365),h=n(5127);function v(){return"function"==typeof BigInt}function b(e){return!e&&0!==e&&!Number.isNaN(e)||!String(e).trim()}function y(e){var t=e.trim(),n=t.startsWith("-");n&&(t=t.slice(1)),(t=t.replace(/(\.\d*[^0])0*$/,"$1").replace(/\.0*$/,"").replace(/^0+/,"")).startsWith(".")&&(t="0".concat(t));var r=t||"0",o=r.split("."),a=o[0]||"0",i=o[1]||"0";"0"===a&&"0"===i&&(n=!1);var c=n?"-":"";return{negative:n,negativeStr:c,trimStr:r,integerStr:a,decimalStr:i,fullStr:"".concat(c).concat(r)}}function x(e){var t=String(e);return!Number.isNaN(Number(t))&&t.includes("e")}function w(e){var t=String(e);if(x(e)){var n=Number(t.slice(t.indexOf("e-")+2)),r=t.match(/\.(\d+)/);return null!=r&&r[1]&&(n+=r[1].length),n}return t.includes(".")&&C(t)?t.length-t.indexOf(".")-1:0}function E(e){var t=String(e);if(x(e)){if(e>Number.MAX_SAFE_INTEGER)return String(v()?BigInt(e).toString():Number.MAX_SAFE_INTEGER);if(e=this.add(e.negate().toString()).toNumber()}},{key:"toNumber",value:function(){return this.isNaN()?NaN:Number(this.toString())}},{key:"toString",value:function(){var e=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return e?this.isInvalidate()?"":y("".concat(this.getMark()).concat(this.getIntegerStr(),".").concat(this.getDecimalStr())).fullStr:this.origin}}]),e}(),O=function(){function e(t){if((0,g.Z)(this,e),(0,d.Z)(this,"origin",""),(0,d.Z)(this,"number",void 0),(0,d.Z)(this,"empty",void 0),b(t)){this.empty=!0;return}this.origin=String(t),this.number=Number(t)}return(0,h.Z)(e,[{key:"negate",value:function(){return new e(-this.toNumber())}},{key:"add",value:function(t){if(this.isInvalidate())return new e(t);var n=Number(t);if(Number.isNaN(n))return this;var r=this.number+n;if(r>Number.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(rNumber.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(r=this.add(e.negate().toString()).toNumber()}},{key:"toNumber",value:function(){return this.number}},{key:"toString",value:function(){var e=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return e?this.isInvalidate()?"":E(this.number):this.origin}}]),e}();function Z(e){return v()?new S(e):new O(e)}function k(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(""===e)return"";var o=y(e),a=o.negativeStr,i=o.integerStr,c=o.decimalStr,l="".concat(t).concat(c),s="".concat(a).concat(i);if(n>=0){var u=Number(c[n]);return u>=5&&!r?k(Z(e).add("".concat(a,"0.").concat("0".repeat(n)).concat(10-u)).toString(),t,n,r):0===n?s:"".concat(s).concat(t).concat(c.padEnd(n,"0").slice(0,n))}return".0"===l?s:"".concat(s).concat(l)}var R=n(89),M=n(4800),j=n(4084),P=n(3850),N=n(6158),I=function(){var e=(0,r.useState)(!1),t=(0,p.Z)(e,2),n=t[0],o=t[1];return(0,M.Z)(function(){o((0,N.Z)())},[]),n},T=n(9223);function A(e){var t=e.prefixCls,n=e.upNode,o=e.downNode,i=e.upDisabled,c=e.downDisabled,l=e.onStep,s=r.useRef(),f=r.useRef([]),p=r.useRef();p.current=l;var m=function(){clearTimeout(s.current)},g=function(e,t){e.preventDefault(),m(),p.current(t),s.current=setTimeout(function e(){p.current(t),s.current=setTimeout(e,200)},600)};if(r.useEffect(function(){return function(){m(),f.current.forEach(function(e){return T.Z.cancel(e)})}},[]),I())return null;var h="".concat(t,"-handler"),v=u()(h,"".concat(h,"-up"),(0,d.Z)({},"".concat(h,"-up-disabled"),i)),b=u()(h,"".concat(h,"-down"),(0,d.Z)({},"".concat(h,"-down-disabled"),c)),y=function(){return f.current.push((0,T.Z)(m))},x={unselectable:"on",role:"button",onMouseUp:y,onMouseLeave:y};return r.createElement("div",{className:"".concat(h,"-wrap")},r.createElement("span",(0,a.Z)({},x,{onMouseDown:function(e){g(e,!0)},"aria-label":"Increase Value","aria-disabled":i,className:v}),n||r.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-up-inner")})),r.createElement("span",(0,a.Z)({},x,{onMouseDown:function(e){g(e,!1)},"aria-label":"Decrease Value","aria-disabled":c,className:b}),o||r.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-down-inner")})))}function F(e){var t="number"==typeof e?E(e):y(e).fullStr;return t.includes(".")?y(t.replace(/(\d)\.(\d)/g,"$1$2.")).fullStr:e+"0"}var z=n(8002),L=["prefixCls","className","style","min","max","step","defaultValue","value","disabled","readOnly","upHandler","downHandler","keyboard","wheel","controls","classNames","stringMode","parser","formatter","precision","decimalSeparator","onChange","onInput","onPressEnter","onStep","changeOnBlur"],_=["disabled","style","prefixCls","value","prefix","suffix","addonBefore","addonAfter","className","classNames"],B=function(e,t){return e||t.isEmpty()?t.toString():t.toNumber()},H=function(e){var t=Z(e);return t.isInvalidate()?null:t},D=r.forwardRef(function(e,t){var n,o,i,c,l,s=e.prefixCls,g=void 0===s?"rc-input-number":s,h=e.className,v=e.style,b=e.min,y=e.max,x=e.step,S=void 0===x?1:x,O=e.defaultValue,R=e.value,N=e.disabled,I=e.readOnly,z=e.upHandler,_=e.downHandler,D=e.keyboard,W=e.wheel,V=e.controls,q=(e.classNames,e.stringMode),X=e.parser,G=e.formatter,U=e.precision,K=e.decimalSeparator,$=e.onChange,Y=e.onInput,Q=e.onPressEnter,J=e.onStep,ee=e.changeOnBlur,et=void 0===ee||ee,en=(0,m.Z)(e,L),er="".concat(g,"-input"),eo=r.useRef(null),ea=r.useState(!1),ei=(0,p.Z)(ea,2),ec=ei[0],el=ei[1],es=r.useRef(!1),eu=r.useRef(!1),ed=r.useRef(!1),ef=r.useState(function(){return Z(null!=R?R:O)}),ep=(0,p.Z)(ef,2),em=ep[0],eg=ep[1],eh=r.useCallback(function(e,t){return t?void 0:U>=0?U:Math.max(w(e),w(S))},[U,S]),ev=r.useCallback(function(e){var t=String(e);if(X)return X(t);var n=t;return K&&(n=n.replace(K,".")),n.replace(/[^\w.-]+/g,"")},[X,K]),eb=r.useRef(""),ey=r.useCallback(function(e,t){if(G)return G(e,{userTyping:t,input:String(eb.current)});var n="number"==typeof e?E(e):e;if(!t){var r=eh(n,t);C(n)&&(K||r>=0)&&(n=k(n,K||".",r))}return n},[G,eh,K]),ex=r.useState(function(){var e=null!=O?O:R;return em.isInvalidate()&&["string","number"].includes((0,f.Z)(e))?Number.isNaN(e)?"":e:ey(em.toString(),!1)}),ew=(0,p.Z)(ex,2),eE=ew[0],eC=ew[1];function eS(e,t){eC(ey(e.isInvalidate()?e.toString(!1):e.toString(!t),t))}eb.current=eE;var eO=r.useMemo(function(){return H(y)},[y,U]),eZ=r.useMemo(function(){return H(b)},[b,U]),ek=r.useMemo(function(){return!(!eO||!em||em.isInvalidate())&&eO.lessEquals(em)},[eO,em]),eR=r.useMemo(function(){return!(!eZ||!em||em.isInvalidate())&&em.lessEquals(eZ)},[eZ,em]),eM=(n=eo.current,o=(0,r.useRef)(null),[function(){try{var e=n.selectionStart,t=n.selectionEnd,r=n.value,a=r.substring(0,e),i=r.substring(t);o.current={start:e,end:t,value:r,beforeTxt:a,afterTxt:i}}catch(e){}},function(){if(n&&o.current&&ec)try{var e=n.value,t=o.current,r=t.beforeTxt,a=t.afterTxt,i=t.start,c=e.length;if(e.endsWith(a))c=e.length-o.current.afterTxt.length;else if(e.startsWith(r))c=r.length;else{var l=r[i-1],s=e.indexOf(l,i-1);-1!==s&&(c=s+1)}n.setSelectionRange(c,c)}catch(e){(0,P.ZP)(!1,"Something warning of cursor restore. Please fire issue about this: ".concat(e.message))}}]),ej=(0,p.Z)(eM,2),eP=ej[0],eN=ej[1],eI=function(e){return eO&&!e.lessEquals(eO)?eO:eZ&&!eZ.lessEquals(e)?eZ:null},eT=function(e){return!eI(e)},eA=function(e,t){var n=e,r=eT(n)||n.isEmpty();if(n.isEmpty()||t||(n=eI(n)||n,r=!0),!I&&!N&&r){var o,a=n.toString(),i=eh(a,t);return i>=0&&!eT(n=Z(k(a,".",i)))&&(n=Z(k(a,".",i,!0))),n.equals(em)||(o=n,void 0===R&&eg(o),null==$||$(n.isEmpty()?null:B(q,n)),void 0===R&&eS(n,t)),n}return em},eF=(i=(0,r.useRef)(0),c=function(){T.Z.cancel(i.current)},(0,r.useEffect)(function(){return c},[]),function(e){c(),i.current=(0,T.Z)(function(){e()})}),ez=function e(t){if(eP(),eb.current=t,eC(t),!eu.current){var n=Z(ev(t));n.isNaN()||eA(n,!0)}null==Y||Y(t),eF(function(){var n=t;X||(n=t.replace(/。/g,".")),n!==t&&e(n)})},eL=function(e){if((!e||!ek)&&(e||!eR)){es.current=!1;var t,n=Z(ed.current?F(S):S);e||(n=n.negate());var r=eA((em||Z(0)).add(n.toString()),!1);null==J||J(B(q,r),{offset:ed.current?F(S):S,type:e?"up":"down"}),null===(t=eo.current)||void 0===t||t.focus()}},e_=function(e){var t=Z(ev(eE)),n=t;n=t.isNaN()?eA(em,e):eA(t,e),void 0!==R?eS(em,!1):n.isNaN()||eS(n,!1)};return r.useEffect(function(){var e=function(e){!1!==W&&(eL(e.deltaY<0),e.preventDefault())},t=eo.current;if(t)return t.addEventListener("wheel",e),function(){return t.removeEventListener("wheel",e)}},[eL]),(0,M.o)(function(){em.isInvalidate()||eS(em,!1)},[U,G]),(0,M.o)(function(){var e=Z(R);eg(e);var t=Z(ev(eE));e.equals(t)&&es.current&&!G||eS(e,es.current)},[R]),(0,M.o)(function(){G&&eN()},[eE]),r.createElement("div",{className:u()(g,h,(l={},(0,d.Z)(l,"".concat(g,"-focused"),ec),(0,d.Z)(l,"".concat(g,"-disabled"),N),(0,d.Z)(l,"".concat(g,"-readonly"),I),(0,d.Z)(l,"".concat(g,"-not-a-number"),em.isNaN()),(0,d.Z)(l,"".concat(g,"-out-of-range"),!em.isInvalidate()&&!eT(em)),l)),style:v,onFocus:function(){el(!0)},onBlur:function(){et&&e_(!1),el(!1),es.current=!1},onKeyDown:function(e){var t=e.key,n=e.shiftKey;es.current=!0,ed.current=n,"Enter"===t&&(eu.current||(es.current=!1),e_(!1),null==Q||Q(e)),!1!==D&&!eu.current&&["Up","ArrowUp","Down","ArrowDown"].includes(t)&&(eL("Up"===t||"ArrowUp"===t),e.preventDefault())},onKeyUp:function(){es.current=!1,ed.current=!1},onCompositionStart:function(){eu.current=!0},onCompositionEnd:function(){eu.current=!1,ez(eo.current.value)},onBeforeInput:function(){es.current=!0}},(void 0===V||V)&&r.createElement(A,{prefixCls:g,upNode:z,downNode:_,upDisabled:ek,downDisabled:eR,onStep:eL}),r.createElement("div",{className:"".concat(er,"-wrap")},r.createElement("input",(0,a.Z)({autoComplete:"off",role:"spinbutton","aria-valuemin":b,"aria-valuemax":y,"aria-valuenow":em.isInvalidate()?null:em.toString(),step:S},en,{ref:(0,j.sQ)(eo,t),className:er,value:eE,onChange:function(e){ez(e.target.value)},disabled:N,readOnly:I}))))}),W=r.forwardRef(function(e,t){var n=e.disabled,o=e.style,i=e.prefixCls,c=e.value,l=e.prefix,s=e.suffix,u=e.addonBefore,d=e.addonAfter,f=e.className,p=e.classNames,g=(0,m.Z)(e,_),h=r.useRef(null);return r.createElement(R.Q,{className:f,triggerFocus:function(e){h.current&&(0,z.nH)(h.current,e)},prefixCls:i,value:c,disabled:n,style:o,prefix:l,suffix:s,addonAfter:d,addonBefore:u,classNames:p,components:{affixWrapper:"div",groupWrapper:"div",wrapper:"div",groupAddon:"div"}},r.createElement(D,(0,a.Z)({prefixCls:i,disabled:n,ref:(0,j.sQ)(h,t),className:null==p?void 0:p.input},g)))});W.displayName="InputNumber";var V=n(7794),q=n(7499),X=n(4165),G=n(7094),U=n(2935),K=n(4629),$=n(7137),Y=n(8443),Q=n(2801),J=n(8985),ee=n(4759),et=n(5980),en=n(1892),er=n(1303),eo=n(2288),ea=n(6585),ei=n(316),ec=n(6336);let el=(e,t)=>{let{componentCls:n,borderRadiusSM:r,borderRadiusLG:o}=e,a="lg"===t?o:r;return{["&-".concat(t)]:{["".concat(n,"-handler-wrap")]:{borderStartEndRadius:a,borderEndEndRadius:a},["".concat(n,"-handler-up")]:{borderStartEndRadius:a},["".concat(n,"-handler-down")]:{borderEndEndRadius:a}}}},es=e=>{let{componentCls:t,lineWidth:n,lineType:r,borderRadius:o,fontSizeLG:a,controlHeightLG:i,controlHeightSM:c,colorError:l,paddingInlineSM:s,paddingBlockSM:u,paddingBlockLG:d,paddingInlineLG:f,colorTextDescription:p,motionDurationMid:m,handleHoverColor:g,paddingInline:h,paddingBlock:v,handleBg:b,handleActiveBg:y,colorTextDisabled:x,borderRadiusSM:w,borderRadiusLG:E,controlWidth:C,handleOpacity:S,handleBorderColor:O,filledHandleBg:Z,lineHeightLG:k,calc:R}=e;return[{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,er.Wf)(e)),(0,ee.ik)(e)),{display:"inline-block",width:C,margin:0,padding:0,borderRadius:o}),(0,en.qG)(e,{["".concat(t,"-handler-wrap")]:{background:b,["".concat(t,"-handler-down")]:{borderBlockStart:"".concat((0,J.bf)(n)," ").concat(r," ").concat(O)}}})),(0,en.H8)(e,{["".concat(t,"-handler-wrap")]:{background:Z,["".concat(t,"-handler-down")]:{borderBlockStart:"".concat((0,J.bf)(n)," ").concat(r," ").concat(O)}},"&:focus-within":{["".concat(t,"-handler-wrap")]:{background:b}}})),(0,en.Mu)(e)),{"&-rtl":{direction:"rtl",["".concat(t,"-input")]:{direction:"rtl"}},"&-lg":{padding:0,fontSize:a,lineHeight:k,borderRadius:E,["input".concat(t,"-input")]:{height:R(i).sub(R(n).mul(2)).equal(),padding:"".concat((0,J.bf)(d)," ").concat((0,J.bf)(f))}},"&-sm":{padding:0,borderRadius:w,["input".concat(t,"-input")]:{height:R(c).sub(R(n).mul(2)).equal(),padding:"".concat((0,J.bf)(u)," ").concat((0,J.bf)(s))}},"&-out-of-range":{["".concat(t,"-input-wrap")]:{input:{color:l}}},"&-group":Object.assign(Object.assign(Object.assign({},(0,er.Wf)(e)),(0,ee.s7)(e)),{"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",textAlign:"start",verticalAlign:"top",["".concat(t,"-affix-wrapper")]:{width:"100%"},"&-lg":{["".concat(t,"-group-addon")]:{borderRadius:E,fontSize:e.fontSizeLG}},"&-sm":{["".concat(t,"-group-addon")]:{borderRadius:w}}},(0,en.ir)(e)),(0,en.S5)(e)),{["&:not(".concat(t,"-compact-first-item):not(").concat(t,"-compact-last-item)").concat(t,"-compact-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderRadius:0}},["&:not(".concat(t,"-compact-last-item)").concat(t,"-compact-first-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartEndRadius:0,borderEndEndRadius:0}},["&:not(".concat(t,"-compact-first-item)").concat(t,"-compact-last-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartStartRadius:0,borderEndStartRadius:0}}})}),["&-disabled ".concat(t,"-input")]:{cursor:"not-allowed"},[t]:{"&-input":Object.assign(Object.assign(Object.assign(Object.assign({},(0,er.Wf)(e)),{width:"100%",padding:"".concat((0,J.bf)(v)," ").concat((0,J.bf)(h)),textAlign:"start",backgroundColor:"transparent",border:0,borderRadius:o,outline:0,transition:"all ".concat(m," linear"),appearance:"textfield",fontSize:"inherit"}),(0,ee.nz)(e.colorTextPlaceholder)),{'&[type="number"]::-webkit-inner-spin-button, &[type="number"]::-webkit-outer-spin-button':{margin:0,webkitAppearance:"none",appearance:"none"}})}})},{[t]:Object.assign(Object.assign(Object.assign({["&:hover ".concat(t,"-handler-wrap, &-focused ").concat(t,"-handler-wrap")]:{opacity:1},["".concat(t,"-handler-wrap")]:{position:"absolute",insetBlockStart:0,insetInlineEnd:0,width:e.handleWidth,height:"100%",borderStartStartRadius:0,borderStartEndRadius:o,borderEndEndRadius:o,borderEndStartRadius:0,opacity:S,display:"flex",flexDirection:"column",alignItems:"stretch",transition:"opacity ".concat(m," linear ").concat(m),["".concat(t,"-handler")]:{display:"flex",alignItems:"center",justifyContent:"center",flex:"auto",height:"40%",["\n ".concat(t,"-handler-up-inner,\n ").concat(t,"-handler-down-inner\n ")]:{marginInlineEnd:0,fontSize:e.handleFontSize}}},["".concat(t,"-handler")]:{height:"50%",overflow:"hidden",color:p,fontWeight:"bold",lineHeight:0,textAlign:"center",cursor:"pointer",borderInlineStart:"".concat((0,J.bf)(n)," ").concat(r," ").concat(O),transition:"all ".concat(m," linear"),"&:active":{background:y},"&:hover":{height:"60%",["\n ".concat(t,"-handler-up-inner,\n ").concat(t,"-handler-down-inner\n ")]:{color:g}},"&-up-inner, &-down-inner":Object.assign(Object.assign({},(0,er.Ro)()),{color:p,transition:"all ".concat(m," linear"),userSelect:"none"})},["".concat(t,"-handler-up")]:{borderStartEndRadius:o},["".concat(t,"-handler-down")]:{borderEndEndRadius:o}},el(e,"lg")),el(e,"sm")),{"&-disabled, &-readonly":{["".concat(t,"-handler-wrap")]:{display:"none"},["".concat(t,"-input")]:{color:"inherit"}},["\n ".concat(t,"-handler-up-disabled,\n ").concat(t,"-handler-down-disabled\n ")]:{cursor:"not-allowed"},["\n ".concat(t,"-handler-up-disabled:hover &-handler-up-inner,\n ").concat(t,"-handler-down-disabled:hover &-handler-down-inner\n ")]:{color:x}})}]},eu=e=>{let{componentCls:t,paddingBlock:n,paddingInline:r,inputAffixPadding:o,controlWidth:a,borderRadiusLG:i,borderRadiusSM:c,paddingInlineLG:l,paddingInlineSM:s,paddingBlockLG:u,paddingBlockSM:d}=e;return{["".concat(t,"-affix-wrapper")]:Object.assign(Object.assign({["input".concat(t,"-input")]:{padding:"".concat((0,J.bf)(n)," 0")}},(0,ee.ik)(e)),{position:"relative",display:"inline-flex",width:a,padding:0,paddingInlineStart:r,"&-lg":{borderRadius:i,paddingInlineStart:l,["input".concat(t,"-input")]:{padding:"".concat((0,J.bf)(u)," 0")}},"&-sm":{borderRadius:c,paddingInlineStart:s,["input".concat(t,"-input")]:{padding:"".concat((0,J.bf)(d)," 0")}},["&:not(".concat(t,"-disabled):hover")]:{zIndex:1},"&-focused, &:focus":{zIndex:1},["&-disabled > ".concat(t,"-disabled")]:{background:"transparent"},["> div".concat(t)]:{width:"100%",border:"none",outline:"none",["&".concat(t,"-focused")]:{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},["".concat(t,"-handler-wrap")]:{zIndex:2},[t]:{color:"inherit","&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center",pointerEvents:"none"},"&-prefix":{marginInlineEnd:o},"&-suffix":{position:"absolute",insetBlockStart:0,insetInlineEnd:0,zIndex:1,height:"100%",marginInlineEnd:r,marginInlineStart:o}}})}};var ed=(0,ea.I$)("InputNumber",e=>{let t=(0,ei.TS)(e,(0,et.e)(e));return[es(t),eu(t),(0,eo.c)(t)]},e=>{var t;let n=null!==(t=e.handleVisible)&&void 0!==t?t:"auto";return Object.assign(Object.assign({},(0,et.T)(e)),{controlWidth:90,handleWidth:e.controlHeightSM-2*e.lineWidth,handleFontSize:e.fontSize/2,handleVisible:n,handleActiveBg:e.colorFillAlter,handleBg:e.colorBgContainer,filledHandleBg:new ec.C(e.colorFillSecondary).onBackground(e.colorBgContainer).toHexString(),handleHoverColor:e.colorPrimary,handleBorderColor:e.colorBorder,handleOpacity:!0===n?1:0})},{unitless:{handleOpacity:!0}}),ef=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let ep=r.forwardRef((e,t)=>{let{getPrefixCls:n,direction:a}=r.useContext(q.E_),i=r.useRef(null);r.useImperativeHandle(t,()=>i.current);let{className:c,rootClassName:s,size:d,disabled:f,prefixCls:p,addonBefore:m,addonAfter:g,prefix:h,bordered:v,readOnly:b,status:y,controls:x,variant:w}=e,E=ef(e,["className","rootClassName","size","disabled","prefixCls","addonBefore","addonAfter","prefix","bordered","readOnly","status","controls","variant"]),C=n("input-number",p),S=(0,U.Z)(C),[O,Z,k]=ed(C,S),{compactSize:R,compactItemClassnames:M}=(0,Q.ri)(C,a),j=r.createElement(l,{className:"".concat(C,"-handler-up-inner")}),P=r.createElement(o.Z,{className:"".concat(C,"-handler-down-inner")});"object"==typeof x&&(j=void 0===x.upIcon?j:r.createElement("span",{className:"".concat(C,"-handler-up-inner")},x.upIcon),P=void 0===x.downIcon?P:r.createElement("span",{className:"".concat(C,"-handler-down-inner")},x.downIcon));let{hasFeedback:N,status:I,isFormItemInput:T,feedbackIcon:A}=r.useContext($.aM),F=(0,V.F)(I,y),z=(0,K.Z)(e=>{var t;return null!==(t=null!=d?d:R)&&void 0!==t?t:e}),L=r.useContext(G.Z),[_,B]=(0,Y.Z)(w,v),H=N&&r.createElement(r.Fragment,null,A),D=u()({["".concat(C,"-lg")]:"large"===z,["".concat(C,"-sm")]:"small"===z,["".concat(C,"-rtl")]:"rtl"===a,["".concat(C,"-in-form-item")]:T},Z),X="".concat(C,"-group");return O(r.createElement(W,Object.assign({ref:i,disabled:null!=f?f:L,className:u()(k,S,c,s,M),upHandler:j,downHandler:P,prefixCls:C,readOnly:b,controls:"boolean"==typeof x?x:void 0,prefix:h,suffix:H,addonAfter:g&&r.createElement(Q.BR,null,r.createElement($.Ux,{override:!0,status:!0},g)),addonBefore:m&&r.createElement(Q.BR,null,r.createElement($.Ux,{override:!0,status:!0},m)),classNames:{input:D,variant:u()({["".concat(C,"-").concat(_)]:B},(0,V.Z)(C,F,N)),affixWrapper:u()({["".concat(C,"-affix-wrapper-sm")]:"small"===z,["".concat(C,"-affix-wrapper-lg")]:"large"===z,["".concat(C,"-affix-wrapper-rtl")]:"rtl"===a},Z),wrapper:u()({["".concat(X,"-rtl")]:"rtl"===a},Z),groupWrapper:u()({["".concat(C,"-group-wrapper-sm")]:"small"===z,["".concat(C,"-group-wrapper-lg")]:"large"===z,["".concat(C,"-group-wrapper-rtl")]:"rtl"===a,["".concat(C,"-group-wrapper-").concat(_)]:B},(0,V.Z)("".concat(C,"-group-wrapper"),F,N),Z)}},E)))});ep._InternalPanelDoNotUseOrYouWillBeFired=e=>r.createElement(X.ZP,{theme:{components:{InputNumber:{handleVisible:!0}}}},r.createElement(ep,Object.assign({},e)));var em=ep},9714:function(e,t,n){n.d(t,{Z:function(){return ea}});var r,o=n(4090),a=n(6480),i=n.n(a),c=n(7499),l=n(7137),s=n(4759),u=n(89),d=n(4084),f=n(7794),p=n(7094),m=n(4629),g=n(2801);function h(e,t){let n=(0,o.useRef)([]),r=()=>{n.current.push(setTimeout(()=>{var t,n,r,o;(null===(t=e.current)||void 0===t?void 0:t.input)&&(null===(n=e.current)||void 0===n?void 0:n.input.getAttribute("type"))==="password"&&(null===(r=e.current)||void 0===r?void 0:r.input.hasAttribute("value"))&&(null===(o=e.current)||void 0===o||o.input.removeAttribute("value"))}))};return(0,o.useEffect)(()=>(t&&r(),()=>n.current.forEach(e=>{e&&clearTimeout(e)})),[]),r}var v=n(2935),b=n(8443),y=n(7136),x=e=>{let t;return"object"==typeof e&&(null==e?void 0:e.clearIcon)?t=e:e&&(t={clearIcon:o.createElement(y.Z,null)}),t},w=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let E=(0,o.forwardRef)((e,t)=>{var n;let{prefixCls:r,bordered:a=!0,status:y,size:E,disabled:C,onBlur:S,onFocus:O,suffix:Z,allowClear:k,addonAfter:R,addonBefore:M,className:j,style:P,styles:N,rootClassName:I,onChange:T,classNames:A,variant:F}=e,z=w(e,["prefixCls","bordered","status","size","disabled","onBlur","onFocus","suffix","allowClear","addonAfter","addonBefore","className","style","styles","rootClassName","onChange","classNames","variant"]),{getPrefixCls:L,direction:_,input:B}=o.useContext(c.E_),H=L("input",r),D=(0,o.useRef)(null),W=(0,v.Z)(H),[V,q,X]=(0,s.ZP)(H,W),{compactSize:G,compactItemClassnames:U}=(0,g.ri)(H,_),K=(0,m.Z)(e=>{var t;return null!==(t=null!=E?E:G)&&void 0!==t?t:e}),$=o.useContext(p.Z),{status:Y,hasFeedback:Q,feedbackIcon:J}=(0,o.useContext)(l.aM),ee=(0,f.F)(Y,y),et=!!(e.prefix||e.suffix||e.allowClear||e.showCount)||!!Q;(0,o.useRef)(et);let en=h(D,!0),er=(Q||Z)&&o.createElement(o.Fragment,null,Z,Q&&J),eo=x(k),[ea,ei]=(0,b.Z)(F,a);return V(o.createElement(u.Z,Object.assign({ref:(0,d.sQ)(t,D),prefixCls:H,autoComplete:null==B?void 0:B.autoComplete},z,{disabled:null!=C?C:$,onBlur:e=>{en(),null==S||S(e)},onFocus:e=>{en(),null==O||O(e)},style:Object.assign(Object.assign({},null==B?void 0:B.style),P),styles:Object.assign(Object.assign({},null==B?void 0:B.styles),N),suffix:er,allowClear:eo,className:i()(j,I,X,W,U,null==B?void 0:B.className),onChange:e=>{en(),null==T||T(e)},addonAfter:R&&o.createElement(g.BR,null,o.createElement(l.Ux,{override:!0,status:!0},R)),addonBefore:M&&o.createElement(g.BR,null,o.createElement(l.Ux,{override:!0,status:!0},M)),classNames:Object.assign(Object.assign(Object.assign({},A),null==B?void 0:B.classNames),{input:i()({["".concat(H,"-sm")]:"small"===K,["".concat(H,"-lg")]:"large"===K,["".concat(H,"-rtl")]:"rtl"===_},null==A?void 0:A.input,null===(n=null==B?void 0:B.classNames)||void 0===n?void 0:n.input,q),variant:i()({["".concat(H,"-").concat(ea)]:ei},(0,f.Z)(H,ee)),affixWrapper:i()({["".concat(H,"-affix-wrapper-sm")]:"small"===K,["".concat(H,"-affix-wrapper-lg")]:"large"===K,["".concat(H,"-affix-wrapper-rtl")]:"rtl"===_},q),wrapper:i()({["".concat(H,"-group-rtl")]:"rtl"===_},q),groupWrapper:i()({["".concat(H,"-group-wrapper-sm")]:"small"===K,["".concat(H,"-group-wrapper-lg")]:"large"===K,["".concat(H,"-group-wrapper-rtl")]:"rtl"===_,["".concat(H,"-group-wrapper-").concat(ea)]:ei},(0,f.Z)("".concat(H,"-group-wrapper"),ee,Q),q)})})))});var C=n(2110),S={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"}},{tag:"path",attrs:{d:"M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"}}]},name:"eye-invisible",theme:"outlined"},O=n(688),Z=o.forwardRef(function(e,t){return o.createElement(O.Z,(0,C.Z)({},e,{ref:t,icon:S}))}),k={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"},R=o.forwardRef(function(e,t){return o.createElement(O.Z,(0,C.Z)({},e,{ref:t,icon:k}))}),M=n(5704),j=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let P=e=>e?o.createElement(R,null):o.createElement(Z,null),N={click:"onClick",hover:"onMouseOver"},I=o.forwardRef((e,t)=>{let{visibilityToggle:n=!0}=e,r="object"==typeof n&&void 0!==n.visible,[a,l]=(0,o.useState)(()=>!!r&&n.visible),s=(0,o.useRef)(null);o.useEffect(()=>{r&&l(n.visible)},[r,n]);let u=h(s),f=()=>{let{disabled:t}=e;t||(a&&u(),l(e=>{var t;let r=!e;return"object"==typeof n&&(null===(t=n.onVisibleChange)||void 0===t||t.call(n,r)),r}))},{className:p,prefixCls:m,inputPrefixCls:g,size:v}=e,b=j(e,["className","prefixCls","inputPrefixCls","size"]),{getPrefixCls:y}=o.useContext(c.E_),x=y("input",g),w=y("input-password",m),C=n&&(t=>{let{action:n="click",iconRender:r=P}=e,i=N[n]||"",c=r(a);return o.cloneElement(o.isValidElement(c)?c:o.createElement("span",null,c),{[i]:f,className:"".concat(t,"-icon"),key:"passwordIcon",onMouseDown:e=>{e.preventDefault()},onMouseUp:e=>{e.preventDefault()}})})(w),S=i()(w,p,{["".concat(w,"-").concat(v)]:!!v}),O=Object.assign(Object.assign({},(0,M.Z)(b,["suffix","iconRender","visibilityToggle"])),{type:a?"text":"password",className:S,prefixCls:x,suffix:C});return v&&(O.size=v),o.createElement(E,Object.assign({ref:(0,d.sQ)(t,s)},O))});var T=n(6871),A=n(5823),F=n(1861),z=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let L=o.forwardRef((e,t)=>{let n;let{prefixCls:r,inputPrefixCls:a,className:l,size:s,suffix:u,enterButton:f=!1,addonAfter:p,loading:h,disabled:v,onSearch:b,onChange:y,onCompositionStart:x,onCompositionEnd:w}=e,C=z(e,["prefixCls","inputPrefixCls","className","size","suffix","enterButton","addonAfter","loading","disabled","onSearch","onChange","onCompositionStart","onCompositionEnd"]),{getPrefixCls:S,direction:O}=o.useContext(c.E_),Z=o.useRef(!1),k=S("input-search",r),R=S("input",a),{compactSize:M}=(0,g.ri)(k,O),j=(0,m.Z)(e=>{var t;return null!==(t=null!=s?s:M)&&void 0!==t?t:e}),P=o.useRef(null),N=e=>{var t;document.activeElement===(null===(t=P.current)||void 0===t?void 0:t.input)&&e.preventDefault()},I=e=>{var t,n;b&&b(null===(n=null===(t=P.current)||void 0===t?void 0:t.input)||void 0===n?void 0:n.value,e,{source:"input"})},L="boolean"==typeof f?o.createElement(T.Z,null):null,_="".concat(k,"-button"),B=f||{},H=B.type&&!0===B.type.__ANT_BUTTON;n=H||"button"===B.type?(0,A.Tm)(B,Object.assign({onMouseDown:N,onClick:e=>{var t,n;null===(n=null===(t=null==B?void 0:B.props)||void 0===t?void 0:t.onClick)||void 0===n||n.call(t,e),I(e)},key:"enterButton"},H?{className:_,size:j}:{})):o.createElement(F.ZP,{className:_,type:f?"primary":void 0,size:j,disabled:v,key:"enterButton",onMouseDown:N,onClick:I,loading:h,icon:L},f),p&&(n=[n,(0,A.Tm)(p,{key:"addonAfter"})]);let D=i()(k,{["".concat(k,"-rtl")]:"rtl"===O,["".concat(k,"-").concat(j)]:!!j,["".concat(k,"-with-button")]:!!f},l);return o.createElement(E,Object.assign({ref:(0,d.sQ)(P,t),onPressEnter:e=>{Z.current||h||I(e)}},C,{size:j,onCompositionStart:e=>{Z.current=!0,null==x||x(e)},onCompositionEnd:e=>{Z.current=!1,null==w||w(e)},prefixCls:R,addonAfter:n,suffix:u,onChange:e=>{e&&e.target&&"click"===e.type&&b&&b(e.target.value,e,{source:"clear"}),y&&y(e)},className:D,disabled:v}))});var _=n(833),B=n(5239),H=n(3787),D=n(406),W=n(6787),V=n(4607),q=n(8002),X=n(4329),G=n(6976),U=n(6505),K=n(4800),$=n(9223),Y=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing","word-break","white-space"],Q={},J=["prefixCls","onPressEnter","defaultValue","value","autoSize","onResize","className","style","disabled","onChange","onInternalAutoSize"],ee=o.forwardRef(function(e,t){var n=e.prefixCls,a=(e.onPressEnter,e.defaultValue),c=e.value,l=e.autoSize,s=e.onResize,u=e.className,d=e.style,f=e.disabled,p=e.onChange,m=(e.onInternalAutoSize,(0,W.Z)(e,J)),g=(0,X.Z)(a,{value:c,postState:function(e){return null!=e?e:""}}),h=(0,D.Z)(g,2),v=h[0],b=h[1],y=o.useRef();o.useImperativeHandle(t,function(){return{textArea:y.current}});var x=o.useMemo(function(){return l&&"object"===(0,G.Z)(l)?[l.minRows,l.maxRows]:[]},[l]),w=(0,D.Z)(x,2),E=w[0],S=w[1],O=!!l,Z=function(){try{if(document.activeElement===y.current){var e=y.current,t=e.selectionStart,n=e.selectionEnd,r=e.scrollTop;y.current.setSelectionRange(t,n),y.current.scrollTop=r}}catch(e){}},k=o.useState(2),R=(0,D.Z)(k,2),M=R[0],j=R[1],P=o.useState(),N=(0,D.Z)(P,2),I=N[0],T=N[1],A=function(){j(0)};(0,K.Z)(function(){O&&A()},[c,E,S,O]),(0,K.Z)(function(){if(0===M)j(1);else if(1===M){var e=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;r||((r=document.createElement("textarea")).setAttribute("tab-index","-1"),r.setAttribute("aria-hidden","true"),document.body.appendChild(r)),e.getAttribute("wrap")?r.setAttribute("wrap",e.getAttribute("wrap")):r.removeAttribute("wrap");var i=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&Q[n])return Q[n];var r=window.getComputedStyle(e),o=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),a=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),i=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),c={sizingStyle:Y.map(function(e){return"".concat(e,":").concat(r.getPropertyValue(e))}).join(";"),paddingSize:a,borderSize:i,boxSizing:o};return t&&n&&(Q[n]=c),c}(e,n),c=i.paddingSize,l=i.borderSize,s=i.boxSizing,u=i.sizingStyle;r.setAttribute("style","".concat(u,";").concat("\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important;\n pointer-events: none !important;\n")),r.value=e.value||e.placeholder||"";var d=void 0,f=void 0,p=r.scrollHeight;if("border-box"===s?p+=l:"content-box"===s&&(p-=c),null!==o||null!==a){r.value=" ";var m=r.scrollHeight-c;null!==o&&(d=m*o,"border-box"===s&&(d=d+c+l),p=Math.max(d,p)),null!==a&&(f=m*a,"border-box"===s&&(f=f+c+l),t=p>f?"":"hidden",p=Math.min(f,p))}var g={height:p,overflowY:t,resize:"none"};return d&&(g.minHeight=d),f&&(g.maxHeight=f),g}(y.current,!1,E,S);j(2),T(e)}else Z()},[M]);var F=o.useRef(),z=function(){$.Z.cancel(F.current)};o.useEffect(function(){return z},[]);var L=(0,B.Z)((0,B.Z)({},d),O?I:null);return(0===M||1===M)&&(L.overflowY="hidden",L.overflowX="hidden"),o.createElement(U.Z,{onResize:function(e){2===M&&(null==s||s(e),l&&(z(),F.current=(0,$.Z)(function(){A()})))},disabled:!(l||s)},o.createElement("textarea",(0,C.Z)({},m,{ref:y,style:L,className:i()(n,u,(0,_.Z)({},"".concat(n,"-disabled"),f)),disabled:f,value:v,onChange:function(e){b(e.target.value),null==p||p(e)}})))}),et=["defaultValue","value","onFocus","onBlur","onChange","allowClear","maxLength","onCompositionStart","onCompositionEnd","suffix","prefixCls","showCount","count","className","style","disabled","hidden","classNames","styles","onResize"],en=o.forwardRef(function(e,t){var n,r,a,c=e.defaultValue,l=e.value,s=e.onFocus,d=e.onBlur,f=e.onChange,p=e.allowClear,m=e.maxLength,g=e.onCompositionStart,h=e.onCompositionEnd,v=e.suffix,b=e.prefixCls,y=void 0===b?"rc-textarea":b,x=e.showCount,w=e.count,E=e.className,S=e.style,O=e.disabled,Z=e.hidden,k=e.classNames,R=e.styles,M=e.onResize,j=(0,W.Z)(e,et),P=(0,X.Z)(c,{value:l,defaultValue:c}),N=(0,D.Z)(P,2),I=N[0],T=N[1],A=null==I?"":String(I),F=o.useState(!1),z=(0,D.Z)(F,2),L=z[0],G=z[1],U=o.useRef(!1),K=o.useState(null),$=(0,D.Z)(K,2),Y=$[0],Q=$[1],J=(0,o.useRef)(null),en=function(){var e;return null===(e=J.current)||void 0===e?void 0:e.textArea},er=function(){en().focus()};(0,o.useImperativeHandle)(t,function(){return{resizableTextArea:J.current,focus:er,blur:function(){en().blur()}}}),(0,o.useEffect)(function(){G(function(e){return!O&&e})},[O]);var eo=o.useState(null),ea=(0,D.Z)(eo,2),ei=ea[0],ec=ea[1];o.useEffect(function(){if(ei){var e;(e=en()).setSelectionRange.apply(e,(0,H.Z)(ei))}},[ei]);var el=(0,V.Z)(w,x),es=null!==(n=el.max)&&void 0!==n?n:m,eu=Number(es)>0,ed=el.strategy(A),ef=!!es&&ed>es,ep=function(e,t){var n=t;!U.current&&el.exceedFormatter&&el.max&&el.strategy(t)>el.max&&(n=el.exceedFormatter(t,{max:el.max}),t!==n&&ec([en().selectionStart||0,en().selectionEnd||0])),T(n),(0,q.rJ)(e.currentTarget,e,f,n)},em=v;el.show&&(a=el.showFormatter?el.showFormatter({value:A,count:ed,maxLength:es}):"".concat(ed).concat(eu?" / ".concat(es):""),em=o.createElement(o.Fragment,null,em,o.createElement("span",{className:i()("".concat(y,"-data-count"),null==k?void 0:k.count),style:null==R?void 0:R.count},a)));var eg=!j.autoSize&&!x&&!p;return o.createElement(u.Q,{value:A,allowClear:p,handleReset:function(e){T(""),er(),(0,q.rJ)(en(),e,f)},suffix:em,prefixCls:y,classNames:(0,B.Z)((0,B.Z)({},k),{},{affixWrapper:i()(null==k?void 0:k.affixWrapper,(r={},(0,_.Z)(r,"".concat(y,"-show-count"),x),(0,_.Z)(r,"".concat(y,"-textarea-allow-clear"),p),r))}),disabled:O,focused:L,className:i()(E,ef&&"".concat(y,"-out-of-range")),style:(0,B.Z)((0,B.Z)({},S),Y&&!eg?{height:"auto"}:{}),dataAttrs:{affixWrapper:{"data-count":"string"==typeof a?a:void 0}},hidden:Z},o.createElement(ee,(0,C.Z)({},j,{maxLength:m,onKeyDown:function(e){var t=j.onPressEnter,n=j.onKeyDown;"Enter"===e.key&&t&&t(e),null==n||n(e)},onChange:function(e){ep(e,e.target.value)},onFocus:function(e){G(!0),null==s||s(e)},onBlur:function(e){G(!1),null==d||d(e)},onCompositionStart:function(e){U.current=!0,null==g||g(e)},onCompositionEnd:function(e){U.current=!1,ep(e,e.currentTarget.value),null==h||h(e)},className:i()(null==k?void 0:k.textarea),style:(0,B.Z)((0,B.Z)({},null==R?void 0:R.textarea),{},{resize:null==S?void 0:S.resize}),disabled:O,prefixCls:y,onResize:function(e){var t;null==M||M(e),null!==(t=en())&&void 0!==t&&t.style.height&&Q(!0)},ref:J})))}),er=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let eo=(0,o.forwardRef)((e,t)=>{var n;let r;let{prefixCls:a,bordered:u=!0,size:d,disabled:g,status:h,allowClear:x,classNames:w,rootClassName:E,className:C,variant:S}=e,O=er(e,["prefixCls","bordered","size","disabled","status","allowClear","classNames","rootClassName","className","variant"]),{getPrefixCls:Z,direction:k}=o.useContext(c.E_),R=(0,m.Z)(d),M=o.useContext(p.Z),{status:j,hasFeedback:P,feedbackIcon:N}=o.useContext(l.aM),I=(0,f.F)(j,h),T=o.useRef(null);o.useImperativeHandle(t,()=>{var e;return{resizableTextArea:null===(e=T.current)||void 0===e?void 0:e.resizableTextArea,focus:e=>{var t,n;!function(e,t){if(!e)return;e.focus(t);let{cursor:n}=t||{};if(n){let t=e.value.length;switch(n){case"start":e.setSelectionRange(0,0);break;case"end":e.setSelectionRange(t,t);break;default:e.setSelectionRange(0,t)}}}(null===(n=null===(t=T.current)||void 0===t?void 0:t.resizableTextArea)||void 0===n?void 0:n.textArea,e)},blur:()=>{var e;return null===(e=T.current)||void 0===e?void 0:e.blur()}}});let A=Z("input",a);"object"==typeof x&&(null==x?void 0:x.clearIcon)?r=x:x&&(r={clearIcon:o.createElement(y.Z,null)});let F=(0,v.Z)(A),[z,L,_]=(0,s.ZP)(A,F),[B,H]=(0,b.Z)(S,u);return z(o.createElement(en,Object.assign({},O,{disabled:null!=g?g:M,allowClear:r,className:i()(_,F,C,E),classNames:Object.assign(Object.assign({},w),{textarea:i()({["".concat(A,"-sm")]:"small"===R,["".concat(A,"-lg")]:"large"===R},L,null==w?void 0:w.textarea),variant:i()({["".concat(A,"-").concat(B)]:H},(0,f.Z)(A,I)),affixWrapper:i()("".concat(A,"-textarea-affix-wrapper"),{["".concat(A,"-affix-wrapper-rtl")]:"rtl"===k,["".concat(A,"-affix-wrapper-sm")]:"small"===R,["".concat(A,"-affix-wrapper-lg")]:"large"===R,["".concat(A,"-textarea-show-count")]:e.showCount||(null===(n=e.count)||void 0===n?void 0:n.show)},L)}),prefixCls:A,suffix:P&&o.createElement("span",{className:"".concat(A,"-textarea-suffix")},N),ref:T})))});E.Group=e=>{let{getPrefixCls:t,direction:n}=(0,o.useContext)(c.E_),{prefixCls:r,className:a}=e,u=t("input-group",r),d=t("input"),[f,p]=(0,s.ZP)(d),m=i()(u,{["".concat(u,"-lg")]:"large"===e.size,["".concat(u,"-sm")]:"small"===e.size,["".concat(u,"-compact")]:e.compact,["".concat(u,"-rtl")]:"rtl"===n},p,a),g=(0,o.useContext)(l.aM),h=(0,o.useMemo)(()=>Object.assign(Object.assign({},g),{isFormItemInput:!1}),[g]);return f(o.createElement("span",{className:m,style:e.style,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,onFocus:e.onFocus,onBlur:e.onBlur},o.createElement(l.aM.Provider,{value:h},e.children)))},E.Search=L,E.TextArea=eo,E.Password=I;var ea=E},4759:function(e,t,n){n.d(t,{ik:function(){return p},nz:function(){return u},s7:function(){return m}});var r=n(8985),o=n(1303),a=n(2288),i=n(6585),c=n(316),l=n(5980),s=n(1892);let u=e=>({"&::-moz-placeholder":{opacity:1},"&::placeholder":{color:e,userSelect:"none"},"&:placeholder-shown":{textOverflow:"ellipsis"}}),d=e=>{let{paddingBlockLG:t,lineHeightLG:n,borderRadiusLG:o,paddingInlineLG:a}=e;return{padding:"".concat((0,r.bf)(t)," ").concat((0,r.bf)(a)),fontSize:e.inputFontSizeLG,lineHeight:n,borderRadius:o}},f=e=>({padding:"".concat((0,r.bf)(e.paddingBlockSM)," ").concat((0,r.bf)(e.paddingInlineSM)),fontSize:e.inputFontSizeSM,borderRadius:e.borderRadiusSM}),p=e=>Object.assign(Object.assign({position:"relative",display:"inline-block",width:"100%",minWidth:0,padding:"".concat((0,r.bf)(e.paddingBlock)," ").concat((0,r.bf)(e.paddingInline)),color:e.colorText,fontSize:e.inputFontSize,lineHeight:e.lineHeight,borderRadius:e.borderRadius,transition:"all ".concat(e.motionDurationMid)},u(e.colorTextPlaceholder)),{"textarea&":{maxWidth:"100%",height:"auto",minHeight:e.controlHeight,lineHeight:e.lineHeight,verticalAlign:"bottom",transition:"all ".concat(e.motionDurationSlow,", height 0s"),resize:"vertical"},"&-lg":Object.assign({},d(e)),"&-sm":Object.assign({},f(e)),"&-rtl":{direction:"rtl"},"&-textarea-rtl":{direction:"rtl"}}),m=e=>{let{componentCls:t,antCls:n}=e;return{position:"relative",display:"table",width:"100%",borderCollapse:"separate",borderSpacing:0,"&[class*='col-']":{paddingInlineEnd:e.paddingXS,"&:last-child":{paddingInlineEnd:0}},["&-lg ".concat(t,", &-lg > ").concat(t,"-group-addon")]:Object.assign({},d(e)),["&-sm ".concat(t,", &-sm > ").concat(t,"-group-addon")]:Object.assign({},f(e)),["&-lg ".concat(n,"-select-single ").concat(n,"-select-selector")]:{height:e.controlHeightLG},["&-sm ".concat(n,"-select-single ").concat(n,"-select-selector")]:{height:e.controlHeightSM},["> ".concat(t)]:{display:"table-cell","&:not(:first-child):not(:last-child)":{borderRadius:0}},["".concat(t,"-group")]:{"&-addon, &-wrap":{display:"table-cell",width:1,whiteSpace:"nowrap",verticalAlign:"middle","&:not(:first-child):not(:last-child)":{borderRadius:0}},"&-wrap > *":{display:"block !important"},"&-addon":{position:"relative",padding:"0 ".concat((0,r.bf)(e.paddingInline)),color:e.colorText,fontWeight:"normal",fontSize:e.inputFontSize,textAlign:"center",borderRadius:e.borderRadius,transition:"all ".concat(e.motionDurationSlow),lineHeight:1,["".concat(n,"-select")]:{margin:"".concat((0,r.bf)(e.calc(e.paddingBlock).add(1).mul(-1).equal())," ").concat((0,r.bf)(e.calc(e.paddingInline).mul(-1).equal())),["&".concat(n,"-select-single:not(").concat(n,"-select-customize-input):not(").concat(n,"-pagination-size-changer)")]:{["".concat(n,"-select-selector")]:{backgroundColor:"inherit",border:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," transparent"),boxShadow:"none"}},"&-open, &-focused":{["".concat(n,"-select-selector")]:{color:e.colorPrimary}}},["".concat(n,"-cascader-picker")]:{margin:"-9px ".concat((0,r.bf)(e.calc(e.paddingInline).mul(-1).equal())),backgroundColor:"transparent",["".concat(n,"-cascader-input")]:{textAlign:"start",border:0,boxShadow:"none"}}}},["".concat(t)]:{width:"100%",marginBottom:0,textAlign:"inherit","&:focus":{zIndex:1,borderInlineEndWidth:1},"&:hover":{zIndex:1,borderInlineEndWidth:1,["".concat(t,"-search-with-button &")]:{zIndex:0}}},["> ".concat(t,":first-child, ").concat(t,"-group-addon:first-child")]:{borderStartEndRadius:0,borderEndEndRadius:0,["".concat(n,"-select ").concat(n,"-select-selector")]:{borderStartEndRadius:0,borderEndEndRadius:0}},["> ".concat(t,"-affix-wrapper")]:{["&:not(:first-child) ".concat(t)]:{borderStartStartRadius:0,borderEndStartRadius:0},["&:not(:last-child) ".concat(t)]:{borderStartEndRadius:0,borderEndEndRadius:0}},["> ".concat(t,":last-child, ").concat(t,"-group-addon:last-child")]:{borderStartStartRadius:0,borderEndStartRadius:0,["".concat(n,"-select ").concat(n,"-select-selector")]:{borderStartStartRadius:0,borderEndStartRadius:0}},["".concat(t,"-affix-wrapper")]:{"&:not(:last-child)":{borderStartEndRadius:0,borderEndEndRadius:0,["".concat(t,"-search &")]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius}},["&:not(:first-child), ".concat(t,"-search &:not(:first-child)")]:{borderStartStartRadius:0,borderEndStartRadius:0}},["&".concat(t,"-group-compact")]:Object.assign(Object.assign({display:"block"},(0,o.dF)()),{["".concat(t,"-group-addon, ").concat(t,"-group-wrap, > ").concat(t)]:{"&:not(:first-child):not(:last-child)":{borderInlineEndWidth:e.lineWidth,"&:hover":{zIndex:1},"&:focus":{zIndex:1}}},"& > *":{display:"inline-block",float:"none",verticalAlign:"top",borderRadius:0},["\n & > ".concat(t,"-affix-wrapper,\n & > ").concat(t,"-number-affix-wrapper,\n & > ").concat(n,"-picker-range\n ")]:{display:"inline-flex"},"& > *:not(:last-child)":{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderInlineEndWidth:e.lineWidth},["".concat(t)]:{float:"none"},["& > ".concat(n,"-select > ").concat(n,"-select-selector,\n & > ").concat(n,"-select-auto-complete ").concat(t,",\n & > ").concat(n,"-cascader-picker ").concat(t,",\n & > ").concat(t,"-group-wrapper ").concat(t)]:{borderInlineEndWidth:e.lineWidth,borderRadius:0,"&:hover":{zIndex:1},"&:focus":{zIndex:1}},["& > ".concat(n,"-select-focused")]:{zIndex:1},["& > ".concat(n,"-select > ").concat(n,"-select-arrow")]:{zIndex:1},["& > *:first-child,\n & > ".concat(n,"-select:first-child > ").concat(n,"-select-selector,\n & > ").concat(n,"-select-auto-complete:first-child ").concat(t,",\n & > ").concat(n,"-cascader-picker:first-child ").concat(t)]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius},["& > *:last-child,\n & > ".concat(n,"-select:last-child > ").concat(n,"-select-selector,\n & > ").concat(n,"-cascader-picker:last-child ").concat(t,",\n & > ").concat(n,"-cascader-picker-focused:last-child ").concat(t)]:{borderInlineEndWidth:e.lineWidth,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius},["& > ".concat(n,"-select-auto-complete ").concat(t)]:{verticalAlign:"top"},["".concat(t,"-group-wrapper + ").concat(t,"-group-wrapper")]:{marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),["".concat(t,"-affix-wrapper")]:{borderRadius:0}},["".concat(t,"-group-wrapper:not(:last-child)")]:{["&".concat(t,"-search > ").concat(t,"-group")]:{["& > ".concat(t,"-group-addon > ").concat(t,"-search-button")]:{borderRadius:0},["& > ".concat(t)]:{borderStartStartRadius:e.borderRadius,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:e.borderRadius}}}})}},g=e=>{let{componentCls:t,controlHeightSM:n,lineWidth:r,calc:a}=e,i=a(n).sub(a(r).mul(2)).sub(16).div(2).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,o.Wf)(e)),p(e)),(0,s.qG)(e)),(0,s.H8)(e)),(0,s.Mu)(e)),{'&[type="color"]':{height:e.controlHeight,["&".concat(t,"-lg")]:{height:e.controlHeightLG},["&".concat(t,"-sm")]:{height:n,paddingTop:i,paddingBottom:i}},'&[type="search"]::-webkit-search-cancel-button, &[type="search"]::-webkit-search-decoration':{"-webkit-appearance":"none"}})}},h=e=>{let{componentCls:t}=e;return{["".concat(t,"-clear-icon")]:{margin:0,color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,verticalAlign:-1,cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"&:hover":{color:e.colorTextTertiary},"&:active":{color:e.colorText},"&-hidden":{visibility:"hidden"},"&-has-suffix":{margin:"0 ".concat((0,r.bf)(e.inputAffixPadding))}}}},v=e=>{let{componentCls:t,inputAffixPadding:n,colorTextDescription:r,motionDurationSlow:o,colorIcon:a,colorIconHover:i,iconCls:c}=e;return{["".concat(t,"-affix-wrapper")]:Object.assign(Object.assign(Object.assign(Object.assign({},p(e)),{display:"inline-flex",["&:not(".concat(t,"-disabled):hover")]:{zIndex:1,["".concat(t,"-search-with-button &")]:{zIndex:0}},"&-focused, &:focus":{zIndex:1},["> input".concat(t)]:{padding:0,fontSize:"inherit",border:"none",borderRadius:0,outline:"none",background:"transparent",color:"inherit","&::-ms-reveal":{display:"none"},"&:focus":{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},["".concat(t)]:{"&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center","> *:not(:last-child)":{marginInlineEnd:e.paddingXS}},"&-show-count-suffix":{color:r},"&-show-count-has-suffix":{marginInlineEnd:e.paddingXXS},"&-prefix":{marginInlineEnd:n},"&-suffix":{marginInlineStart:n}}}),h(e)),{["".concat(c).concat(t,"-password-icon")]:{color:a,cursor:"pointer",transition:"all ".concat(o),"&:hover":{color:i}}})}},b=e=>{let{componentCls:t,borderRadiusLG:n,borderRadiusSM:r}=e;return{["".concat(t,"-group")]:Object.assign(Object.assign(Object.assign({},(0,o.Wf)(e)),m(e)),{"&-rtl":{direction:"rtl"},"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",width:"100%",textAlign:"start",verticalAlign:"top","&-rtl":{direction:"rtl"},"&-lg":{["".concat(t,"-group-addon")]:{borderRadius:n,fontSize:e.inputFontSizeLG}},"&-sm":{["".concat(t,"-group-addon")]:{borderRadius:r}}},(0,s.ir)(e)),(0,s.S5)(e)),{["&:not(".concat(t,"-compact-first-item):not(").concat(t,"-compact-last-item)").concat(t,"-compact-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderRadius:0}},["&:not(".concat(t,"-compact-last-item)").concat(t,"-compact-first-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartEndRadius:0,borderEndEndRadius:0}},["&:not(".concat(t,"-compact-first-item)").concat(t,"-compact-last-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartStartRadius:0,borderEndStartRadius:0}}})})}},y=e=>{let{componentCls:t,antCls:n}=e,r="".concat(t,"-search");return{[r]:{["".concat(t)]:{"&:hover, &:focus":{borderColor:e.colorPrimaryHover,["+ ".concat(t,"-group-addon ").concat(r,"-button:not(").concat(n,"-btn-primary)")]:{borderInlineStartColor:e.colorPrimaryHover}}},["".concat(t,"-affix-wrapper")]:{borderRadius:0},["".concat(t,"-lg")]:{lineHeight:e.calc(e.lineHeightLG).sub(2e-4).equal({unit:!1})},["> ".concat(t,"-group")]:{["> ".concat(t,"-group-addon:last-child")]:{insetInlineStart:-1,padding:0,border:0,["".concat(r,"-button")]:{paddingTop:0,paddingBottom:0,borderStartStartRadius:0,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius,borderEndStartRadius:0,boxShadow:"none"},["".concat(r,"-button:not(").concat(n,"-btn-primary)")]:{color:e.colorTextDescription,"&:hover":{color:e.colorPrimaryHover},"&:active":{color:e.colorPrimaryActive},["&".concat(n,"-btn-loading::before")]:{insetInlineStart:0,insetInlineEnd:0,insetBlockStart:0,insetBlockEnd:0}}}},["".concat(r,"-button")]:{height:e.controlHeight,"&:hover, &:focus":{zIndex:1}},["&-large ".concat(r,"-button")]:{height:e.controlHeightLG},["&-small ".concat(r,"-button")]:{height:e.controlHeightSM},"&-rtl":{direction:"rtl"},["&".concat(t,"-compact-item")]:{["&:not(".concat(t,"-compact-last-item)")]:{["".concat(t,"-group-addon")]:{["".concat(t,"-search-button")]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderRadius:0}}},["&:not(".concat(t,"-compact-first-item)")]:{["".concat(t,",").concat(t,"-affix-wrapper")]:{borderRadius:0}},["> ".concat(t,"-group-addon ").concat(t,"-search-button,\n > ").concat(t,",\n ").concat(t,"-affix-wrapper")]:{"&:hover,&:focus,&:active":{zIndex:2}},["> ".concat(t,"-affix-wrapper-focused")]:{zIndex:2}}}}},x=e=>{let{componentCls:t,paddingLG:n}=e,r="".concat(t,"-textarea");return{[r]:{position:"relative","&-show-count":{["> ".concat(t)]:{height:"100%"},["".concat(t,"-data-count")]:{position:"absolute",bottom:e.calc(e.fontSize).mul(e.lineHeight).mul(-1).equal(),insetInlineEnd:0,color:e.colorTextDescription,whiteSpace:"nowrap",pointerEvents:"none"}},"&-allow-clear":{["> ".concat(t)]:{paddingInlineEnd:n}},["&-affix-wrapper".concat(r,"-has-feedback")]:{["".concat(t)]:{paddingInlineEnd:n}},["&-affix-wrapper".concat(t,"-affix-wrapper")]:{padding:0,["> textarea".concat(t)]:{fontSize:"inherit",border:"none",outline:"none",background:"transparent","&:focus":{boxShadow:"none !important"}},["".concat(t,"-suffix")]:{margin:0,"> *:not(:last-child)":{marginInline:0},["".concat(t,"-clear-icon")]:{position:"absolute",insetInlineEnd:e.paddingXS,insetBlockStart:e.paddingXS},["".concat(r,"-suffix")]:{position:"absolute",top:0,insetInlineEnd:e.paddingInline,bottom:0,zIndex:1,display:"inline-flex",alignItems:"center",margin:"auto",pointerEvents:"none"}}}}}},w=e=>{let{componentCls:t}=e;return{["".concat(t,"-out-of-range")]:{["&, & input, & textarea, ".concat(t,"-show-count-suffix, ").concat(t,"-data-count")]:{color:e.colorError}}}};t.ZP=(0,i.I$)("Input",e=>{let t=(0,c.TS)(e,(0,l.e)(e));return[g(t),x(t),v(t),b(t),y(t),w(t),(0,a.c)(t)]},l.T)},5980:function(e,t,n){n.d(t,{T:function(){return a},e:function(){return o}});var r=n(316);function o(e){return(0,r.TS)(e,{inputAffixPadding:e.paddingXXS})}let a=e=>{let{controlHeight:t,fontSize:n,lineHeight:r,lineWidth:o,controlHeightSM:a,controlHeightLG:i,fontSizeLG:c,lineHeightLG:l,paddingSM:s,controlPaddingHorizontalSM:u,controlPaddingHorizontal:d,colorFillAlter:f,colorPrimaryHover:p,colorPrimary:m,controlOutlineWidth:g,controlOutline:h,colorErrorOutline:v,colorWarningOutline:b,colorBgContainer:y}=e;return{paddingBlock:Math.max(Math.round((t-n*r)/2*10)/10-o,0),paddingBlockSM:Math.max(Math.round((a-n*r)/2*10)/10-o,0),paddingBlockLG:Math.ceil((i-c*l)/2*10)/10-o,paddingInline:s-o,paddingInlineSM:u-o,paddingInlineLG:d-o,addonBg:f,activeBorderColor:m,hoverBorderColor:p,activeShadow:"0 0 0 ".concat(g,"px ").concat(h),errorActiveShadow:"0 0 0 ".concat(g,"px ").concat(v),warningActiveShadow:"0 0 0 ".concat(g,"px ").concat(b),hoverBg:y,activeBg:y,inputFontSize:n,inputFontSizeLG:c,inputFontSizeSM:n}}},1892:function(e,t,n){n.d(t,{H8:function(){return g},Mu:function(){return f},S5:function(){return v},ir:function(){return d},qG:function(){return s}});var r=n(8985),o=n(316);let a=e=>({borderColor:e.hoverBorderColor,backgroundColor:e.hoverBg}),i=e=>({color:e.colorTextDisabled,backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,boxShadow:"none",cursor:"not-allowed",opacity:1,"&:hover:not([disabled])":Object.assign({},a((0,o.TS)(e,{hoverBorderColor:e.colorBorder,hoverBg:e.colorBgContainerDisabled})))}),c=(e,t)=>({background:e.colorBgContainer,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:t.borderColor,"&:hover":{borderColor:t.hoverBorderColor,backgroundColor:e.hoverBg},"&:focus, &:focus-within":{borderColor:t.activeBorderColor,boxShadow:t.activeShadow,outline:0,backgroundColor:e.activeBg}}),l=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status,":not(").concat(e.componentCls,"-disabled)")]:Object.assign(Object.assign({},c(e,t)),{["".concat(e.componentCls,"-prefix, ").concat(e.componentCls,"-suffix")]:{color:t.affixColor}})}),s=(e,t)=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c(e,{borderColor:e.colorBorder,hoverBorderColor:e.colorPrimaryHover,activeBorderColor:e.colorPrimary,activeShadow:e.activeShadow})),{["&".concat(e.componentCls,"-disabled, &[disabled]")]:Object.assign({},i(e))}),l(e,{status:"error",borderColor:e.colorError,hoverBorderColor:e.colorErrorBorderHover,activeBorderColor:e.colorError,activeShadow:e.errorActiveShadow,affixColor:e.colorError})),l(e,{status:"warning",borderColor:e.colorWarning,hoverBorderColor:e.colorWarningBorderHover,activeBorderColor:e.colorWarning,activeShadow:e.warningActiveShadow,affixColor:e.colorWarning})),t)}),u=(e,t)=>({["&".concat(e.componentCls,"-group-wrapper-status-").concat(t.status)]:{["".concat(e.componentCls,"-group-addon")]:{borderColor:t.addonBorderColor,color:t.addonColor}}}),d=e=>({"&-outlined":Object.assign(Object.assign(Object.assign({["".concat(e.componentCls,"-group")]:{"&-addon":{background:e.addonBg,border:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)},"&-addon:first-child":{borderInlineEnd:0},"&-addon:last-child":{borderInlineStart:0}}},u(e,{status:"error",addonBorderColor:e.colorError,addonColor:e.colorErrorText})),u(e,{status:"warning",addonBorderColor:e.colorWarning,addonColor:e.colorWarningText})),{["&".concat(e.componentCls,"-group-wrapper-disabled")]:{["".concat(e.componentCls,"-group-addon")]:Object.assign({},i(e))}})}),f=(e,t)=>({"&-borderless":Object.assign({background:"transparent",border:"none","&:focus, &:focus-within":{outline:"none"},["&".concat(e.componentCls,"-disabled, &[disabled]")]:{color:e.colorTextDisabled}},t)}),p=(e,t)=>({background:t.bg,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:"transparent","input&, & input, textarea&, & textarea":{color:null==t?void 0:t.inputColor},"&:hover":{background:t.hoverBg},"&:focus, &:focus-within":{outline:0,borderColor:t.activeBorderColor,backgroundColor:e.activeBg}}),m=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status,":not(").concat(e.componentCls,"-disabled)")]:Object.assign(Object.assign({},p(e,t)),{["".concat(e.componentCls,"-prefix, ").concat(e.componentCls,"-suffix")]:{color:t.affixColor}})}),g=(e,t)=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},p(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.colorPrimary})),{["&".concat(e.componentCls,"-disabled, &[disabled]")]:Object.assign({},i(e))}),m(e,{status:"error",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,inputColor:e.colorErrorText,affixColor:e.colorError})),m(e,{status:"warning",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,inputColor:e.colorWarningText,affixColor:e.colorWarning})),t)}),h=(e,t)=>({["&".concat(e.componentCls,"-group-wrapper-status-").concat(t.status)]:{["".concat(e.componentCls,"-group-addon")]:{background:t.addonBg,color:t.addonColor}}}),v=e=>({"&-filled":Object.assign(Object.assign(Object.assign({["".concat(e.componentCls,"-group")]:{"&-addon":{background:e.colorFillTertiary},["".concat(e.componentCls,"-filled:not(:focus):not(:focus-within)")]:{"&:not(:first-child)":{borderInlineStart:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit)},"&:not(:last-child)":{borderInlineEnd:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit)}}}},h(e,{status:"error",addonBg:e.colorErrorBg,addonColor:e.colorErrorText})),h(e,{status:"warning",addonBg:e.colorWarningBg,addonColor:e.colorWarningText})),{["&".concat(e.componentCls,"-group-wrapper-disabled")]:{["".concat(e.componentCls,"-group")]:{"&-addon":{background:e.colorFillTertiary,color:e.colorTextDisabled},"&-addon:first-child":{borderInlineStart:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderTop:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderBottom:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)},"&-addon:last-child":{borderInlineEnd:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderTop:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderBottom:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)}}}})})},3302:function(e,t,n){let r=(0,n(4090).createContext)(void 0);t.Z=r},9474:function(e,t,n){n.d(t,{Z:function(){return i}});var r={placeholder:"Select time",rangePlaceholder:["Start time","End time"]};let o={lang:Object.assign({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"}),timePickerLocale:Object.assign({},r)},a="${label} is not a valid ${type}";var i={locale:"en",Pagination:{items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"Page",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages",page_size:"Page Size"},DatePicker:o,TimePicker:r,Calendar:o,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckall:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Tour:{Next:"Next",Previous:"Previous",Finish:"Finish"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:a,method:a,array:a,object:a,number:a,date:a,boolean:a,integer:a,float:a,regexp:a,email:a,url:a,hex:a},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"},QRCode:{expired:"QR code expired",refresh:"Refresh",scanned:"Scanned"},ColorPicker:{presetEmpty:"Empty"}}},595:function(e,t,n){var r=n(4090),o=n(3302),a=n(9474);t.Z=(e,t)=>{let n=r.useContext(o.Z);return[r.useMemo(()=>{var r;let o=t||a.Z[e],i=null!==(r=null==n?void 0:n[e])&&void 0!==r?r:{};return Object.assign(Object.assign({},"function"==typeof o?o():o),i||{})},[e,t,n]),r.useMemo(()=>{let e=null==n?void 0:n.locale;return(null==n?void 0:n.exist)&&!e?a.Z.locale:e},[n])]}},588:function(e,t,n){n.d(t,{ZP:function(){return eu}});var r=n(3787),o=n(4090),a=n(7274);let i=o.createContext({});var c=n(7499),l=n(4165),s=n(9537),u=n(7136),d=n(653),f=n(388),p=n(9334),m=n(6480),g=n.n(m),h=n(406),v=n(6787),b=n(5239),y=n(9542),x=n(2110),w=n(833),E=n(9367),C=n(4295),S=o.forwardRef(function(e,t){var n=e.prefixCls,r=e.style,a=e.className,i=e.duration,c=void 0===i?4.5:i,l=e.eventKey,s=e.content,u=e.closable,d=e.closeIcon,f=e.props,p=e.onClick,m=e.onNoticeClose,v=e.times,b=e.hovering,y=o.useState(!1),E=(0,h.Z)(y,2),S=E[0],O=E[1],Z=b||S,k=function(){m(l)};o.useEffect(function(){if(!Z&&c>0){var e=setTimeout(function(){k()},1e3*c);return function(){clearTimeout(e)}}},[c,Z,v]);var R="".concat(n,"-notice");return o.createElement("div",(0,x.Z)({},f,{ref:t,className:g()(R,a,(0,w.Z)({},"".concat(R,"-closable"),u)),style:r,onMouseEnter:function(e){var t;O(!0),null==f||null===(t=f.onMouseEnter)||void 0===t||t.call(f,e)},onMouseLeave:function(e){var t;O(!1),null==f||null===(t=f.onMouseLeave)||void 0===t||t.call(f,e)},onClick:p}),o.createElement("div",{className:"".concat(R,"-content")},s),u&&o.createElement("a",{tabIndex:0,className:"".concat(R,"-close"),onKeyDown:function(e){("Enter"===e.key||"Enter"===e.code||e.keyCode===C.Z.ENTER)&&k()},onClick:function(e){e.preventDefault(),e.stopPropagation(),k()}},void 0===d?"x":d))}),O=o.createContext({}),Z=function(e){var t=e.children,n=e.classNames;return o.createElement(O.Provider,{value:{classNames:n}},t)},k=n(6976),R=function(e){var t,n,r,o={offset:8,threshold:3,gap:16};return e&&"object"===(0,k.Z)(e)&&(o.offset=null!==(t=e.offset)&&void 0!==t?t:8,o.threshold=null!==(n=e.threshold)&&void 0!==n?n:3,o.gap=null!==(r=e.gap)&&void 0!==r?r:16),[!!e,o]},M=["className","style","classNames","styles"],j=function(e){var t,n=e.configList,a=e.placement,i=e.prefixCls,c=e.className,l=e.style,s=e.motion,u=e.onAllNoticeRemoved,d=e.onNoticeClose,f=e.stack,p=(0,o.useContext)(O).classNames,m=(0,o.useRef)({}),y=(0,o.useState)(null),C=(0,h.Z)(y,2),Z=C[0],k=C[1],j=(0,o.useState)([]),P=(0,h.Z)(j,2),N=P[0],I=P[1],T=n.map(function(e){return{config:e,key:String(e.key)}}),A=R(f),F=(0,h.Z)(A,2),z=F[0],L=F[1],_=L.offset,B=L.threshold,H=L.gap,D=z&&(N.length>0||T.length<=B),W="function"==typeof s?s(a):s;return(0,o.useEffect)(function(){z&&N.length>1&&I(function(e){return e.filter(function(e){return T.some(function(t){return e===t.key})})})},[N,T,z]),(0,o.useEffect)(function(){var e,t;z&&m.current[null===(e=T[T.length-1])||void 0===e?void 0:e.key]&&k(m.current[null===(t=T[T.length-1])||void 0===t?void 0:t.key])},[T,z]),o.createElement(E.V4,(0,x.Z)({key:a,className:g()(i,"".concat(i,"-").concat(a),null==p?void 0:p.list,c,(t={},(0,w.Z)(t,"".concat(i,"-stack"),!!z),(0,w.Z)(t,"".concat(i,"-stack-expanded"),D),t)),style:l,keys:T,motionAppear:!0},W,{onAllRemoved:function(){u(a)}}),function(e,t){var n=e.config,c=e.className,l=e.style,s=e.index,u=n.key,f=n.times,h=String(u),y=n.className,w=n.style,E=n.classNames,C=n.styles,O=(0,v.Z)(n,M),k=T.findIndex(function(e){return e.key===h}),R={};if(z){var j=T.length-1-(k>-1?k:s-1),P="top"===a||"bottom"===a?"-50%":"0";if(j>0){R.height=D?null===(A=m.current[h])||void 0===A?void 0:A.offsetHeight:null==Z?void 0:Z.offsetHeight;for(var A,F,L,B,W=0,V=0;V-1?m.current[h]=e:delete m.current[h]},prefixCls:i,classNames:E,styles:C,className:g()(y,null==p?void 0:p.notice),style:w,times:f,key:u,eventKey:u,onNoticeClose:d,hovering:z&&N.length>0})))})},P=o.forwardRef(function(e,t){var n=e.prefixCls,a=void 0===n?"rc-notification":n,i=e.container,c=e.motion,l=e.maxCount,s=e.className,u=e.style,d=e.onAllRemoved,f=e.stack,p=e.renderNotifications,m=o.useState([]),g=(0,h.Z)(m,2),v=g[0],x=g[1],w=function(e){var t,n=v.find(function(t){return t.key===e});null==n||null===(t=n.onClose)||void 0===t||t.call(n),x(function(t){return t.filter(function(t){return t.key!==e})})};o.useImperativeHandle(t,function(){return{open:function(e){x(function(t){var n,o=(0,r.Z)(t),a=o.findIndex(function(t){return t.key===e.key}),i=(0,b.Z)({},e);return a>=0?(i.times=((null===(n=t[a])||void 0===n?void 0:n.times)||0)+1,o[a]=i):(i.times=0,o.push(i)),l>0&&o.length>l&&(o=o.slice(-l)),o})},close:function(e){w(e)},destroy:function(){x([])}}});var E=o.useState({}),C=(0,h.Z)(E,2),S=C[0],O=C[1];o.useEffect(function(){var e={};v.forEach(function(t){var n=t.placement,r=void 0===n?"topRight":n;r&&(e[r]=e[r]||[],e[r].push(t))}),Object.keys(S).forEach(function(t){e[t]=e[t]||[]}),O(e)},[v]);var Z=function(e){O(function(t){var n=(0,b.Z)({},t);return(n[e]||[]).length||delete n[e],n})},k=o.useRef(!1);if(o.useEffect(function(){Object.keys(S).length>0?k.current=!0:k.current&&(null==d||d(),k.current=!1)},[S]),!i)return null;var R=Object.keys(S);return(0,y.createPortal)(o.createElement(o.Fragment,null,R.map(function(e){var t=S[e],n=o.createElement(j,{key:e,configList:t,placement:e,prefixCls:a,className:null==s?void 0:s(e),style:null==u?void 0:u(e),motion:c,onNoticeClose:w,onAllNoticeRemoved:Z,stack:f});return p?p(n,{prefixCls:a,key:e}):n})),i)}),N=["getContainer","motion","prefixCls","maxCount","className","style","onAllRemoved","stack","renderNotifications"],I=function(){return document.body},T=0,A=n(8985),F=n(1761),z=n(1303),L=n(6585),_=n(316);let B=e=>{let{componentCls:t,iconCls:n,boxShadow:r,colorText:o,colorSuccess:a,colorError:i,colorWarning:c,colorInfo:l,fontSizeLG:s,motionEaseInOutCirc:u,motionDurationSlow:d,marginXS:f,paddingXS:p,borderRadiusLG:m,zIndexPopup:g,contentPadding:h,contentBg:v}=e,b="".concat(t,"-notice"),y=new A.E4("MessageMoveIn",{"0%":{padding:0,transform:"translateY(-100%)",opacity:0},"100%":{padding:p,transform:"translateY(0)",opacity:1}}),x=new A.E4("MessageMoveOut",{"0%":{maxHeight:e.height,padding:p,opacity:1},"100%":{maxHeight:0,padding:0,opacity:0}}),w={padding:p,textAlign:"center",["".concat(t,"-custom-content > ").concat(n)]:{verticalAlign:"text-bottom",marginInlineEnd:f,fontSize:s},["".concat(b,"-content")]:{display:"inline-block",padding:h,background:v,borderRadius:m,boxShadow:r,pointerEvents:"all"},["".concat(t,"-success > ").concat(n)]:{color:a},["".concat(t,"-error > ").concat(n)]:{color:i},["".concat(t,"-warning > ").concat(n)]:{color:c},["".concat(t,"-info > ").concat(n,",\n ").concat(t,"-loading > ").concat(n)]:{color:l}};return[{[t]:Object.assign(Object.assign({},(0,z.Wf)(e)),{color:o,position:"fixed",top:f,width:"100%",pointerEvents:"none",zIndex:g,["".concat(t,"-move-up")]:{animationFillMode:"forwards"},["\n ".concat(t,"-move-up-appear,\n ").concat(t,"-move-up-enter\n ")]:{animationName:y,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["\n ".concat(t,"-move-up-appear").concat(t,"-move-up-appear-active,\n ").concat(t,"-move-up-enter").concat(t,"-move-up-enter-active\n ")]:{animationPlayState:"running"},["".concat(t,"-move-up-leave")]:{animationName:x,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["".concat(t,"-move-up-leave").concat(t,"-move-up-leave-active")]:{animationPlayState:"running"},"&-rtl":{direction:"rtl",span:{direction:"rtl"}}})},{[t]:{["".concat(b,"-wrapper")]:Object.assign({},w)}},{["".concat(t,"-notice-pure-panel")]:Object.assign(Object.assign({},w),{padding:0,textAlign:"start"})}]};var H=(0,L.I$)("Message",e=>[B((0,_.TS)(e,{height:150}))],e=>({zIndexPopup:e.zIndexPopupBase+F.u6+10,contentBg:e.colorBgElevated,contentPadding:"".concat((e.controlHeightLG-e.fontSize*e.lineHeight)/2,"px ").concat(e.paddingSM,"px")})),D=n(2935),W=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let V={info:o.createElement(f.Z,null),success:o.createElement(s.Z,null),error:o.createElement(u.Z,null),warning:o.createElement(d.Z,null),loading:o.createElement(p.Z,null)},q=e=>{let{prefixCls:t,type:n,icon:r,children:a}=e;return o.createElement("div",{className:g()("".concat(t,"-custom-content"),"".concat(t,"-").concat(n))},r||V[n],o.createElement("span",null,a))};var X=n(1183),G=n(9233);function U(e){let t;let n=new Promise(n=>{t=e(()=>{n(!0)})}),r=()=>{null==t||t()};return r.then=(e,t)=>n.then(e,t),r.promise=n,r}var K=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let $=e=>{let{children:t,prefixCls:n}=e,r=(0,D.Z)(n),[a,i,c]=H(n,r);return a(o.createElement(Z,{classNames:{list:g()(i,c,r)}},t))},Y=(e,t)=>{let{prefixCls:n,key:r}=t;return o.createElement($,{prefixCls:n,key:r},e)},Q=o.forwardRef((e,t)=>{let{top:n,prefixCls:a,getContainer:i,maxCount:l,duration:s=3,rtl:u,transitionName:d,onAllRemoved:f}=e,{getPrefixCls:p,getPopupContainer:m,message:b,direction:y}=o.useContext(c.E_),x=a||p("message"),w=o.createElement("span",{className:"".concat(x,"-close-x")},o.createElement(X.Z,{className:"".concat(x,"-close-icon")})),[E,C]=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getContainer,n=void 0===t?I:t,a=e.motion,i=e.prefixCls,c=e.maxCount,l=e.className,s=e.style,u=e.onAllRemoved,d=e.stack,f=e.renderNotifications,p=(0,v.Z)(e,N),m=o.useState(),g=(0,h.Z)(m,2),b=g[0],y=g[1],x=o.useRef(),w=o.createElement(P,{container:b,ref:x,prefixCls:i,motion:a,maxCount:c,className:l,style:s,onAllRemoved:u,stack:d,renderNotifications:f}),E=o.useState([]),C=(0,h.Z)(E,2),S=C[0],O=C[1],Z=o.useMemo(function(){return{open:function(e){var t=function(){for(var e={},t=arguments.length,n=Array(t),r=0;r({left:"50%",transform:"translateX(-50%)",top:null!=n?n:8}),className:()=>g()({["".concat(x,"-rtl")]:null!=u?u:"rtl"===y}),motion:()=>({motionName:null!=d?d:"".concat(x,"-move-up")}),closable:!1,closeIcon:w,duration:s,getContainer:()=>(null==i?void 0:i())||(null==m?void 0:m())||document.body,maxCount:l,onAllRemoved:f,renderNotifications:Y});return o.useImperativeHandle(t,()=>Object.assign(Object.assign({},E),{prefixCls:x,message:b})),C}),J=0;function ee(e){let t=o.useRef(null);return(0,G.ln)("Message"),[o.useMemo(()=>{let e=e=>{var n;null===(n=t.current)||void 0===n||n.close(e)},n=n=>{if(!t.current){let e=()=>{};return e.then=()=>{},e}let{open:r,prefixCls:a,message:i}=t.current,c="".concat(a,"-notice"),{content:l,icon:s,type:u,key:d,className:f,style:p,onClose:m}=n,h=K(n,["content","icon","type","key","className","style","onClose"]),v=d;return null==v&&(J+=1,v="antd-message-".concat(J)),U(t=>(r(Object.assign(Object.assign({},h),{key:v,content:o.createElement(q,{prefixCls:a,type:u,icon:s},l),placement:"top",className:g()(u&&"".concat(c,"-").concat(u),f,null==i?void 0:i.className),style:Object.assign(Object.assign({},null==i?void 0:i.style),p),onClose:()=>{null==m||m(),t()}})),()=>{e(v)}))},r={open:n,destroy:n=>{var r;void 0!==n?e(n):null===(r=t.current)||void 0===r||r.destroy()}};return["info","success","warning","error","loading"].forEach(e=>{r[e]=(t,r,o)=>{let a,i;return"function"==typeof r?i=r:(a=r,i=o),n(Object.assign(Object.assign({onClose:i,duration:a},t&&"object"==typeof t&&"content"in t?t:{content:t}),{type:e}))}}),r},[]),o.createElement(Q,Object.assign({key:"message-holder"},e,{ref:t}))]}let et=null,en=e=>e(),er=[],eo={};function ea(){let{getContainer:e,duration:t,rtl:n,maxCount:r,top:o}=eo,a=(null==e?void 0:e())||document.body;return{getContainer:()=>a,duration:t,rtl:n,maxCount:r,top:o}}let ei=o.forwardRef((e,t)=>{let{messageConfig:n,sync:r}=e,{getPrefixCls:a}=(0,o.useContext)(c.E_),l=eo.prefixCls||a("message"),s=(0,o.useContext)(i),[u,d]=ee(Object.assign(Object.assign(Object.assign({},n),{prefixCls:l}),s.message));return o.useImperativeHandle(t,()=>{let e=Object.assign({},u);return Object.keys(e).forEach(t=>{e[t]=function(){return r(),u[t].apply(u,arguments)}}),{instance:e,sync:r}}),d}),ec=o.forwardRef((e,t)=>{let[n,r]=o.useState(ea),a=()=>{r(ea)};o.useEffect(a,[]);let i=(0,l.w6)(),c=i.getRootPrefixCls(),s=i.getIconPrefixCls(),u=i.getTheme(),d=o.createElement(ei,{ref:t,sync:a,messageConfig:n});return o.createElement(l.ZP,{prefixCls:c,iconPrefixCls:s,theme:u},i.holderRender?i.holderRender(d):d)});function el(){if(!et){let e=document.createDocumentFragment(),t={fragment:e};et=t,en(()=>{(0,a.s)(o.createElement(ec,{ref:e=>{let{instance:n,sync:r}=e||{};Promise.resolve().then(()=>{!t.instance&&n&&(t.instance=n,t.sync=r,el())})}}),e)});return}et.instance&&(er.forEach(e=>{let{type:t,skipped:n}=e;if(!n)switch(t){case"open":en(()=>{let t=et.instance.open(Object.assign(Object.assign({},eo),e.config));null==t||t.then(e.resolve),e.setCloseFn(t)});break;case"destroy":en(()=>{null==et||et.instance.destroy(e.key)});break;default:en(()=>{var n;let o=(n=et.instance)[t].apply(n,(0,r.Z)(e.args));null==o||o.then(e.resolve),e.setCloseFn(o)})}}),er=[])}let es={open:function(e){let t=U(t=>{let n;let r={type:"open",config:e,resolve:t,setCloseFn:e=>{n=e}};return er.push(r),()=>{n?en(()=>{n()}):r.skipped=!0}});return el(),t},destroy:function(e){er.push({type:"destroy",key:e}),el()},config:function(e){eo=Object.assign(Object.assign({},eo),e),en(()=>{var e;null===(e=null==et?void 0:et.sync)||void 0===e||e.call(et)})},useMessage:function(e){return ee(e)},_InternalPanelDoNotUseOrYouWillBeFired:e=>{let{prefixCls:t,className:n,type:r,icon:a,content:i}=e,l=W(e,["prefixCls","className","type","icon","content"]),{getPrefixCls:s}=o.useContext(c.E_),u=t||s("message"),d=(0,D.Z)(u),[f,p,m]=H(u,d);return f(o.createElement(S,Object.assign({},l,{prefixCls:u,className:g()(n,p,"".concat(u,"-notice-pure-panel"),m,d),eventKey:"pure",duration:null,content:o.createElement(q,{prefixCls:u,type:r,icon:a},i)})))}};["success","info","warning","error","loading"].forEach(e=>{es[e]=function(){for(var t=arguments.length,n=Array(t),r=0;r{let r;let o={type:e,args:t,resolve:n,setCloseFn:e=>{r=e}};return er.push(o),()=>{r?en(()=>{r()}):o.skipped=!0}});return el(),n}(e,n)}});var eu=es},7171:function(e,t,n){let r;n.d(t,{Z:function(){return eY}});var o=n(3787),a=n(4090),i=n(7274),c=n(7499),l=n(4165),s=n(9537),u=n(7136),d=n(653),f=n(388),p=n(6480),m=n.n(p),g=n(1761),h=n(7387),v=n(595),b=n(4750),y=n(9211),x=n(1861),w=n(1350),E=e=>{let{type:t,children:n,prefixCls:r,buttonProps:o,close:i,autoFocus:c,emitEvent:l,isSilent:s,quitOnNullishReturnValue:u,actionFn:d}=e,f=a.useRef(!1),p=a.useRef(null),[m,g]=(0,y.Z)(!1),h=function(){null==i||i.apply(void 0,arguments)};a.useEffect(()=>{let e=null;return c&&(e=setTimeout(()=>{var e;null===(e=p.current)||void 0===e||e.focus()})),()=>{e&&clearTimeout(e)}},[]);let v=e=>{e&&e.then&&(g(!0),e.then(function(){g(!1,!0),h.apply(void 0,arguments),f.current=!1},e=>{if(g(!1,!0),f.current=!1,null==s||!s())return Promise.reject(e)}))};return a.createElement(x.ZP,Object.assign({},(0,w.nx)(t),{onClick:e=>{let t;if(!f.current){if(f.current=!0,!d){h();return}if(l){var n;if(t=d(e),u&&!((n=t)&&n.then)){f.current=!1,h(e);return}}else if(d.length)t=d(i),f.current=!1;else if(!(t=d())){h();return}v(t)}},loading:m,prefixCls:r},o,{ref:p}),n)};let C=a.createContext({}),{Provider:S}=C;var O=()=>{let{autoFocusButton:e,cancelButtonProps:t,cancelTextLocale:n,isSilent:r,mergedOkCancel:o,rootPrefixCls:i,close:c,onCancel:l,onConfirm:s}=(0,a.useContext)(C);return o?a.createElement(E,{isSilent:r,actionFn:l,close:function(){null==c||c.apply(void 0,arguments),null==s||s(!1)},autoFocus:"cancel"===e,buttonProps:t,prefixCls:"".concat(i,"-btn")},n):null},Z=()=>{let{autoFocusButton:e,close:t,isSilent:n,okButtonProps:r,rootPrefixCls:o,okTextLocale:i,okType:c,onConfirm:l,onOk:s}=(0,a.useContext)(C);return a.createElement(E,{isSilent:n,type:c||"primary",actionFn:s,close:function(){null==t||t.apply(void 0,arguments),null==l||l(!0)},autoFocus:"ok"===e,buttonProps:r,prefixCls:"".concat(o,"-btn")},i)},k=n(1183),R=n(2110),M=n(406),j=n(8804),P=a.createContext({}),N=n(5239),I=n(1506),T=n(1010),A=n(4295),F=n(2480);function z(e,t,n){var r=t;return!r&&n&&(r="".concat(e,"-").concat(n)),r}function L(e,t){var n=e["page".concat(t?"Y":"X","Offset")],r="scroll".concat(t?"Top":"Left");if("number"!=typeof n){var o=e.document;"number"!=typeof(n=o.documentElement[r])&&(n=o.body[r])}return n}var _=n(9367),B=n(4084),H=a.memo(function(e){return e.children},function(e,t){return!t.shouldUpdate}),D={width:0,height:0,overflow:"hidden",outline:"none"},W=a.forwardRef(function(e,t){var n,r,o,i=e.prefixCls,c=e.className,l=e.style,s=e.title,u=e.ariaId,d=e.footer,f=e.closable,p=e.closeIcon,g=e.onClose,h=e.children,v=e.bodyStyle,b=e.bodyProps,y=e.modalRender,x=e.onMouseDown,w=e.onMouseUp,E=e.holderRef,C=e.visible,S=e.forceRender,O=e.width,Z=e.height,k=e.classNames,M=e.styles,j=a.useContext(P).panel,I=(0,B.x1)(E,j),T=(0,a.useRef)(),A=(0,a.useRef)();a.useImperativeHandle(t,function(){return{focus:function(){var e;null===(e=T.current)||void 0===e||e.focus()},changeActive:function(e){var t=document.activeElement;e&&t===A.current?T.current.focus():e||t!==T.current||A.current.focus()}}});var F={};void 0!==O&&(F.width=O),void 0!==Z&&(F.height=Z),d&&(n=a.createElement("div",{className:m()("".concat(i,"-footer"),null==k?void 0:k.footer),style:(0,N.Z)({},null==M?void 0:M.footer)},d)),s&&(r=a.createElement("div",{className:m()("".concat(i,"-header"),null==k?void 0:k.header),style:(0,N.Z)({},null==M?void 0:M.header)},a.createElement("div",{className:"".concat(i,"-title"),id:u},s))),f&&(o=a.createElement("button",{type:"button",onClick:g,"aria-label":"Close",className:"".concat(i,"-close")},p||a.createElement("span",{className:"".concat(i,"-close-x")})));var z=a.createElement("div",{className:m()("".concat(i,"-content"),null==k?void 0:k.content),style:null==M?void 0:M.content},o,r,a.createElement("div",(0,R.Z)({className:m()("".concat(i,"-body"),null==k?void 0:k.body),style:(0,N.Z)((0,N.Z)({},v),null==M?void 0:M.body)},b),h),n);return a.createElement("div",{key:"dialog-element",role:"dialog","aria-labelledby":s?u:null,"aria-modal":"true",ref:I,style:(0,N.Z)((0,N.Z)({},l),F),className:m()(i,c),onMouseDown:x,onMouseUp:w},a.createElement("div",{tabIndex:0,ref:T,style:D,"aria-hidden":"true"}),a.createElement(H,{shouldUpdate:C||S},y?y(z):z),a.createElement("div",{tabIndex:0,ref:A,style:D,"aria-hidden":"true"}))}),V=a.forwardRef(function(e,t){var n=e.prefixCls,r=e.title,o=e.style,i=e.className,c=e.visible,l=e.forceRender,s=e.destroyOnClose,u=e.motionName,d=e.ariaId,f=e.onVisibleChanged,p=e.mousePosition,g=(0,a.useRef)(),h=a.useState(),v=(0,M.Z)(h,2),b=v[0],y=v[1],x={};function w(){var e,t,n,r,o,a=(n={left:(t=(e=g.current).getBoundingClientRect()).left,top:t.top},o=(r=e.ownerDocument).defaultView||r.parentWindow,n.left+=L(o),n.top+=L(o,!0),n);y(p?"".concat(p.x-a.left,"px ").concat(p.y-a.top,"px"):"")}return b&&(x.transformOrigin=b),a.createElement(_.ZP,{visible:c,onVisibleChanged:f,onAppearPrepare:w,onEnterPrepare:w,forceRender:l,motionName:u,removeOnLeave:s,ref:g},function(c,l){var s=c.className,u=c.style;return a.createElement(W,(0,R.Z)({},e,{ref:t,title:r,ariaId:d,prefixCls:n,holderRef:l,style:(0,N.Z)((0,N.Z)((0,N.Z)({},u),o),x),className:m()(i,s)}))})});function q(e){var t=e.prefixCls,n=e.style,r=e.visible,o=e.maskProps,i=e.motionName,c=e.className;return a.createElement(_.ZP,{key:"mask",visible:r,motionName:i,leavedClassName:"".concat(t,"-mask-hidden")},function(e,r){var i=e.className,l=e.style;return a.createElement("div",(0,R.Z)({ref:r,style:(0,N.Z)((0,N.Z)({},l),n),className:m()("".concat(t,"-mask"),i,c)},o))})}function X(e){var t=e.prefixCls,n=void 0===t?"rc-dialog":t,r=e.zIndex,o=e.visible,i=void 0!==o&&o,c=e.keyboard,l=void 0===c||c,s=e.focusTriggerAfterClose,u=void 0===s||s,d=e.wrapStyle,f=e.wrapClassName,p=e.wrapProps,g=e.onClose,h=e.afterOpenChange,v=e.afterClose,b=e.transitionName,y=e.animation,x=e.closable,w=e.mask,E=void 0===w||w,C=e.maskTransitionName,S=e.maskAnimation,O=e.maskClosable,Z=e.maskStyle,k=e.maskProps,j=e.rootClassName,P=e.classNames,L=e.styles,_=(0,a.useRef)(),B=(0,a.useRef)(),H=(0,a.useRef)(),D=a.useState(i),W=(0,M.Z)(D,2),X=W[0],G=W[1],U=(0,T.Z)();function K(e){null==g||g(e)}var $=(0,a.useRef)(!1),Y=(0,a.useRef)(),Q=null;return(void 0===O||O)&&(Q=function(e){$.current?$.current=!1:B.current===e.target&&K(e)}),(0,a.useEffect)(function(){i&&(G(!0),(0,I.Z)(B.current,document.activeElement)||(_.current=document.activeElement))},[i]),(0,a.useEffect)(function(){return function(){clearTimeout(Y.current)}},[]),a.createElement("div",(0,R.Z)({className:m()("".concat(n,"-root"),j)},(0,F.Z)(e,{data:!0})),a.createElement(q,{prefixCls:n,visible:E&&i,motionName:z(n,C,S),style:(0,N.Z)((0,N.Z)({zIndex:r},Z),null==L?void 0:L.mask),maskProps:k,className:null==P?void 0:P.mask}),a.createElement("div",(0,R.Z)({tabIndex:-1,onKeyDown:function(e){if(l&&e.keyCode===A.Z.ESC){e.stopPropagation(),K(e);return}i&&e.keyCode===A.Z.TAB&&H.current.changeActive(!e.shiftKey)},className:m()("".concat(n,"-wrap"),f,null==P?void 0:P.wrapper),ref:B,onClick:Q,style:(0,N.Z)((0,N.Z)((0,N.Z)({zIndex:r},d),null==L?void 0:L.wrapper),{},{display:X?null:"none"})},p),a.createElement(V,(0,R.Z)({},e,{onMouseDown:function(){clearTimeout(Y.current),$.current=!0},onMouseUp:function(){Y.current=setTimeout(function(){$.current=!1})},ref:H,closable:void 0===x||x,ariaId:U,prefixCls:n,visible:i&&X,onClose:K,onVisibleChanged:function(e){if(e)!function(){if(!(0,I.Z)(B.current,document.activeElement)){var e;null===(e=H.current)||void 0===e||e.focus()}}();else{if(G(!1),E&&_.current&&u){try{_.current.focus({preventScroll:!0})}catch(e){}_.current=null}X&&(null==v||v())}null==h||h(e)},motionName:z(n,b,y)}))))}V.displayName="Content",n(3850);var G=function(e){var t=e.visible,n=e.getContainer,r=e.forceRender,o=e.destroyOnClose,i=void 0!==o&&o,c=e.afterClose,l=e.panelRef,s=a.useState(t),u=(0,M.Z)(s,2),d=u[0],f=u[1],p=a.useMemo(function(){return{panel:l}},[l]);return(a.useEffect(function(){t&&f(!0)},[t]),r||!i||d)?a.createElement(P.Provider,{value:p},a.createElement(j.Z,{open:t||r||d,autoDestroy:!1,getContainer:n,autoLock:t||d},a.createElement(X,(0,R.Z)({},e,{destroyOnClose:i,afterClose:function(){null==c||c(),f(!1)}})))):null};G.displayName="Dialog";var U=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:a.createElement(k.Z,null),o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if("boolean"==typeof e?!e:void 0===t?!o:!1===t||null===t)return[!1,null];let i="boolean"==typeof t||null==t?r:t;return[!0,n?n(i):i]},K=n(2127),$=n(6718),Y=n(7137),Q=n(2801),J=n(8563);function ee(){}let et=a.createContext({add:ee,remove:ee});var en=n(7094),er=()=>{let{cancelButtonProps:e,cancelTextLocale:t,onCancel:n}=(0,a.useContext)(C);return a.createElement(x.ZP,Object.assign({onClick:n},e),t)},eo=()=>{let{confirmLoading:e,okButtonProps:t,okType:n,okTextLocale:r,onOk:o}=(0,a.useContext)(C);return a.createElement(x.ZP,Object.assign({},(0,w.nx)(n),{loading:e,onClick:o},t),r)},ea=n(4678);function ei(e,t){return a.createElement("span",{className:"".concat(e,"-close-x")},t||a.createElement(k.Z,{className:"".concat(e,"-close-icon")}))}let ec=e=>{let t;let{okText:n,okType:r="primary",cancelText:i,confirmLoading:c,onOk:l,onCancel:s,okButtonProps:u,cancelButtonProps:d,footer:f}=e,[p]=(0,v.Z)("Modal",(0,ea.A)()),m={confirmLoading:c,okButtonProps:u,cancelButtonProps:d,okTextLocale:n||(null==p?void 0:p.okText),cancelTextLocale:i||(null==p?void 0:p.cancelText),okType:r,onOk:l,onCancel:s},g=a.useMemo(()=>m,(0,o.Z)(Object.values(m)));return"function"==typeof f||void 0===f?(t=a.createElement(a.Fragment,null,a.createElement(er,null),a.createElement(eo,null)),"function"==typeof f&&(t=f(t,{OkBtn:eo,CancelBtn:er})),t=a.createElement(S,{value:g},t)):t=f,a.createElement(en.n,{disabled:!1},t)};var el=n(1303),es=n(8985),eu=n(9353);let ed=new es.E4("antFadeIn",{"0%":{opacity:0},"100%":{opacity:1}}),ef=new es.E4("antFadeOut",{"0%":{opacity:1},"100%":{opacity:0}}),ep=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{antCls:n}=e,r="".concat(n,"-fade"),o=t?"&":"";return[(0,eu.R)(r,ed,ef,e.motionDurationMid,t),{["\n ".concat(o).concat(r,"-enter,\n ").concat(o).concat(r,"-appear\n ")]:{opacity:0,animationTimingFunction:"linear"},["".concat(o).concat(r,"-leave")]:{animationTimingFunction:"linear"}}]};var em=n(8854),eg=n(316),eh=n(6585);function ev(e){return{position:e,inset:0}}let eb=e=>{let{componentCls:t,antCls:n}=e;return[{["".concat(t,"-root")]:{["".concat(t).concat(n,"-zoom-enter, ").concat(t).concat(n,"-zoom-appear")]:{transform:"none",opacity:0,animationDuration:e.motionDurationSlow,userSelect:"none"},["".concat(t).concat(n,"-zoom-leave ").concat(t,"-content")]:{pointerEvents:"none"},["".concat(t,"-mask")]:Object.assign(Object.assign({},ev("fixed")),{zIndex:e.zIndexPopupBase,height:"100%",backgroundColor:e.colorBgMask,pointerEvents:"none",["".concat(t,"-hidden")]:{display:"none"}}),["".concat(t,"-wrap")]:Object.assign(Object.assign({},ev("fixed")),{zIndex:e.zIndexPopupBase,overflow:"auto",outline:0,WebkitOverflowScrolling:"touch",["&:has(".concat(t).concat(n,"-zoom-enter), &:has(").concat(t).concat(n,"-zoom-appear)")]:{pointerEvents:"none"}})}},{["".concat(t,"-root")]:ep(e)}]},ey=e=>{let{componentCls:t}=e;return[{["".concat(t,"-root")]:{["".concat(t,"-wrap-rtl")]:{direction:"rtl"},["".concat(t,"-centered")]:{textAlign:"center","&::before":{display:"inline-block",width:0,height:"100%",verticalAlign:"middle",content:'""'},[t]:{top:0,display:"inline-block",paddingBottom:0,textAlign:"start",verticalAlign:"middle"}},["@media (max-width: ".concat(e.screenSMMax,"px)")]:{[t]:{maxWidth:"calc(100vw - 16px)",margin:"".concat((0,es.bf)(e.marginXS)," auto")},["".concat(t,"-centered")]:{[t]:{flex:1}}}}},{[t]:Object.assign(Object.assign({},(0,el.Wf)(e)),{pointerEvents:"none",position:"relative",top:100,width:"auto",maxWidth:"calc(100vw - ".concat((0,es.bf)(e.calc(e.margin).mul(2).equal()),")"),margin:"0 auto",paddingBottom:e.paddingLG,["".concat(t,"-title")]:{margin:0,color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.titleFontSize,lineHeight:e.titleLineHeight,wordWrap:"break-word"},["".concat(t,"-content")]:{position:"relative",backgroundColor:e.contentBg,backgroundClip:"padding-box",border:0,borderRadius:e.borderRadiusLG,boxShadow:e.boxShadow,pointerEvents:"auto",padding:e.contentPadding},["".concat(t,"-close")]:Object.assign({position:"absolute",top:e.calc(e.modalHeaderHeight).sub(e.modalCloseBtnSize).div(2).equal(),insetInlineEnd:e.calc(e.modalHeaderHeight).sub(e.modalCloseBtnSize).div(2).equal(),zIndex:e.calc(e.zIndexPopupBase).add(10).equal(),padding:0,color:e.modalCloseIconColor,fontWeight:e.fontWeightStrong,lineHeight:1,textDecoration:"none",background:"transparent",borderRadius:e.borderRadiusSM,width:e.modalCloseBtnSize,height:e.modalCloseBtnSize,border:0,outline:0,cursor:"pointer",transition:"color ".concat(e.motionDurationMid,", background-color ").concat(e.motionDurationMid),"&-x":{display:"flex",fontSize:e.fontSizeLG,fontStyle:"normal",lineHeight:"".concat((0,es.bf)(e.modalCloseBtnSize)),justifyContent:"center",textTransform:"none",textRendering:"auto"},"&:hover":{color:e.modalIconHoverColor,backgroundColor:e.closeBtnHoverBg,textDecoration:"none"},"&:active":{backgroundColor:e.closeBtnActiveBg}},(0,el.Qy)(e)),["".concat(t,"-header")]:{color:e.colorText,background:e.headerBg,borderRadius:"".concat((0,es.bf)(e.borderRadiusLG)," ").concat((0,es.bf)(e.borderRadiusLG)," 0 0"),marginBottom:e.headerMarginBottom,padding:e.headerPadding,borderBottom:e.headerBorderBottom},["".concat(t,"-body")]:{fontSize:e.fontSize,lineHeight:e.lineHeight,wordWrap:"break-word",padding:e.bodyPadding},["".concat(t,"-footer")]:{textAlign:"end",background:e.footerBg,marginTop:e.footerMarginTop,padding:e.footerPadding,borderTop:e.footerBorderTop,borderRadius:e.footerBorderRadius,["> ".concat(e.antCls,"-btn + ").concat(e.antCls,"-btn")]:{marginInlineStart:e.marginXS}},["".concat(t,"-open")]:{overflow:"hidden"}})},{["".concat(t,"-pure-panel")]:{top:"auto",padding:0,display:"flex",flexDirection:"column",["".concat(t,"-content,\n ").concat(t,"-body,\n ").concat(t,"-confirm-body-wrapper")]:{display:"flex",flexDirection:"column",flex:"auto"},["".concat(t,"-confirm-body")]:{marginBottom:"auto"}}}]},ex=e=>{let{componentCls:t}=e;return{["".concat(t,"-root")]:{["".concat(t,"-wrap-rtl")]:{direction:"rtl",["".concat(t,"-confirm-body")]:{direction:"rtl"}}}}},ew=e=>{let t=e.padding,n=e.fontSizeHeading5,r=e.lineHeightHeading5;return(0,eg.TS)(e,{modalHeaderHeight:e.calc(e.calc(r).mul(n).equal()).add(e.calc(t).mul(2).equal()).equal(),modalFooterBorderColorSplit:e.colorSplit,modalFooterBorderStyle:e.lineType,modalFooterBorderWidth:e.lineWidth,modalIconHoverColor:e.colorIconHover,modalCloseIconColor:e.colorIcon,modalCloseBtnSize:e.fontHeight,modalConfirmIconSize:e.fontHeight,modalTitleHeight:e.calc(e.titleFontSize).mul(e.titleLineHeight).equal()})},eE=e=>({footerBg:"transparent",headerBg:e.colorBgElevated,titleLineHeight:e.lineHeightHeading5,titleFontSize:e.fontSizeHeading5,contentBg:e.colorBgElevated,titleColor:e.colorTextHeading,closeBtnHoverBg:e.wireframe?"transparent":e.colorFillContent,closeBtnActiveBg:e.wireframe?"transparent":e.colorFillContentHover,contentPadding:e.wireframe?0:"".concat((0,es.bf)(e.paddingMD)," ").concat((0,es.bf)(e.paddingContentHorizontalLG)),headerPadding:e.wireframe?"".concat((0,es.bf)(e.padding)," ").concat((0,es.bf)(e.paddingLG)):0,headerBorderBottom:e.wireframe?"".concat((0,es.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit):"none",headerMarginBottom:e.wireframe?0:e.marginXS,bodyPadding:e.wireframe?e.paddingLG:0,footerPadding:e.wireframe?"".concat((0,es.bf)(e.paddingXS)," ").concat((0,es.bf)(e.padding)):0,footerBorderTop:e.wireframe?"".concat((0,es.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit):"none",footerBorderRadius:e.wireframe?"0 0 ".concat((0,es.bf)(e.borderRadiusLG)," ").concat((0,es.bf)(e.borderRadiusLG)):0,footerMarginTop:e.wireframe?0:e.marginSM,confirmBodyPadding:e.wireframe?"".concat((0,es.bf)(2*e.padding)," ").concat((0,es.bf)(2*e.padding)," ").concat((0,es.bf)(e.paddingLG)):0,confirmIconMarginInlineEnd:e.wireframe?e.margin:e.marginSM,confirmBtnsMarginTop:e.wireframe?e.marginLG:e.marginSM});var eC=(0,eh.I$)("Modal",e=>{let t=ew(e);return[ey(t),ex(t),eb(t),(0,em._y)(t,"zoom")]},eE,{unitless:{titleLineHeight:!0}}),eS=n(2935),eO=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};(0,K.Z)()&&window.document.documentElement&&document.documentElement.addEventListener("click",e=>{r={x:e.pageX,y:e.pageY},setTimeout(()=>{r=null},100)},!0);var eZ=e=>{var t;let{getPopupContainer:n,getPrefixCls:o,direction:i,modal:l}=a.useContext(c.E_),s=t=>{let{onCancel:n}=e;null==n||n(t)},{prefixCls:u,className:d,rootClassName:f,open:p,wrapClassName:v,centered:b,getContainer:y,closeIcon:x,closable:w,focusTriggerAfterClose:E=!0,style:C,visible:S,width:O=520,footer:Z,classNames:R,styles:M}=e,j=eO(e,["prefixCls","className","rootClassName","open","wrapClassName","centered","getContainer","closeIcon","closable","focusTriggerAfterClose","style","visible","width","footer","classNames","styles"]),P=o("modal",u),N=o(),I=(0,eS.Z)(P),[T,A,F]=eC(P,I),z=m()(v,{["".concat(P,"-centered")]:!!b,["".concat(P,"-wrap-rtl")]:"rtl"===i}),L=null!==Z&&a.createElement(ec,Object.assign({},e,{onOk:t=>{let{onOk:n}=e;null==n||n(t)},onCancel:s})),[_,B]=U(w,x,e=>ei(P,e),a.createElement(k.Z,{className:"".concat(P,"-close-icon")}),!0),H=function(e){let t=a.useContext(et),n=a.useRef();return(0,J.zX)(r=>{if(r){let o=e?r.querySelector(e):r;t.add(o),n.current=o}else t.remove(n.current)})}(".".concat(P,"-content")),[D,W]=(0,g.Cn)("Modal",j.zIndex);return T(a.createElement(Q.BR,null,a.createElement(Y.Ux,{status:!0,override:!0},a.createElement($.Z.Provider,{value:W},a.createElement(G,Object.assign({width:O},j,{zIndex:D,getContainer:void 0===y?n:y,prefixCls:P,rootClassName:m()(A,f,F,I),footer:L,visible:null!=p?p:S,mousePosition:null!==(t=j.mousePosition)&&void 0!==t?t:r,onClose:s,closable:_,closeIcon:B,focusTriggerAfterClose:E,transitionName:(0,h.m)(N,"zoom",e.transitionName),maskTransitionName:(0,h.m)(N,"fade",e.maskTransitionName),className:m()(A,d,null==l?void 0:l.className),style:Object.assign(Object.assign({},null==l?void 0:l.style),C),classNames:Object.assign(Object.assign({wrapper:z},null==l?void 0:l.classNames),R),styles:Object.assign(Object.assign({},null==l?void 0:l.styles),M),panelRef:H}))))))};let ek=e=>{let{componentCls:t,titleFontSize:n,titleLineHeight:r,modalConfirmIconSize:o,fontSize:a,lineHeight:i,modalTitleHeight:c,fontHeight:l,confirmBodyPadding:s}=e,u="".concat(t,"-confirm");return{[u]:{"&-rtl":{direction:"rtl"},["".concat(e.antCls,"-modal-header")]:{display:"none"},["".concat(u,"-body-wrapper")]:Object.assign({},(0,el.dF)()),["&".concat(t," ").concat(t,"-body")]:{padding:s},["".concat(u,"-body")]:{display:"flex",flexWrap:"nowrap",alignItems:"start",["> ".concat(e.iconCls)]:{flex:"none",fontSize:o,marginInlineEnd:e.confirmIconMarginInlineEnd,marginTop:e.calc(e.calc(l).sub(o).equal()).div(2).equal()},["&-has-title > ".concat(e.iconCls)]:{marginTop:e.calc(e.calc(c).sub(o).equal()).div(2).equal()}},["".concat(u,"-paragraph")]:{display:"flex",flexDirection:"column",flex:"auto",rowGap:e.marginXS,maxWidth:"calc(100% - ".concat((0,es.bf)(e.calc(e.modalConfirmIconSize).add(e.marginSM).equal()),")")},["".concat(u,"-title")]:{color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:n,lineHeight:r},["".concat(u,"-content")]:{color:e.colorText,fontSize:a,lineHeight:i},["".concat(u,"-btns")]:{textAlign:"end",marginTop:e.confirmBtnsMarginTop,["".concat(e.antCls,"-btn + ").concat(e.antCls,"-btn")]:{marginBottom:0,marginInlineStart:e.marginXS}}},["".concat(u,"-error ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorError},["".concat(u,"-warning ").concat(u,"-body > ").concat(e.iconCls,",\n ").concat(u,"-confirm ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorWarning},["".concat(u,"-info ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorInfo},["".concat(u,"-success ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorSuccess}}};var eR=(0,eh.bk)(["Modal","confirm"],e=>[ek(ew(e))],eE,{order:-1e3}),eM=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function ej(e){let{prefixCls:t,icon:n,okText:r,cancelText:i,confirmPrefixCls:c,type:l,okCancel:p,footer:g,locale:h}=e,b=eM(e,["prefixCls","icon","okText","cancelText","confirmPrefixCls","type","okCancel","footer","locale"]),y=n;if(!n&&null!==n)switch(l){case"info":y=a.createElement(f.Z,null);break;case"success":y=a.createElement(s.Z,null);break;case"error":y=a.createElement(u.Z,null);break;default:y=a.createElement(d.Z,null)}let x=null!=p?p:"confirm"===l,w=null!==e.autoFocusButton&&(e.autoFocusButton||"ok"),[E]=(0,v.Z)("Modal"),C=h||E,k=r||(x?null==C?void 0:C.okText:null==C?void 0:C.justOkText),R=Object.assign({autoFocusButton:w,cancelTextLocale:i||(null==C?void 0:C.cancelText),okTextLocale:k,mergedOkCancel:x},b),M=a.useMemo(()=>R,(0,o.Z)(Object.values(R))),j=a.createElement(a.Fragment,null,a.createElement(O,null),a.createElement(Z,null)),P=void 0!==e.title&&null!==e.title,N="".concat(c,"-body");return a.createElement("div",{className:"".concat(c,"-body-wrapper")},a.createElement("div",{className:m()(N,{["".concat(N,"-has-title")]:P})},y,a.createElement("div",{className:"".concat(c,"-paragraph")},P&&a.createElement("span",{className:"".concat(c,"-title")},e.title),a.createElement("div",{className:"".concat(c,"-content")},e.content))),void 0===g||"function"==typeof g?a.createElement(S,{value:M},a.createElement("div",{className:"".concat(c,"-btns")},"function"==typeof g?g(j,{OkBtn:Z,CancelBtn:O}):j)):g,a.createElement(eR,{prefixCls:t}))}let eP=e=>{let{close:t,zIndex:n,afterClose:r,open:o,keyboard:i,centered:c,getContainer:l,maskStyle:s,direction:u,prefixCls:d,wrapClassName:f,rootPrefixCls:p,bodyStyle:v,closable:y=!1,closeIcon:x,modalRender:w,focusTriggerAfterClose:E,onConfirm:C,styles:S}=e,O="".concat(d,"-confirm"),Z=e.width||416,k=e.style||{},R=void 0===e.mask||e.mask,M=void 0!==e.maskClosable&&e.maskClosable,j=m()(O,"".concat(O,"-").concat(e.type),{["".concat(O,"-rtl")]:"rtl"===u},e.className),[,P]=(0,b.ZP)(),N=a.useMemo(()=>void 0!==n?n:P.zIndexPopupBase+g.u6,[n,P]);return a.createElement(eZ,{prefixCls:d,className:j,wrapClassName:m()({["".concat(O,"-centered")]:!!e.centered},f),onCancel:()=>{null==t||t({triggerCancel:!0}),null==C||C(!1)},open:o,title:"",footer:null,transitionName:(0,h.m)(p||"","zoom",e.transitionName),maskTransitionName:(0,h.m)(p||"","fade",e.maskTransitionName),mask:R,maskClosable:M,style:k,styles:Object.assign({body:v,mask:s},S),width:Z,zIndex:N,afterClose:r,keyboard:i,centered:c,getContainer:l,closable:y,closeIcon:x,modalRender:w,focusTriggerAfterClose:E},a.createElement(ej,Object.assign({},e,{confirmPrefixCls:O})))};var eN=e=>{let{rootPrefixCls:t,iconPrefixCls:n,direction:r,theme:o}=e;return a.createElement(l.ZP,{prefixCls:t,iconPrefixCls:n,direction:r,theme:o},a.createElement(eP,Object.assign({},e)))},eI=[];let eT="",eA=e=>{var t,n;let{prefixCls:r,getContainer:o,direction:i}=e,l=(0,ea.A)(),s=(0,a.useContext)(c.E_),u=eT||s.getPrefixCls(),d=r||"".concat(u,"-modal"),f=o;return!1===f&&(f=void 0),a.createElement(eN,Object.assign({},e,{rootPrefixCls:u,prefixCls:d,iconPrefixCls:s.iconPrefixCls,theme:s.theme,direction:null!=i?i:s.direction,locale:null!==(n=null===(t=s.locale)||void 0===t?void 0:t.Modal)&&void 0!==n?n:l,getContainer:f}))};function eF(e){let t;let n=(0,l.w6)(),r=document.createDocumentFragment(),c=Object.assign(Object.assign({},e),{close:d,open:!0});function s(){for(var t=arguments.length,n=Array(t),a=0;ae&&e.triggerCancel);e.onCancel&&c&&e.onCancel.apply(e,[()=>{}].concat((0,o.Z)(n.slice(1))));for(let e=0;e{let t=n.getPrefixCls(void 0,eT),o=n.getIconPrefixCls(),c=n.getTheme(),s=a.createElement(eA,Object.assign({},e));(0,i.s)(a.createElement(l.ZP,{prefixCls:t,iconPrefixCls:o,theme:c},n.holderRender?n.holderRender(s):s),r)})}function d(){for(var t=arguments.length,n=Array(t),r=0;r{"function"==typeof e.afterClose&&e.afterClose(),s.apply(this,n)}})).visible&&delete c.visible,u(c)}return u(c),eI.push(d),{destroy:d,update:function(e){u(c="function"==typeof e?e(c):Object.assign(Object.assign({},c),e))}}}function ez(e){return Object.assign(Object.assign({},e),{type:"warning"})}function eL(e){return Object.assign(Object.assign({},e),{type:"info"})}function e_(e){return Object.assign(Object.assign({},e),{type:"success"})}function eB(e){return Object.assign(Object.assign({},e),{type:"error"})}function eH(e){return Object.assign(Object.assign({},e),{type:"confirm"})}var eD=n(1467),eW=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},eV=(0,eD.i)(e=>{let{prefixCls:t,className:n,closeIcon:r,closable:o,type:i,title:l,children:s,footer:u}=e,d=eW(e,["prefixCls","className","closeIcon","closable","type","title","children","footer"]),{getPrefixCls:f}=a.useContext(c.E_),p=f(),g=t||f("modal"),h=(0,eS.Z)(p),[v,b,y]=eC(g,h),x="".concat(g,"-confirm"),w={};return w=i?{closable:null!=o&&o,title:"",footer:"",children:a.createElement(ej,Object.assign({},e,{prefixCls:g,confirmPrefixCls:x,rootPrefixCls:p,content:s}))}:{closable:null==o||o,title:l,footer:null!==u&&a.createElement(ec,Object.assign({},e)),children:s},v(a.createElement(W,Object.assign({prefixCls:g,className:m()(b,"".concat(g,"-pure-panel"),i&&x,i&&"".concat(x,"-").concat(i),n,y,h)},d,{closeIcon:ei(g,r),closable:o},w)))}),eq=n(9474),eX=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},eG=a.forwardRef((e,t)=>{var n,{afterClose:r,config:i}=e,l=eX(e,["afterClose","config"]);let[s,u]=a.useState(!0),[d,f]=a.useState(i),{direction:p,getPrefixCls:m}=a.useContext(c.E_),g=m("modal"),h=m(),b=function(){u(!1);for(var e=arguments.length,t=Array(e),n=0;ne&&e.triggerCancel);d.onCancel&&r&&d.onCancel.apply(d,[()=>{}].concat((0,o.Z)(t.slice(1))))};a.useImperativeHandle(t,()=>({destroy:b,update:e=>{f(t=>Object.assign(Object.assign({},t),e))}}));let y=null!==(n=d.okCancel)&&void 0!==n?n:"confirm"===d.type,[x]=(0,v.Z)("Modal",eq.Z.Modal);return a.createElement(eN,Object.assign({prefixCls:g,rootPrefixCls:h},d,{close:b,open:s,afterClose:()=>{var e;r(),null===(e=d.afterClose)||void 0===e||e.call(d)},okText:d.okText||(y?null==x?void 0:x.okText:null==x?void 0:x.justOkText),direction:d.direction||p,cancelText:d.cancelText||(null==x?void 0:x.cancelText)},l))});let eU=0,eK=a.memo(a.forwardRef((e,t)=>{let[n,r]=function(){let[e,t]=a.useState([]);return[e,a.useCallback(e=>(t(t=>[].concat((0,o.Z)(t),[e])),()=>{t(t=>t.filter(t=>t!==e))}),[])]}();return a.useImperativeHandle(t,()=>({patchElement:r}),[]),a.createElement(a.Fragment,null,n)}));function e$(e){return eF(ez(e))}eZ.useModal=function(){let e=a.useRef(null),[t,n]=a.useState([]);a.useEffect(()=>{t.length&&((0,o.Z)(t).forEach(e=>{e()}),n([]))},[t]);let r=a.useCallback(t=>function(r){var i;let c,l;eU+=1;let s=a.createRef(),u=new Promise(e=>{c=e}),d=!1,f=a.createElement(eG,{key:"modal-".concat(eU),config:t(r),ref:s,afterClose:()=>{null==l||l()},isSilent:()=>d,onConfirm:e=>{c(e)}});return(l=null===(i=e.current)||void 0===i?void 0:i.patchElement(f))&&eI.push(l),{destroy:()=>{function e(){var e;null===(e=s.current)||void 0===e||e.destroy()}s.current?e():n(t=>[].concat((0,o.Z)(t),[e]))},update:e=>{function t(){var t;null===(t=s.current)||void 0===t||t.update(e)}s.current?t():n(e=>[].concat((0,o.Z)(e),[t]))},then:e=>(d=!0,u.then(e))}},[]);return[a.useMemo(()=>({info:r(eL),success:r(e_),error:r(eB),warning:r(ez),confirm:r(eH)}),[]),a.createElement(eK,{key:"modal-holder",ref:e})]},eZ.info=function(e){return eF(eL(e))},eZ.success=function(e){return eF(e_(e))},eZ.error=function(e){return eF(eB(e))},eZ.warning=e$,eZ.warn=e$,eZ.confirm=function(e){return eF(eH(e))},eZ.destroyAll=function(){for(;eI.length;){let e=eI.pop();e&&e()}},eZ.config=function(e){let{rootPrefixCls:t}=e;eT=t},eZ._InternalPanelDoNotUseOrYouWillBeFired=eV;var eY=eZ},4678:function(e,t,n){n.d(t,{A:function(){return l},f:function(){return c}});var r=n(9474);let o=Object.assign({},r.Z.Modal),a=[],i=()=>a.reduce((e,t)=>Object.assign(Object.assign({},e),t),r.Z.Modal);function c(e){if(e){let t=Object.assign({},e);return a.push(t),o=i(),()=>{a=a.filter(e=>e!==t),o=i()}}o=Object.assign({},r.Z.Modal)}function l(){return o}},6776:function(e,t,n){n.d(t,{default:function(){return t4}});var r=n(4090),o=n(6480),a=n.n(o),i=n(2110),c=n(3787),l=n(833),s=n(5239),u=n(406),d=n(6787),f=n(6976),p=n(4329),m=n(3850),g=n(4800),h=n(6158),v=n(4295),b=n(4084),y=function(e){var t=e.className,n=e.customizeIcon,o=e.customizeIconProps,i=e.children,c=e.onMouseDown,l=e.onClick,s="function"==typeof n?n(o):n;return r.createElement("span",{className:t,onMouseDown:function(e){e.preventDefault(),null==c||c(e)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:l,"aria-hidden":!0},void 0!==s?s:r.createElement("span",{className:a()(t.split(/\s+/).map(function(e){return"".concat(e,"-icon")}))},i))},x=function(e,t,n,o,a){var i=arguments.length>5&&void 0!==arguments[5]&&arguments[5],c=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,s=r.useMemo(function(){return"object"===(0,f.Z)(o)?o.clearIcon:a||void 0},[o,a]);return{allowClear:r.useMemo(function(){return!i&&!!o&&(!!n.length||!!c)&&!("combobox"===l&&""===c)},[o,i,n.length,c,l]),clearIcon:r.createElement(y,{className:"".concat(e,"-clear"),onMouseDown:t,customizeIcon:s},"\xd7")}},w=r.createContext(null);function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:250,t=r.useRef(null),n=r.useRef(null);return r.useEffect(function(){return function(){window.clearTimeout(n.current)}},[]),[function(){return t.current},function(r){(r||null===t.current)&&(t.current=r),window.clearTimeout(n.current),n.current=window.setTimeout(function(){t.current=null},e)}]}var C=n(2480),S=n(6505),O=["prefixCls","invalidate","item","renderItem","responsive","responsiveDisabled","registerSize","itemKey","className","style","children","display","order","component"],Z=void 0,k=r.forwardRef(function(e,t){var n,o=e.prefixCls,c=e.invalidate,l=e.item,u=e.renderItem,f=e.responsive,p=e.responsiveDisabled,m=e.registerSize,g=e.itemKey,h=e.className,v=e.style,b=e.children,y=e.display,x=e.order,w=e.component,E=(0,d.Z)(e,O),C=f&&!y;r.useEffect(function(){return function(){m(g,null)}},[]);var k=u&&l!==Z?u(l):b;c||(n={opacity:C?0:1,height:C?0:Z,overflowY:C?"hidden":Z,order:f?x:Z,pointerEvents:C?"none":Z,position:C?"absolute":Z});var R={};C&&(R["aria-hidden"]=!0);var M=r.createElement(void 0===w?"div":w,(0,i.Z)({className:a()(!c&&o,h),style:(0,s.Z)((0,s.Z)({},n),v)},R,E,{ref:t}),k);return f&&(M=r.createElement(S.Z,{onResize:function(e){m(g,e.offsetWidth)},disabled:p},M)),M});k.displayName="Item";var R=n(4811),M=n(9542),j=n(9223);function P(e,t){var n=r.useState(t),o=(0,u.Z)(n,2),a=o[0],i=o[1];return[a,(0,R.Z)(function(t){e(function(){i(t)})})]}var N=r.createContext(null),I=["component"],T=["className"],A=["className"],F=r.forwardRef(function(e,t){var n=r.useContext(N);if(!n){var o=e.component,c=(0,d.Z)(e,I);return r.createElement(void 0===o?"div":o,(0,i.Z)({},c,{ref:t}))}var l=n.className,s=(0,d.Z)(n,T),u=e.className,f=(0,d.Z)(e,A);return r.createElement(N.Provider,{value:null},r.createElement(k,(0,i.Z)({ref:t,className:a()(l,u)},s,f)))});F.displayName="RawItem";var z=["prefixCls","data","renderItem","renderRawItem","itemKey","itemWidth","ssr","style","className","maxCount","renderRest","renderRawRest","suffix","component","itemComponent","onVisibleChange"],L="responsive",_="invalidate";function B(e){return"+ ".concat(e.length," ...")}var H=r.forwardRef(function(e,t){var n,o,c=e.prefixCls,l=void 0===c?"rc-overflow":c,f=e.data,p=void 0===f?[]:f,m=e.renderItem,h=e.renderRawItem,v=e.itemKey,b=e.itemWidth,y=void 0===b?10:b,x=e.ssr,w=e.style,E=e.className,C=e.maxCount,O=e.renderRest,Z=e.renderRawRest,R=e.suffix,I=e.component,T=e.itemComponent,A=e.onVisibleChange,F=(0,d.Z)(e,z),H="full"===x,D=(n=r.useRef(null),function(e){n.current||(n.current=[],function(e){if("undefined"==typeof MessageChannel)(0,j.Z)(e);else{var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(void 0)}}(function(){(0,M.unstable_batchedUpdates)(function(){n.current.forEach(function(e){e()}),n.current=null})})),n.current.push(e)}),W=P(D,null),V=(0,u.Z)(W,2),q=V[0],X=V[1],G=q||0,U=P(D,new Map),K=(0,u.Z)(U,2),$=K[0],Y=K[1],Q=P(D,0),J=(0,u.Z)(Q,2),ee=J[0],et=J[1],en=P(D,0),er=(0,u.Z)(en,2),eo=er[0],ea=er[1],ei=P(D,0),ec=(0,u.Z)(ei,2),el=ec[0],es=ec[1],eu=(0,r.useState)(null),ed=(0,u.Z)(eu,2),ef=ed[0],ep=ed[1],em=(0,r.useState)(null),eg=(0,u.Z)(em,2),eh=eg[0],ev=eg[1],eb=r.useMemo(function(){return null===eh&&H?Number.MAX_SAFE_INTEGER:eh||0},[eh,q]),ey=(0,r.useState)(!1),ex=(0,u.Z)(ey,2),ew=ex[0],eE=ex[1],eC="".concat(l,"-item"),eS=Math.max(ee,eo),eO=C===L,eZ=p.length&&eO,ek=C===_,eR=eZ||"number"==typeof C&&p.length>C,eM=(0,r.useMemo)(function(){var e=p;return eZ?e=null===q&&H?p:p.slice(0,Math.min(p.length,G/y)):"number"==typeof C&&(e=p.slice(0,C)),e},[p,y,q,C,eZ]),ej=(0,r.useMemo)(function(){return eZ?p.slice(eb+1):p.slice(eM.length)},[p,eM,eZ,eb]),eP=(0,r.useCallback)(function(e,t){var n;return"function"==typeof v?v(e):null!==(n=v&&(null==e?void 0:e[v]))&&void 0!==n?n:t},[v]),eN=(0,r.useCallback)(m||function(e){return e},[m]);function eI(e,t,n){(eh!==e||void 0!==t&&t!==ef)&&(ev(e),n||(eE(eG){eI(r-1,e-o-el+eo);break}}R&&eA(0)+el>G&&ep(null)}},[G,$,eo,el,eP,eM]);var eF=ew&&!!ej.length,ez={};null!==ef&&eZ&&(ez={position:"absolute",left:ef,top:0});var eL={prefixCls:eC,responsive:eZ,component:T,invalidate:ek},e_=h?function(e,t){var n=eP(e,t);return r.createElement(N.Provider,{key:n,value:(0,s.Z)((0,s.Z)({},eL),{},{order:t,item:e,itemKey:n,registerSize:eT,display:t<=eb})},h(e,t))}:function(e,t){var n=eP(e,t);return r.createElement(k,(0,i.Z)({},eL,{order:t,key:n,item:e,renderItem:eN,itemKey:n,registerSize:eT,display:t<=eb}))},eB={order:eF?eb:Number.MAX_SAFE_INTEGER,className:"".concat(eC,"-rest"),registerSize:function(e,t){ea(t),et(eo)},display:eF};if(Z)Z&&(o=r.createElement(N.Provider,{value:(0,s.Z)((0,s.Z)({},eL),eB)},Z(ej)));else{var eH=O||B;o=r.createElement(k,(0,i.Z)({},eL,eB),"function"==typeof eH?eH(ej):eH)}var eD=r.createElement(void 0===I?"div":I,(0,i.Z)({className:a()(!ek&&l,E),style:w,ref:t},F),eM.map(e_),eR?o:null,R&&r.createElement(k,(0,i.Z)({},eL,{responsive:eO,responsiveDisabled:!eZ,order:eb,className:"".concat(eC,"-suffix"),registerSize:function(e,t){es(t)},display:!0,style:ez}),R));return eO&&(eD=r.createElement(S.Z,{onResize:function(e,t){X(t.clientWidth)},disabled:!eZ},eD)),eD});H.displayName="Overflow",H.Item=F,H.RESPONSIVE=L,H.INVALIDATE=_;var D=r.forwardRef(function(e,t){var n,o=e.prefixCls,i=e.id,c=e.inputElement,l=e.disabled,u=e.tabIndex,d=e.autoFocus,f=e.autoComplete,p=e.editable,g=e.activeDescendantId,h=e.value,v=e.maxLength,y=e.onKeyDown,x=e.onMouseDown,w=e.onChange,E=e.onPaste,C=e.onCompositionStart,S=e.onCompositionEnd,O=e.open,Z=e.attrs,k=c||r.createElement("input",null),R=k,M=R.ref,j=R.props,P=j.onKeyDown,N=j.onChange,I=j.onMouseDown,T=j.onCompositionStart,A=j.onCompositionEnd,F=j.style;return(0,m.Kp)(!("maxLength"in k.props),"Passing 'maxLength' to input element directly may not work because input in BaseSelect is controlled."),k=r.cloneElement(k,(0,s.Z)((0,s.Z)((0,s.Z)({type:"search"},j),{},{id:i,ref:(0,b.sQ)(t,M),disabled:l,tabIndex:u,autoComplete:f||"off",autoFocus:d,className:a()("".concat(o,"-selection-search-input"),null===(n=k)||void 0===n||null===(n=n.props)||void 0===n?void 0:n.className),role:"combobox","aria-expanded":O||!1,"aria-haspopup":"listbox","aria-owns":"".concat(i,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(i,"_list"),"aria-activedescendant":O?g:void 0},Z),{},{value:p?h:"",maxLength:v,readOnly:!p,unselectable:p?null:"on",style:(0,s.Z)((0,s.Z)({},F),{},{opacity:p?null:0}),onKeyDown:function(e){y(e),P&&P(e)},onMouseDown:function(e){x(e),I&&I(e)},onChange:function(e){w(e),N&&N(e)},onCompositionStart:function(e){C(e),T&&T(e)},onCompositionEnd:function(e){S(e),A&&A(e)},onPaste:E}))});function W(e){return Array.isArray(e)?e:void 0!==e?[e]:[]}var V=window.document&&window.document.documentElement;function q(e){return["string","number"].includes((0,f.Z)(e))}function X(e){var t=void 0;return e&&(q(e.title)?t=e.title.toString():q(e.label)&&(t=e.label.toString())),t}function G(e){var t;return null!==(t=e.key)&&void 0!==t?t:e.value}var U=function(e){e.preventDefault(),e.stopPropagation()},K=function(e){var t,n,o=e.id,i=e.prefixCls,c=e.values,s=e.open,d=e.searchValue,f=e.autoClearSearchValue,p=e.inputRef,m=e.placeholder,g=e.disabled,h=e.mode,v=e.showSearch,b=e.autoFocus,x=e.autoComplete,w=e.activeDescendantId,E=e.tabIndex,S=e.removeIcon,O=e.maxTagCount,Z=e.maxTagTextLength,k=e.maxTagPlaceholder,R=void 0===k?function(e){return"+ ".concat(e.length," ...")}:k,M=e.tagRender,j=e.onToggleOpen,P=e.onRemove,N=e.onInputChange,I=e.onInputPaste,T=e.onInputKeyDown,A=e.onInputMouseDown,F=e.onInputCompositionStart,z=e.onInputCompositionEnd,L=r.useRef(null),_=(0,r.useState)(0),B=(0,u.Z)(_,2),W=B[0],q=B[1],K=(0,r.useState)(!1),$=(0,u.Z)(K,2),Y=$[0],Q=$[1],J="".concat(i,"-selection"),ee=s||"multiple"===h&&!1===f||"tags"===h?d:"",et="tags"===h||"multiple"===h&&!1===f||v&&(s||Y);t=function(){q(L.current.scrollWidth)},n=[ee],V?r.useLayoutEffect(t,n):r.useEffect(t,n);var en=function(e,t,n,o,i){return r.createElement("span",{title:X(e),className:a()("".concat(J,"-item"),(0,l.Z)({},"".concat(J,"-item-disabled"),n))},r.createElement("span",{className:"".concat(J,"-item-content")},t),o&&r.createElement(y,{className:"".concat(J,"-item-remove"),onMouseDown:U,onClick:i,customizeIcon:S},"\xd7"))},er=r.createElement("div",{className:"".concat(J,"-search"),style:{width:W},onFocus:function(){Q(!0)},onBlur:function(){Q(!1)}},r.createElement(D,{ref:p,open:s,prefixCls:i,id:o,inputElement:null,disabled:g,autoFocus:b,autoComplete:x,editable:et,activeDescendantId:w,value:ee,onKeyDown:T,onMouseDown:A,onChange:N,onPaste:I,onCompositionStart:F,onCompositionEnd:z,tabIndex:E,attrs:(0,C.Z)(e,!0)}),r.createElement("span",{ref:L,className:"".concat(J,"-search-mirror"),"aria-hidden":!0},ee,"\xa0")),eo=r.createElement(H,{prefixCls:"".concat(J,"-overflow"),data:c,renderItem:function(e){var t,n=e.disabled,o=e.label,a=e.value,i=!g&&!n,c=o;if("number"==typeof Z&&("string"==typeof o||"number"==typeof o)){var l=String(c);l.length>Z&&(c="".concat(l.slice(0,Z),"..."))}var u=function(t){t&&t.stopPropagation(),P(e)};return"function"==typeof M?(t=c,r.createElement("span",{onMouseDown:function(e){U(e),j(!s)}},M({label:t,value:a,disabled:n,closable:i,onClose:u}))):en(e,c,n,i,u)},renderRest:function(e){var t="function"==typeof R?R(e):R;return en({title:t},t,!1)},suffix:er,itemKey:G,maxCount:O});return r.createElement(r.Fragment,null,eo,!c.length&&!ee&&r.createElement("span",{className:"".concat(J,"-placeholder")},m))},$=function(e){var t=e.inputElement,n=e.prefixCls,o=e.id,a=e.inputRef,i=e.disabled,c=e.autoFocus,l=e.autoComplete,s=e.activeDescendantId,d=e.mode,f=e.open,p=e.values,m=e.placeholder,g=e.tabIndex,h=e.showSearch,v=e.searchValue,b=e.activeValue,y=e.maxLength,x=e.onInputKeyDown,w=e.onInputMouseDown,E=e.onInputChange,S=e.onInputPaste,O=e.onInputCompositionStart,Z=e.onInputCompositionEnd,k=e.title,R=r.useState(!1),M=(0,u.Z)(R,2),j=M[0],P=M[1],N="combobox"===d,I=N||h,T=p[0],A=v||"";N&&b&&!j&&(A=b),r.useEffect(function(){N&&P(!1)},[N,b]);var F=("combobox"===d||!!f||!!h)&&!!A,z=void 0===k?X(T):k,L=r.useMemo(function(){return T?null:r.createElement("span",{className:"".concat(n,"-selection-placeholder"),style:F?{visibility:"hidden"}:void 0},m)},[T,F,m,n]);return r.createElement(r.Fragment,null,r.createElement("span",{className:"".concat(n,"-selection-search")},r.createElement(D,{ref:a,prefixCls:n,id:o,open:f,inputElement:t,disabled:i,autoFocus:c,autoComplete:l,editable:I,activeDescendantId:s,value:A,onKeyDown:x,onMouseDown:w,onChange:function(e){P(!0),E(e)},onPaste:S,onCompositionStart:O,onCompositionEnd:Z,tabIndex:g,attrs:(0,C.Z)(e,!0),maxLength:N?y:void 0})),!N&&T?r.createElement("span",{className:"".concat(n,"-selection-item"),title:z,style:F?{visibility:"hidden"}:void 0},T.label):null,L)},Y=r.forwardRef(function(e,t){var n=(0,r.useRef)(null),o=(0,r.useRef)(!1),a=e.prefixCls,c=e.open,l=e.mode,s=e.showSearch,d=e.tokenWithEnter,f=e.autoClearSearchValue,p=e.onSearch,m=e.onSearchSubmit,g=e.onToggleOpen,h=e.onInputKeyDown,b=e.domRef;r.useImperativeHandle(t,function(){return{focus:function(){n.current.focus()},blur:function(){n.current.blur()}}});var y=E(0),x=(0,u.Z)(y,2),w=x[0],C=x[1],S=(0,r.useRef)(null),O=function(e){!1!==p(e,!0,o.current)&&g(!0)},Z={inputRef:n,onInputKeyDown:function(e){var t=e.which;(t===v.Z.UP||t===v.Z.DOWN)&&e.preventDefault(),h&&h(e),t!==v.Z.ENTER||"tags"!==l||o.current||c||null==m||m(e.target.value),[v.Z.ESC,v.Z.SHIFT,v.Z.BACKSPACE,v.Z.TAB,v.Z.WIN_KEY,v.Z.ALT,v.Z.META,v.Z.WIN_KEY_RIGHT,v.Z.CTRL,v.Z.SEMICOLON,v.Z.EQUALS,v.Z.CAPS_LOCK,v.Z.CONTEXT_MENU,v.Z.F1,v.Z.F2,v.Z.F3,v.Z.F4,v.Z.F5,v.Z.F6,v.Z.F7,v.Z.F8,v.Z.F9,v.Z.F10,v.Z.F11,v.Z.F12].includes(t)||g(!0)},onInputMouseDown:function(){C(!0)},onInputChange:function(e){var t=e.target.value;if(d&&S.current&&/[\r\n]/.test(S.current)){var n=S.current.replace(/[\r\n]+$/,"").replace(/\r\n/g," ").replace(/[\r\n]/g," ");t=t.replace(n,S.current)}S.current=null,O(t)},onInputPaste:function(e){var t=e.clipboardData,n=null==t?void 0:t.getData("text");S.current=n||""},onInputCompositionStart:function(){o.current=!0},onInputCompositionEnd:function(e){o.current=!1,"combobox"!==l&&O(e.target.value)}},k="multiple"===l||"tags"===l?r.createElement(K,(0,i.Z)({},e,Z)):r.createElement($,(0,i.Z)({},e,Z));return r.createElement("div",{ref:b,className:"".concat(a,"-selector"),onClick:function(e){e.target!==n.current&&(void 0!==document.body.style.msTouchAction?setTimeout(function(){n.current.focus()}):n.current.focus())},onMouseDown:function(e){var t=w();e.target===n.current||t||"combobox"===l||e.preventDefault(),("combobox"===l||s&&t)&&c||(c&&!1!==f&&p("",!0,!1),g())}},k)}),Q=n(1737),J=["prefixCls","disabled","visible","children","popupElement","animation","transitionName","dropdownStyle","dropdownClassName","direction","placement","builtinPlacements","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","getPopupContainer","empty","getTriggerDOMNode","onPopupVisibleChange","onPopupMouseEnter"],ee=function(e){var t=!0===e?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"}}},et=r.forwardRef(function(e,t){var n=e.prefixCls,o=(e.disabled,e.visible),c=e.children,u=e.popupElement,f=e.animation,p=e.transitionName,m=e.dropdownStyle,g=e.dropdownClassName,h=e.direction,v=e.placement,b=e.builtinPlacements,y=e.dropdownMatchSelectWidth,x=e.dropdownRender,w=e.dropdownAlign,E=e.getPopupContainer,C=e.empty,S=e.getTriggerDOMNode,O=e.onPopupVisibleChange,Z=e.onPopupMouseEnter,k=(0,d.Z)(e,J),R="".concat(n,"-dropdown"),M=u;x&&(M=x(u));var j=r.useMemo(function(){return b||ee(y)},[b,y]),P=f?"".concat(R,"-").concat(f):p,N="number"==typeof y,I=r.useMemo(function(){return N?null:!1===y?"minWidth":"width"},[y,N]),T=m;N&&(T=(0,s.Z)((0,s.Z)({},T),{},{width:y}));var A=r.useRef(null);return r.useImperativeHandle(t,function(){return{getPopupElement:function(){return A.current}}}),r.createElement(Q.Z,(0,i.Z)({},k,{showAction:O?["click"]:[],hideAction:O?["click"]:[],popupPlacement:v||("rtl"===(void 0===h?"ltr":h)?"bottomRight":"bottomLeft"),builtinPlacements:j,prefixCls:R,popupTransitionName:P,popup:r.createElement("div",{ref:A,onMouseEnter:Z},M),stretch:I,popupAlign:w,popupVisible:o,getPopupContainer:E,popupClassName:a()(g,(0,l.Z)({},"".concat(R,"-empty"),C)),popupStyle:T,getTriggerDOMNode:S,onPopupVisibleChange:O}),c)}),en=n(6721);function er(e,t){var n,r=e.key;return("value"in e&&(n=e.value),null!=r)?r:void 0!==n?n:"rc-index-key-".concat(t)}function eo(e,t){var n=e||{},r=n.label,o=n.value,a=n.options,i=n.groupLabel,c=r||(t?"children":"label");return{label:c,value:o||"value",options:a||"options",groupLabel:i||c}}function ea(e){var t=(0,s.Z)({},e);return"props"in t||Object.defineProperty(t,"props",{get:function(){return(0,m.ZP)(!1,"Return type is option instead of Option instance. Please read value directly instead of reading from `props`."),t}}),t}var ei=function(e,t,n){if(!t||!t.length)return null;var r=!1,o=function e(t,n){var o=(0,en.Z)(n),a=o[0],i=o.slice(1);if(!a)return[t];var l=t.split(a);return r=r||l.length>1,l.reduce(function(t,n){return[].concat((0,c.Z)(t),(0,c.Z)(e(n,i)))},[]).filter(Boolean)}(e,t);return r?void 0!==n?o.slice(0,n):o:null},ec=r.createContext(null),el=["id","prefixCls","className","showSearch","tagRender","direction","omitDomProps","displayValues","onDisplayValuesChange","emptyOptions","notFoundContent","onClear","mode","disabled","loading","getInputElement","getRawInputElement","open","defaultOpen","onDropdownVisibleChange","activeValue","onActiveValueChange","activeDescendantId","searchValue","autoClearSearchValue","onSearch","onSearchSplit","tokenSeparators","allowClear","suffixIcon","clearIcon","OptionList","animation","transitionName","dropdownStyle","dropdownClassName","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","placement","builtinPlacements","getPopupContainer","showAction","onFocus","onBlur","onKeyUp","onKeyDown","onMouseDown"],es=["value","onChange","removeIcon","placeholder","autoFocus","maxTagCount","maxTagTextLength","maxTagPlaceholder","choiceTransitionName","onInputKeyDown","onPopupScroll","tabIndex"],eu=function(e){return"tags"===e||"multiple"===e},ed=r.forwardRef(function(e,t){var n,o,m,C,S,O,Z,k,R=e.id,M=e.prefixCls,j=e.className,P=e.showSearch,N=e.tagRender,I=e.direction,T=e.omitDomProps,A=e.displayValues,F=e.onDisplayValuesChange,z=e.emptyOptions,L=e.notFoundContent,_=void 0===L?"Not Found":L,B=e.onClear,H=e.mode,D=e.disabled,W=e.loading,V=e.getInputElement,q=e.getRawInputElement,X=e.open,G=e.defaultOpen,U=e.onDropdownVisibleChange,K=e.activeValue,$=e.onActiveValueChange,Q=e.activeDescendantId,J=e.searchValue,ee=e.autoClearSearchValue,en=e.onSearch,er=e.onSearchSplit,eo=e.tokenSeparators,ea=e.allowClear,ed=e.suffixIcon,ef=e.clearIcon,ep=e.OptionList,em=e.animation,eg=e.transitionName,eh=e.dropdownStyle,ev=e.dropdownClassName,eb=e.dropdownMatchSelectWidth,ey=e.dropdownRender,ex=e.dropdownAlign,ew=e.placement,eE=e.builtinPlacements,eC=e.getPopupContainer,eS=e.showAction,eO=void 0===eS?[]:eS,eZ=e.onFocus,ek=e.onBlur,eR=e.onKeyUp,eM=e.onKeyDown,ej=e.onMouseDown,eP=(0,d.Z)(e,el),eN=eu(H),eI=(void 0!==P?P:eN)||"combobox"===H,eT=(0,s.Z)({},eP);es.forEach(function(e){delete eT[e]}),null==T||T.forEach(function(e){delete eT[e]});var eA=r.useState(!1),eF=(0,u.Z)(eA,2),ez=eF[0],eL=eF[1];r.useEffect(function(){eL((0,h.Z)())},[]);var e_=r.useRef(null),eB=r.useRef(null),eH=r.useRef(null),eD=r.useRef(null),eW=r.useRef(null),eV=r.useRef(!1),eq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=r.useState(!1),n=(0,u.Z)(t,2),o=n[0],a=n[1],i=r.useRef(null),c=function(){window.clearTimeout(i.current)};return r.useEffect(function(){return c},[]),[o,function(t,n){c(),i.current=window.setTimeout(function(){a(t),n&&n()},e)},c]}(),eX=(0,u.Z)(eq,3),eG=eX[0],eU=eX[1],eK=eX[2];r.useImperativeHandle(t,function(){var e,t;return{focus:null===(e=eD.current)||void 0===e?void 0:e.focus,blur:null===(t=eD.current)||void 0===t?void 0:t.blur,scrollTo:function(e){var t;return null===(t=eW.current)||void 0===t?void 0:t.scrollTo(e)}}});var e$=r.useMemo(function(){if("combobox"!==H)return J;var e,t=null===(e=A[0])||void 0===e?void 0:e.value;return"string"==typeof t||"number"==typeof t?String(t):""},[J,H,A]),eY="combobox"===H&&"function"==typeof V&&V()||null,eQ="function"==typeof q&&q(),eJ=(0,b.x1)(eB,null==eQ||null===(C=eQ.props)||void 0===C?void 0:C.ref),e0=r.useState(!1),e1=(0,u.Z)(e0,2),e2=e1[0],e4=e1[1];(0,g.Z)(function(){e4(!0)},[]);var e5=(0,p.Z)(!1,{defaultValue:G,value:X}),e3=(0,u.Z)(e5,2),e6=e3[0],e8=e3[1],e9=!!e2&&e6,e7=!_&&z;(D||e7&&e9&&"combobox"===H)&&(e9=!1);var te=!e7&&e9,tt=r.useCallback(function(e){var t=void 0!==e?e:!e9;D||(e8(t),e9!==t&&(null==U||U(t)))},[D,e9,e8,U]),tn=r.useMemo(function(){return(eo||[]).some(function(e){return["\n","\r\n"].includes(e)})},[eo]),tr=r.useContext(ec)||{},to=tr.maxCount,ta=tr.rawValues,ti=function(e,t,n){if(!((null==ta?void 0:ta.size)>=to)){var r=!0,o=e;null==$||$(null);var a=ei(e,eo,to&&to-ta.size),i=n?null:a;return"combobox"!==H&&i&&(o="",null==er||er(i),tt(!1),r=!1),en&&e$!==o&&en(o,{source:t?"typing":"effect"}),r}};r.useEffect(function(){e9||eN||"combobox"===H||ti("",!1,!1)},[e9]),r.useEffect(function(){e6&&D&&e8(!1),D&&!eV.current&&eU(!1)},[D]);var tc=E(),tl=(0,u.Z)(tc,2),ts=tl[0],tu=tl[1],td=r.useRef(!1),tf=[];r.useEffect(function(){return function(){tf.forEach(function(e){return clearTimeout(e)}),tf.splice(0,tf.length)}},[]);var tp=r.useState({}),tm=(0,u.Z)(tp,2)[1];eQ&&(O=function(e){tt(e)}),n=function(){var e;return[e_.current,null===(e=eH.current)||void 0===e?void 0:e.getPopupElement()]},o=!!eQ,(m=r.useRef(null)).current={open:te,triggerOpen:tt,customizedTrigger:o},r.useEffect(function(){function e(e){if(null===(t=m.current)||void 0===t||!t.customizedTrigger){var t,r=e.target;r.shadowRoot&&e.composed&&(r=e.composedPath()[0]||r),m.current.open&&n().filter(function(e){return e}).every(function(e){return!e.contains(r)&&e!==r})&&m.current.triggerOpen(!1)}}return window.addEventListener("mousedown",e),function(){return window.removeEventListener("mousedown",e)}},[]);var tg=r.useMemo(function(){return(0,s.Z)((0,s.Z)({},e),{},{notFoundContent:_,open:e9,triggerOpen:te,id:R,showSearch:eI,multiple:eN,toggleOpen:tt})},[e,_,te,e9,R,eI,eN,tt]),th=!!ed||W;th&&(Z=r.createElement(y,{className:a()("".concat(M,"-arrow"),(0,l.Z)({},"".concat(M,"-arrow-loading"),W)),customizeIcon:ed,customizeIconProps:{loading:W,searchValue:e$,open:e9,focused:eG,showSearch:eI}}));var tv=x(M,function(){var e;null==B||B(),null===(e=eD.current)||void 0===e||e.focus(),F([],{type:"clear",values:A}),ti("",!1,!1)},A,ea,ef,D,e$,H),tb=tv.allowClear,ty=tv.clearIcon,tx=r.createElement(ep,{ref:eW}),tw=a()(M,j,(S={},(0,l.Z)(S,"".concat(M,"-focused"),eG),(0,l.Z)(S,"".concat(M,"-multiple"),eN),(0,l.Z)(S,"".concat(M,"-single"),!eN),(0,l.Z)(S,"".concat(M,"-allow-clear"),ea),(0,l.Z)(S,"".concat(M,"-show-arrow"),th),(0,l.Z)(S,"".concat(M,"-disabled"),D),(0,l.Z)(S,"".concat(M,"-loading"),W),(0,l.Z)(S,"".concat(M,"-open"),e9),(0,l.Z)(S,"".concat(M,"-customize-input"),eY),(0,l.Z)(S,"".concat(M,"-show-search"),eI),S)),tE=r.createElement(et,{ref:eH,disabled:D,prefixCls:M,visible:te,popupElement:tx,animation:em,transitionName:eg,dropdownStyle:eh,dropdownClassName:ev,direction:I,dropdownMatchSelectWidth:eb,dropdownRender:ey,dropdownAlign:ex,placement:ew,builtinPlacements:eE,getPopupContainer:eC,empty:z,getTriggerDOMNode:function(){return eB.current},onPopupVisibleChange:O,onPopupMouseEnter:function(){tm({})}},eQ?r.cloneElement(eQ,{ref:eJ}):r.createElement(Y,(0,i.Z)({},e,{domRef:eB,prefixCls:M,inputElement:eY,ref:eD,id:R,showSearch:eI,autoClearSearchValue:ee,mode:H,activeDescendantId:Q,tagRender:N,values:A,open:e9,onToggleOpen:tt,activeValue:K,searchValue:e$,onSearch:ti,onSearchSubmit:function(e){e&&e.trim()&&en(e,{source:"submit"})},onRemove:function(e){F(A.filter(function(t){return t!==e}),{type:"remove",values:[e]})},tokenWithEnter:tn})));return k=eQ?tE:r.createElement("div",(0,i.Z)({className:tw},eT,{ref:e_,onMouseDown:function(e){var t,n=e.target,r=null===(t=eH.current)||void 0===t?void 0:t.getPopupElement();if(r&&r.contains(n)){var o=setTimeout(function(){var e,t=tf.indexOf(o);-1!==t&&tf.splice(t,1),eK(),ez||r.contains(document.activeElement)||null===(e=eD.current)||void 0===e||e.focus()});tf.push(o)}for(var a=arguments.length,i=Array(a>1?a-1:0),c=1;c=0;i-=1){var l=o[i];if(!l.disabled){o.splice(i,1),a=l;break}}a&&F(o,{type:"remove",values:[a]})}for(var s=arguments.length,u=Array(s>1?s-1:0),d=1;d1?n-1:0),o=1;o0?null:"hidden"},Y={position:"absolute",background:"rgba(0, 0, 0, 0.5)",borderRadius:99,cursor:"pointer",userSelect:"none"};return g?($.height=8,$.left=0,$.right=0,$.bottom=0,Y.height="100%",Y.width=h,I?Y.left=V:Y.right=V):($.width=8,$.top=0,$.bottom=0,I?$.right=0:$.left=0,Y.width="100%",Y.height=h,Y.top=V),r.createElement("div",{ref:T,className:a()(K,(n={},(0,l.Z)(n,"".concat(K,"-horizontal"),g),(0,l.Z)(n,"".concat(K,"-vertical"),!g),(0,l.Z)(n,"".concat(K,"-visible"),L),n)),style:(0,s.Z)((0,s.Z)({},$),b),onMouseDown:function(e){e.stopPropagation(),e.preventDefault()},onMouseMove:H},r.createElement("div",{ref:A,className:a()("".concat(K,"-thumb"),(0,l.Z)({},"".concat(K,"-thumb-moving"),E)),style:(0,s.Z)((0,s.Z)({},Y),y),onMouseDown:X}))});function ey(e){var t=e.children,n=e.setRef,o=r.useCallback(function(e){n(e)},[]);return r.cloneElement(t,{ref:o})}var ex=n(7472),ew=n(7365),eE=n(5127),eC=function(){function e(){(0,ew.Z)(this,e),this.maps=void 0,this.id=0,this.maps=Object.create(null)}return(0,eE.Z)(e,[{key:"set",value:function(e,t){this.maps[e]=t,this.id+=1}},{key:"get",value:function(e){return this.maps[e]}}]),e}(),eS=n(8563),eO=("undefined"==typeof navigator?"undefined":(0,f.Z)(navigator))==="object"&&/Firefox/i.test(navigator.userAgent);function eZ(e,t){var n=(0,r.useRef)(!1),o=(0,r.useRef)(null),a=(0,r.useRef)({top:e,bottom:t});return a.current.top=e,a.current.bottom=t,function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e<0&&a.current.top||e>0&&a.current.bottom;return t&&r?(clearTimeout(o.current),n.current=!1):(!r||n.current)&&(clearTimeout(o.current),n.current=!0,o.current=setTimeout(function(){n.current=!1},50)),!n.current&&r}}var ek=14/15;function eR(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=e/t*100;return isNaN(n)&&(n=0),Math.floor(n=Math.min(n=Math.max(n,20),e/2))}var eM=["prefixCls","className","height","itemHeight","fullHeight","style","data","children","itemKey","virtual","direction","scrollWidth","component","onScroll","onVirtualScroll","onVisibleChange","innerProps","extraRender","styles"],ej=[],eP={overflowY:"auto",overflowAnchor:"none"},eN=r.forwardRef(function(e,t){var n,o,c,p,m,h,v,b,y,x,w,E,C,O,Z,k,R,P,N,I,T,A,F,z,L,_,B,H,D,W,V,q,X,G,U,K=e.prefixCls,$=void 0===K?"rc-virtual-list":K,Y=e.className,Q=e.height,J=e.itemHeight,ee=e.fullHeight,et=e.style,en=e.data,er=e.children,eo=e.itemKey,ea=e.virtual,ei=e.direction,ec=e.scrollWidth,el=e.component,es=e.onScroll,eu=e.onVirtualScroll,ed=e.onVisibleChange,ef=e.innerProps,ep=e.extraRender,em=e.styles,eg=(0,d.Z)(e,eM),ev=!!(!1!==ea&&Q&&J),ew=ev&&en&&(J*en.length>Q||!!ec),eE="rtl"===ei,eN=a()($,(0,l.Z)({},"".concat($,"-rtl"),eE),Y),eI=en||ej,eT=(0,r.useRef)(),eA=(0,r.useRef)(),eF=(0,r.useState)(0),ez=(0,u.Z)(eF,2),eL=ez[0],e_=ez[1],eB=(0,r.useState)(0),eH=(0,u.Z)(eB,2),eD=eH[0],eW=eH[1],eV=(0,r.useState)(!1),eq=(0,u.Z)(eV,2),eX=eq[0],eG=eq[1],eU=function(){eG(!0)},eK=function(){eG(!1)},e$=r.useCallback(function(e){return"function"==typeof eo?eo(e):null==e?void 0:e[eo]},[eo]);function eY(e){e_(function(t){var n,r=(n="function"==typeof e?e(t):e,Number.isNaN(tf.current)||(n=Math.min(n,tf.current)),n=Math.max(n,0));return eT.current.scrollTop=r,r})}var eQ=(0,r.useRef)({start:0,end:eI.length}),eJ=(0,r.useRef)(),e0=(o=r.useState(eI),p=(c=(0,u.Z)(o,2))[0],m=c[1],h=r.useState(null),b=(v=(0,u.Z)(h,2))[0],y=v[1],r.useEffect(function(){var e=function(e,t,n){var r,o,a=e.length,i=t.length;if(0===a&&0===i)return null;a0&&void 0!==arguments[0]&&arguments[0];f();var t=function(){l.current.forEach(function(e,t){if(e&&e.offsetParent){var n=(0,ex.Z)(e),r=n.offsetHeight;s.current.get(t)!==r&&s.current.set(t,n.offsetHeight)}}),c(function(e){return e+1})};e?t():d.current=(0,j.Z)(t)}return(0,r.useEffect)(function(){return f},[]),[function(r,o){var a=e(r),i=l.current.get(a);o?(l.current.set(a,o),p()):l.current.delete(a),!i!=!o&&(o?null==t||t(r):null==n||n(r))},p,s.current,i]}(e$,null,null),e4=(0,u.Z)(e2,4),e5=e4[0],e3=e4[1],e6=e4[2],e8=e4[3],e9=r.useMemo(function(){if(!ev)return{scrollHeight:void 0,start:0,end:eI.length-1,offset:void 0};if(!ew)return{scrollHeight:(null===(e=eA.current)||void 0===e?void 0:e.offsetHeight)||0,start:0,end:eI.length-1,offset:void 0};for(var e,t,n,r,o=0,a=eI.length,i=0;i=eL&&void 0===t&&(t=i,n=o),s>eL+Q&&void 0===r&&(r=i),o=s}return void 0===t&&(t=0,n=0,r=Math.ceil(Q/J)),void 0===r&&(r=eI.length-1),{scrollHeight:o,start:t,end:r=Math.min(r+1,eI.length-1),offset:n}},[ew,ev,eL,eI,e8,Q]),e7=e9.scrollHeight,te=e9.start,tt=e9.end,tn=e9.offset;eQ.current.start=te,eQ.current.end=tt;var tr=r.useState({width:0,height:Q}),to=(0,u.Z)(tr,2),ta=to[0],ti=to[1],tc=(0,r.useRef)(),tl=(0,r.useRef)(),ts=r.useMemo(function(){return eR(ta.width,ec)},[ta.width,ec]),tu=r.useMemo(function(){return eR(ta.height,e7)},[ta.height,e7]),td=e7-Q,tf=(0,r.useRef)(td);tf.current=td;var tp=eL<=0,tm=eL>=td,tg=eZ(tp,tm),th=function(){return{x:eE?-eD:eD,y:eL}},tv=(0,r.useRef)(th()),tb=(0,eS.zX)(function(){if(eu){var e=th();(tv.current.x!==e.x||tv.current.y!==e.y)&&(eu(e),tv.current=e)}});function ty(e,t){t?((0,M.flushSync)(function(){eW(e)}),tb()):eY(e)}var tx=function(e){var t=e,n=ec-ta.width;return Math.min(t=Math.max(t,0),n)},tw=(0,eS.zX)(function(e,t){t?((0,M.flushSync)(function(){eW(function(t){return tx(t+(eE?-e:e))})}),tb()):eY(function(t){return t+e})}),tE=(x=!!ec,w=(0,r.useRef)(0),E=(0,r.useRef)(null),C=(0,r.useRef)(null),O=(0,r.useRef)(!1),Z=eZ(tp,tm),k=(0,r.useRef)(null),R=(0,r.useRef)(null),[function(e){if(ev){j.Z.cancel(R.current),R.current=(0,j.Z)(function(){k.current=null},2);var t,n=e.deltaX,r=e.deltaY,o=e.shiftKey,a=n,i=r;("sx"===k.current||!k.current&&o&&r&&!n)&&(a=r,i=0,k.current="sx");var c=Math.abs(a),l=Math.abs(i);(null===k.current&&(k.current=x&&c>l?"x":"y"),"y"===k.current)?(t=i,j.Z.cancel(E.current),w.current+=t,C.current=t,Z(t)||(eO||e.preventDefault(),E.current=(0,j.Z)(function(){var e=O.current?10:1;tw(w.current*e),w.current=0}))):(tw(a,!0),eO||e.preventDefault())}},function(e){ev&&(O.current=e.detail===C.current)}]),tC=(0,u.Z)(tE,2),tS=tC[0],tO=tC[1];P=function(e,t){return!tg(e,t)&&(tS({preventDefault:function(){},deltaY:e}),!0)},I=(0,r.useRef)(!1),T=(0,r.useRef)(0),A=(0,r.useRef)(null),F=(0,r.useRef)(null),z=function(e){if(I.current){var t=Math.ceil(e.touches[0].pageY),n=T.current-t;T.current=t,P(n)&&e.preventDefault(),clearInterval(F.current),F.current=setInterval(function(){(!P(n*=ek,!0)||.1>=Math.abs(n))&&clearInterval(F.current)},16)}},L=function(){I.current=!1,N()},_=function(e){N(),1!==e.touches.length||I.current||(I.current=!0,T.current=Math.ceil(e.touches[0].pageY),A.current=e.target,A.current.addEventListener("touchmove",z),A.current.addEventListener("touchend",L))},N=function(){A.current&&(A.current.removeEventListener("touchmove",z),A.current.removeEventListener("touchend",L))},(0,g.Z)(function(){return ev&&eT.current.addEventListener("touchstart",_),function(){var e;null===(e=eT.current)||void 0===e||e.removeEventListener("touchstart",_),N(),clearInterval(F.current)}},[ev]),(0,g.Z)(function(){function e(e){ev&&e.preventDefault()}var t=eT.current;return t.addEventListener("wheel",tS),t.addEventListener("DOMMouseScroll",tO),t.addEventListener("MozMousePixelScroll",e),function(){t.removeEventListener("wheel",tS),t.removeEventListener("DOMMouseScroll",tO),t.removeEventListener("MozMousePixelScroll",e)}},[ev]),(0,g.Z)(function(){ec&&eW(function(e){return tx(e)})},[ta.width,ec]);var tZ=function(){var e,t;null===(e=tc.current)||void 0===e||e.delayHidden(),null===(t=tl.current)||void 0===t||t.delayHidden()},tk=(B=r.useRef(),H=r.useState(null),W=(D=(0,u.Z)(H,2))[0],V=D[1],(0,g.Z)(function(){if(W&&W.times<10){if(!eT.current){V(function(e){return(0,s.Z)({},e)});return}e3(!0);var e=W.targetAlign,t=W.originAlign,n=W.index,r=W.offset,o=eT.current.clientHeight,a=!1,i=e,c=null;if(o){for(var l=e||t,u=0,d=0,f=0,p=Math.min(eI.length-1,n),m=0;m<=p;m+=1){var g=e$(eI[m]);d=u;var h=e6.get(g);u=f=d+(void 0===h?J:h)}for(var v="top"===l?r:o-r,b=p;b>=0;b-=1){var y=e$(eI[b]),x=e6.get(y);if(void 0===x){a=!0;break}if((v-=x)<=0)break}switch(l){case"top":c=d-r;break;case"bottom":c=f-o+r;break;default:var w=eT.current.scrollTop;dw+o&&(i="bottom")}null!==c&&eY(c),c!==W.lastTop&&(a=!0)}a&&V((0,s.Z)((0,s.Z)({},W),{},{times:W.times+1,targetAlign:i,lastTop:c}))}},[W,eT.current]),function(e){if(null==e){tZ();return}if(j.Z.cancel(B.current),"number"==typeof e)eY(e);else if(e&&"object"===(0,f.Z)(e)){var t,n=e.align;t="index"in e?e.index:eI.findIndex(function(t){return e$(t)===e.key});var r=e.offset;V({times:0,index:t,offset:void 0===r?0:r,originAlign:n})}});r.useImperativeHandle(t,function(){return{getScrollInfo:th,scrollTo:function(e){e&&"object"===(0,f.Z)(e)&&("left"in e||"top"in e)?(void 0!==e.left&&eW(tx(e.left)),tk(e.top)):tk(e)}}}),(0,g.Z)(function(){ed&&ed(eI.slice(te,tt+1),eI)},[te,tt,eI]);var tR=(q=r.useMemo(function(){return[new Map,[]]},[eI,e6.id,J]),G=(X=(0,u.Z)(q,2))[0],U=X[1],function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=G.get(e),r=G.get(t);if(void 0===n||void 0===r)for(var o=eI.length,a=U.length;aQ&&r.createElement(eb,{ref:tc,prefixCls:$,scrollOffset:eL,scrollRange:e7,rtl:eE,onScroll:ty,onStartMove:eU,onStopMove:eK,spinSize:tu,containerSize:ta.height,style:null==em?void 0:em.verticalScrollBar,thumbStyle:null==em?void 0:em.verticalScrollBarThumb}),ew&&ec&&r.createElement(eb,{ref:tl,prefixCls:$,scrollOffset:eD,scrollRange:ec,rtl:eE,onScroll:ty,onStartMove:eU,onStopMove:eK,spinSize:ts,containerSize:ta.width,horizontal:!0,style:null==em?void 0:em.horizontalScrollBar,thumbStyle:null==em?void 0:em.horizontalScrollBarThumb}))});eN.displayName="List";var eI=["disabled","title","children","style","className"];function eT(e){return"string"==typeof e||"number"==typeof e}var eA=r.forwardRef(function(e,t){var n=r.useContext(w),o=n.prefixCls,s=n.id,f=n.open,p=n.multiple,m=n.mode,g=n.searchValue,h=n.toggleOpen,b=n.notFoundContent,x=n.onPopupScroll,E=r.useContext(ec),S=E.maxCount,O=E.flattenOptions,Z=E.onActiveValue,k=E.defaultActiveFirstOption,R=E.onSelect,M=E.menuItemSelectedIcon,j=E.rawValues,P=E.fieldNames,N=E.virtual,I=E.direction,T=E.listHeight,A=E.listItemHeight,F=E.optionRender,z="".concat(o,"-item"),L=(0,em.Z)(function(){return O},[f,O],function(e,t){return t[0]&&e[1]!==t[1]}),_=r.useRef(null),B=r.useMemo(function(){return p&&void 0!==S&&(null==j?void 0:j.size)>=S},[p,S,null==j?void 0:j.size]),H=function(e){e.preventDefault()},D=function(e){var t;null===(t=_.current)||void 0===t||t.scrollTo("number"==typeof e?{index:e}:e)},W=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=L.length,r=0;r1&&void 0!==arguments[1]&&arguments[1];G(e);var n={source:t?"keyboard":"mouse"},r=L[e];if(!r){Z(null,-1,n);return}Z(r.value,e,n)};(0,r.useEffect)(function(){U(!1!==k?W(0):-1)},[L.length,g]);var K=r.useCallback(function(e){return j.has(e)&&"combobox"!==m},[m,(0,c.Z)(j).toString(),j.size]);(0,r.useEffect)(function(){var e,t=setTimeout(function(){if(!p&&f&&1===j.size){var e=Array.from(j)[0],t=L.findIndex(function(t){return t.data.value===e});-1!==t&&(U(t),D(t))}});return f&&(null===(e=_.current)||void 0===e||e.scrollTo(void 0)),function(){return clearTimeout(t)}},[f,g]);var $=function(e){void 0!==e&&R(e,{selected:!j.has(e)}),p||h(!1)};if(r.useImperativeHandle(t,function(){return{onKeyDown:function(e){var t=e.which,n=e.ctrlKey;switch(t){case v.Z.N:case v.Z.P:case v.Z.UP:case v.Z.DOWN:var r=0;if(t===v.Z.UP?r=-1:t===v.Z.DOWN?r=1:/(mac\sos|macintosh)/i.test(navigator.appVersion)&&n&&(t===v.Z.N?r=1:t===v.Z.P&&(r=-1)),0!==r){var o=W(X+r,r);D(o),U(o,!0)}break;case v.Z.ENTER:var a,i=L[X];!i||null!=i&&null!==(a=i.data)&&void 0!==a&&a.disabled||B?$(void 0):$(i.value),f&&e.preventDefault();break;case v.Z.ESC:h(!1),f&&e.stopPropagation()}},onKeyUp:function(){},scrollTo:function(e){D(e)}}}),0===L.length)return r.createElement("div",{role:"listbox",id:"".concat(s,"_list"),className:"".concat(z,"-empty"),onMouseDown:H},b);var Y=Object.keys(P).map(function(e){return P[e]}),Q=function(e){return e.label};function J(e,t){return{role:e.group?"presentation":"option",id:"".concat(s,"_list_").concat(t)}}var ee=function(e){var t=L[e];if(!t)return null;var n=t.data||{},o=n.value,a=t.group,c=(0,C.Z)(n,!0),l=Q(t);return t?r.createElement("div",(0,i.Z)({"aria-label":"string"!=typeof l||a?null:l},c,{key:e},J(t,e),{"aria-selected":K(o)}),o):null},et={role:"listbox",id:"".concat(s,"_list")};return r.createElement(r.Fragment,null,N&&r.createElement("div",(0,i.Z)({},et,{style:{height:0,width:0,overflow:"hidden"}}),ee(X-1),ee(X),ee(X+1)),r.createElement(eN,{itemKey:"key",ref:_,data:L,height:T,itemHeight:A,fullHeight:!1,onMouseDown:H,onScroll:x,virtual:N,direction:I,innerProps:N?null:et},function(e,t){var n=e.group,o=e.groupOption,c=e.data,s=e.label,u=e.value,f=c.key;if(n){var p,m,g=null!==(m=c.title)&&void 0!==m?m:eT(s)?s.toString():void 0;return r.createElement("div",{className:a()(z,"".concat(z,"-group")),title:g},void 0!==s?s:f)}var h=c.disabled,v=c.title,b=(c.children,c.style),x=c.className,w=(0,d.Z)(c,eI),E=(0,eg.Z)(w,Y),S=K(u),O=h||!S&&B,Z="".concat(z,"-option"),k=a()(z,Z,x,(p={},(0,l.Z)(p,"".concat(Z,"-grouped"),o),(0,l.Z)(p,"".concat(Z,"-active"),X===t&&!O),(0,l.Z)(p,"".concat(Z,"-disabled"),O),(0,l.Z)(p,"".concat(Z,"-selected"),S),p)),R=Q(e),j=!M||"function"==typeof M||S,P="number"==typeof R?R:R||u,I=eT(P)?P.toString():void 0;return void 0!==v&&(I=v),r.createElement("div",(0,i.Z)({},(0,C.Z)(E),N?{}:J(e,t),{"aria-selected":S,className:k,title:I,onMouseMove:function(){X===t||O||U(t)},onClick:function(){O||$(u)},style:b}),r.createElement("div",{className:"".concat(Z,"-content")},"function"==typeof F?F(e,{index:t}):P),r.isValidElement(M)||S,j&&r.createElement(y,{className:"".concat(z,"-option-state"),customizeIcon:M,customizeIconProps:{value:u,disabled:O,isSelected:S}},S?"✓":null))}))});function eF(e,t){return W(e).join("").toUpperCase().includes(t)}var ez=n(2127),eL=0,e_=(0,ez.Z)(),eB=n(3054),eH=["children","value"],eD=["children"];function eW(e){var t=r.useRef();return t.current=e,r.useCallback(function(){return t.current.apply(t,arguments)},[])}var eV=["id","mode","prefixCls","backfill","fieldNames","inputValue","searchValue","onSearch","autoClearSearchValue","onSelect","onDeselect","dropdownMatchSelectWidth","filterOption","filterSort","optionFilterProp","optionLabelProp","options","optionRender","children","defaultActiveFirstOption","menuItemSelectedIcon","virtual","direction","listHeight","listItemHeight","value","defaultValue","labelInValue","onChange","maxCount"],eq=["inputValue"],eX=r.forwardRef(function(e,t){var n,o,a,m,g,h,v,b=e.id,y=e.mode,x=e.prefixCls,w=e.backfill,E=e.fieldNames,C=e.inputValue,S=e.searchValue,O=e.onSearch,Z=e.autoClearSearchValue,k=void 0===Z||Z,R=e.onSelect,M=e.onDeselect,j=e.dropdownMatchSelectWidth,P=void 0===j||j,N=e.filterOption,I=e.filterSort,T=e.optionFilterProp,A=e.optionLabelProp,F=e.options,z=e.optionRender,L=e.children,_=e.defaultActiveFirstOption,B=e.menuItemSelectedIcon,H=e.virtual,D=e.direction,V=e.listHeight,q=void 0===V?200:V,X=e.listItemHeight,G=void 0===X?20:X,U=e.value,K=e.defaultValue,$=e.labelInValue,Y=e.onChange,Q=e.maxCount,J=(0,d.Z)(e,eV),ee=(n=r.useState(),a=(o=(0,u.Z)(n,2))[0],m=o[1],r.useEffect(function(){var e;m("rc_select_".concat((e_?(e=eL,eL+=1):e="TEST_OR_SSR",e)))},[]),b||a),et=eu(y),en=!!(!F&&L),ei=r.useMemo(function(){return(void 0!==N||"combobox"!==y)&&N},[N,y]),el=r.useMemo(function(){return eo(E,en)},[JSON.stringify(E),en]),es=(0,p.Z)("",{value:void 0!==S?S:C,postState:function(e){return e||""}}),ef=(0,u.Z)(es,2),ep=ef[0],em=ef[1],eg=r.useMemo(function(){var e=F;F||(e=function e(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,eB.Z)(t).map(function(t,o){if(!r.isValidElement(t)||!t.type)return null;var a,i,c,l,u,f=t.type.isSelectOptGroup,p=t.key,m=t.props,g=m.children,h=(0,d.Z)(m,eD);return n||!f?(a=t.key,c=(i=t.props).children,l=i.value,u=(0,d.Z)(i,eH),(0,s.Z)({key:a,value:void 0!==l?l:a,children:c},u)):(0,s.Z)((0,s.Z)({key:"__RC_SELECT_GRP__".concat(null===p?o:p,"__"),label:p},h),{},{options:e(g)})}).filter(function(e){return e})}(L));var t=new Map,n=new Map,o=function(e,t,n){n&&"string"==typeof n&&e.set(t[n],t)};return function e(r){for(var a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=t.fieldNames,r=t.childrenAsData,o=[],a=eo(n,!1),i=a.label,c=a.value,l=a.options,s=a.groupLabel;return!function e(t,n){Array.isArray(t)&&t.forEach(function(t){if(!n&&l in t){var a=t[s];void 0===a&&r&&(a=t.label),o.push({key:er(t,o.length),group:!0,data:t,label:a}),e(t[l],!0)}else{var u=t[c];o.push({key:er(t,o.length),groupOption:n,data:t,label:t[i],value:u})}})}(e,!1),o}(eI,{fieldNames:el,childrenAsData:en})},[eI,el,en]),ez=function(e){var t=ey(e);if(eC(t),Y&&(t.length!==eZ.length||t.some(function(e,t){var n;return(null===(n=eZ[t])||void 0===n?void 0:n.value)!==(null==e?void 0:e.value)}))){var n=$?t:t.map(function(e){return e.value}),r=t.map(function(e){return ea(ek(e.value))});Y(et?n:n[0],et?r:r[0])}},eX=r.useState(null),eG=(0,u.Z)(eX,2),eU=eG[0],eK=eG[1],e$=r.useState(0),eY=(0,u.Z)(e$,2),eQ=eY[0],eJ=eY[1],e0=void 0!==_?_:"combobox"!==y,e1=r.useCallback(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.source;eJ(t),w&&"combobox"===y&&null!==e&&"keyboard"===(void 0===r?"keyboard":r)&&eK(String(e))},[w,y]),e2=function(e,t,n){var r=function(){var t,n=ek(e);return[$?{label:null==n?void 0:n[el.label],value:e,key:null!==(t=null==n?void 0:n.key)&&void 0!==t?t:e}:e,ea(n)]};if(t&&R){var o=r(),a=(0,u.Z)(o,2);R(a[0],a[1])}else if(!t&&M&&"clear"!==n){var i=r(),c=(0,u.Z)(i,2);M(c[0],c[1])}},e4=eW(function(e,t){var n=!et||t.selected;ez(n?et?[].concat((0,c.Z)(eZ),[e]):[e]:eZ.filter(function(t){return t.value!==e})),e2(e,n),"combobox"===y?eK(""):(!eu||k)&&(em(""),eK(""))}),e5=r.useMemo(function(){var e=!1!==H&&!1!==P;return(0,s.Z)((0,s.Z)({},eg),{},{flattenOptions:eT,onActiveValue:e1,defaultActiveFirstOption:e0,onSelect:e4,menuItemSelectedIcon:B,rawValues:eM,fieldNames:el,virtual:e,direction:D,listHeight:q,listItemHeight:G,childrenAsData:en,maxCount:Q,optionRender:z})},[Q,eg,eT,e1,e0,e4,B,eM,el,H,P,D,q,G,en,z]);return r.createElement(ec.Provider,{value:e5},r.createElement(ed,(0,i.Z)({},J,{id:ee,prefixCls:void 0===x?"rc-select":x,ref:t,omitDomProps:eq,mode:y,displayValues:eR,onDisplayValuesChange:function(e,t){ez(e);var n=t.type,r=t.values;("remove"===n||"clear"===n)&&r.forEach(function(e){e2(e.value,!1,n)})},direction:D,searchValue:ep,onSearch:function(e,t){if(em(e),eK(null),"submit"===t.source){var n=(e||"").trim();n&&(ez(Array.from(new Set([].concat((0,c.Z)(eM),[n])))),e2(n,!0),em(""));return}"blur"!==t.source&&("combobox"===y&&ez(e),null==O||O(e))},autoClearSearchValue:k,onSearchSplit:function(e){var t=e;"tags"!==y&&(t=e.map(function(e){var t=ev.get(e);return null==t?void 0:t.value}).filter(function(e){return void 0!==e}));var n=Array.from(new Set([].concat((0,c.Z)(eM),(0,c.Z)(t))));ez(n),n.forEach(function(e){e2(e,!0)})},dropdownMatchSelectWidth:P,OptionList:eA,emptyOptions:!eT.length,activeValue:eU,activeDescendantId:"".concat(ee,"_list_").concat(eQ)})))});eX.Option=ep,eX.OptGroup=ef;var eG=n(1761),eU=n(7387),eK=n(1467),e$=n(7794),eY=n(7499),eQ=n(595),eJ=n(6336),e0=n(4750),e1=n(6585),e2=n(316);let e4=e=>{let{componentCls:t,margin:n,marginXS:r,marginXL:o,fontSize:a,lineHeight:i}=e;return{[t]:{marginInline:r,fontSize:a,lineHeight:i,textAlign:"center",["".concat(t,"-image")]:{height:e.emptyImgHeight,marginBottom:r,opacity:e.opacityImage,img:{height:"100%"},svg:{maxWidth:"100%",height:"100%",margin:"auto"}},["".concat(t,"-description")]:{color:e.colorText},["".concat(t,"-footer")]:{marginTop:n},"&-normal":{marginBlock:o,color:e.colorTextDisabled,["".concat(t,"-description")]:{color:e.colorTextDisabled},["".concat(t,"-image")]:{height:e.emptyImgHeightMD}},"&-small":{marginBlock:r,color:e.colorTextDisabled,["".concat(t,"-image")]:{height:e.emptyImgHeightSM}}}}};var e5=(0,e1.I$)("Empty",e=>{let{componentCls:t,controlHeightLG:n,calc:r}=e;return[e4((0,e2.TS)(e,{emptyImgCls:"".concat(t,"-img"),emptyImgHeight:r(n).mul(2.5).equal(),emptyImgHeightMD:n,emptyImgHeightSM:r(n).mul(.875).equal()}))]}),e3=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let e6=r.createElement(()=>{let[,e]=(0,e0.ZP)(),t=new eJ.C(e.colorBgBase).toHsl().l<.5?{opacity:.65}:{};return r.createElement("svg",{style:t,width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"},r.createElement("g",{fill:"none",fillRule:"evenodd"},r.createElement("g",{transform:"translate(24 31.67)"},r.createElement("ellipse",{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}),r.createElement("path",{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}),r.createElement("path",{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}),r.createElement("path",{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}),r.createElement("path",{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"})),r.createElement("path",{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}),r.createElement("g",{transform:"translate(149.65 15.383)",fill:"#FFF"},r.createElement("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}),r.createElement("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}))))},null),e8=r.createElement(()=>{let[,e]=(0,e0.ZP)(),{colorFill:t,colorFillTertiary:n,colorFillQuaternary:o,colorBgContainer:a}=e,{borderColor:i,shadowColor:c,contentColor:l}=(0,r.useMemo)(()=>({borderColor:new eJ.C(t).onBackground(a).toHexShortString(),shadowColor:new eJ.C(n).onBackground(a).toHexShortString(),contentColor:new eJ.C(o).onBackground(a).toHexShortString()}),[t,n,o,a]);return r.createElement("svg",{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"},r.createElement("g",{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"},r.createElement("ellipse",{fill:c,cx:"32",cy:"33",rx:"32",ry:"7"}),r.createElement("g",{fillRule:"nonzero",stroke:i},r.createElement("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}),r.createElement("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:l}))))},null),e9=e=>{var{className:t,rootClassName:n,prefixCls:o,image:i=e6,description:c,children:l,imageStyle:s,style:u}=e,d=e3(e,["className","rootClassName","prefixCls","image","description","children","imageStyle","style"]);let{getPrefixCls:f,direction:p,empty:m}=r.useContext(eY.E_),g=f("empty",o),[h,v,b]=e5(g),[y]=(0,eQ.Z)("Empty"),x=void 0!==c?c:null==y?void 0:y.description,w=null;return w="string"==typeof i?r.createElement("img",{alt:"string"==typeof x?x:"empty",src:i}):i,h(r.createElement("div",Object.assign({className:a()(v,b,g,null==m?void 0:m.className,{["".concat(g,"-normal")]:i===e8,["".concat(g,"-rtl")]:"rtl"===p},t,n),style:Object.assign(Object.assign({},null==m?void 0:m.style),u)},d),r.createElement("div",{className:"".concat(g,"-image"),style:s},w),x&&r.createElement("div",{className:"".concat(g,"-description")},x),l&&r.createElement("div",{className:"".concat(g,"-footer")},l)))};e9.PRESENTED_IMAGE_DEFAULT=e6,e9.PRESENTED_IMAGE_SIMPLE=e8;var e7=e=>{let{componentName:t}=e,{getPrefixCls:n}=(0,r.useContext)(eY.E_),o=n("empty");switch(t){case"Table":case"List":return r.createElement(e9,{image:e9.PRESENTED_IMAGE_SIMPLE});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return r.createElement(e9,{image:e9.PRESENTED_IMAGE_SIMPLE,className:"".concat(o,"-small")});default:return r.createElement(e9,null)}},te=n(7094),tt=n(2935),tn=n(4629),tr=n(7137),to=n(8443),ta=n(2801);let ti=e=>{let t={overflow:{adjustX:!0,adjustY:!0,shiftY:!0},htmlRegion:"scroll"===e?"scroll":"visible",dynamicInset:!0};return{bottomLeft:Object.assign(Object.assign({},t),{points:["tl","bl"],offset:[0,4]}),bottomRight:Object.assign(Object.assign({},t),{points:["tr","br"],offset:[0,4]}),topLeft:Object.assign(Object.assign({},t),{points:["bl","tl"],offset:[0,-4]}),topRight:Object.assign(Object.assign({},t),{points:["br","tr"],offset:[0,-4]})}};var tc=n(1303),tl=n(2288),ts=n(8985),tu=n(9353);let td=new ts.E4("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),tf=new ts.E4("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),tp=new ts.E4("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),tm=new ts.E4("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),tg=new ts.E4("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),th={"slide-up":{inKeyframes:td,outKeyframes:tf},"slide-down":{inKeyframes:tp,outKeyframes:tm},"slide-left":{inKeyframes:tg,outKeyframes:new ts.E4("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}})},"slide-right":{inKeyframes:new ts.E4("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),outKeyframes:new ts.E4("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}})}},tv=(e,t)=>{let{antCls:n}=e,r="".concat(n,"-").concat(t),{inKeyframes:o,outKeyframes:a}=th[t];return[(0,tu.R)(r,o,a,e.motionDurationMid),{["\n ".concat(r,"-enter,\n ").concat(r,"-appear\n ")]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:e.motionEaseOutQuint,"&-prepare":{transform:"scale(1)"}},["".concat(r,"-leave")]:{animationTimingFunction:e.motionEaseInQuint}}]},tb=new ts.E4("antMoveDownIn",{"0%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),ty=new ts.E4("antMoveDownOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0}}),tx=new ts.E4("antMoveLeftIn",{"0%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),tw=new ts.E4("antMoveLeftOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),tE=new ts.E4("antMoveRightIn",{"0%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),tC=new ts.E4("antMoveRightOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),tS={"move-up":{inKeyframes:new ts.E4("antMoveUpIn",{"0%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),outKeyframes:new ts.E4("antMoveUpOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0}})},"move-down":{inKeyframes:tb,outKeyframes:ty},"move-left":{inKeyframes:tx,outKeyframes:tw},"move-right":{inKeyframes:tE,outKeyframes:tC}},tO=(e,t)=>{let{antCls:n}=e,r="".concat(n,"-").concat(t),{inKeyframes:o,outKeyframes:a}=tS[t];return[(0,tu.R)(r,o,a,e.motionDurationMid),{["\n ".concat(r,"-enter,\n ").concat(r,"-appear\n ")]:{opacity:0,animationTimingFunction:e.motionEaseOutCirc},["".concat(r,"-leave")]:{animationTimingFunction:e.motionEaseInOutCirc}}]},tZ=e=>{let{optionHeight:t,optionFontSize:n,optionLineHeight:r,optionPadding:o}=e;return{position:"relative",display:"block",minHeight:t,padding:o,color:e.colorText,fontWeight:"normal",fontSize:n,lineHeight:r,boxSizing:"border-box"}};var tk=e=>{let{antCls:t,componentCls:n}=e,r="".concat(n,"-item"),o="&".concat(t,"-slide-up-enter").concat(t,"-slide-up-enter-active"),a="&".concat(t,"-slide-up-appear").concat(t,"-slide-up-appear-active"),i="&".concat(t,"-slide-up-leave").concat(t,"-slide-up-leave-active"),c="".concat(n,"-dropdown-placement-");return[{["".concat(n,"-dropdown")]:Object.assign(Object.assign({},(0,tc.Wf)(e)),{position:"absolute",top:-9999,zIndex:e.zIndexPopup,boxSizing:"border-box",padding:e.paddingXXS,overflow:"hidden",fontSize:e.fontSize,fontVariant:"initial",backgroundColor:e.colorBgElevated,borderRadius:e.borderRadiusLG,outline:"none",boxShadow:e.boxShadowSecondary,["\n ".concat(o).concat(c,"bottomLeft,\n ").concat(a).concat(c,"bottomLeft\n ")]:{animationName:td},["\n ".concat(o).concat(c,"topLeft,\n ").concat(a).concat(c,"topLeft,\n ").concat(o).concat(c,"topRight,\n ").concat(a).concat(c,"topRight\n ")]:{animationName:tp},["".concat(i).concat(c,"bottomLeft")]:{animationName:tf},["\n ".concat(i).concat(c,"topLeft,\n ").concat(i).concat(c,"topRight\n ")]:{animationName:tm},"&-hidden":{display:"none"},["".concat(r)]:Object.assign(Object.assign({},tZ(e)),{cursor:"pointer",transition:"background ".concat(e.motionDurationSlow," ease"),borderRadius:e.borderRadiusSM,"&-group":{color:e.colorTextDescription,fontSize:e.fontSizeSM,cursor:"default"},"&-option":{display:"flex","&-content":Object.assign({flex:"auto"},tc.vS),"&-state":{flex:"none",display:"flex",alignItems:"center"},["&-active:not(".concat(r,"-option-disabled)")]:{backgroundColor:e.optionActiveBg},["&-selected:not(".concat(r,"-option-disabled)")]:{color:e.optionSelectedColor,fontWeight:e.optionSelectedFontWeight,backgroundColor:e.optionSelectedBg,["".concat(r,"-option-state")]:{color:e.colorPrimary},["&:has(+ ".concat(r,"-option-selected:not(").concat(r,"-option-disabled))")]:{borderEndStartRadius:0,borderEndEndRadius:0,["& + ".concat(r,"-option-selected:not(").concat(r,"-option-disabled)")]:{borderStartStartRadius:0,borderStartEndRadius:0}}},"&-disabled":{["&".concat(r,"-option-selected")]:{backgroundColor:e.colorBgContainerDisabled},color:e.colorTextDisabled,cursor:"not-allowed"},"&-grouped":{paddingInlineStart:e.calc(e.controlPaddingHorizontal).mul(2).equal()}}}),"&-rtl":{direction:"rtl"}})},tv(e,"slide-up"),tv(e,"slide-down"),tO(e,"move-up"),tO(e,"move-down")]};let tR=e=>{let{multipleSelectItemHeight:t,selectHeight:n,lineWidth:r}=e;return e.calc(n).sub(t).div(2).sub(r).equal()};function tM(e,t){let{componentCls:n,iconCls:r}=e,o="".concat(n,"-selection-overflow"),a=e.multipleSelectItemHeight,i=tR(e),c=t?"".concat(n,"-").concat(t):"";return{["".concat(n,"-multiple").concat(c)]:{fontSize:e.fontSize,[o]:{position:"relative",display:"flex",flex:"auto",flexWrap:"wrap",maxWidth:"100%","&-item":{flex:"none",alignSelf:"center",maxWidth:"100%",display:"inline-flex"}},["".concat(n,"-selector")]:{display:"flex",flexWrap:"wrap",alignItems:"center",height:"100%",paddingInline:e.calc(2).mul(2).equal(),paddingBlock:e.calc(i).sub(2).equal(),borderRadius:e.borderRadius,["".concat(n,"-show-search&")]:{cursor:"text"},["".concat(n,"-disabled&")]:{background:e.multipleSelectorBgDisabled,cursor:"not-allowed"},"&:after":{display:"inline-block",width:0,margin:"".concat((0,ts.bf)(2)," 0"),lineHeight:(0,ts.bf)(a),visibility:"hidden",content:'"\\a0"'}},["\n &".concat(n,"-show-arrow ").concat(n,"-selector,\n &").concat(n,"-allow-clear ").concat(n,"-selector\n ")]:{paddingInlineEnd:e.calc(e.fontSizeIcon).add(e.controlPaddingHorizontal).equal()},["".concat(n,"-selection-item")]:{display:"flex",alignSelf:"center",flex:"none",boxSizing:"border-box",maxWidth:"100%",height:a,marginTop:2,marginBottom:2,lineHeight:(0,ts.bf)(e.calc(a).sub(e.calc(e.lineWidth).mul(2)).equal()),borderRadius:e.borderRadiusSM,cursor:"default",transition:"font-size ".concat(e.motionDurationSlow,", line-height ").concat(e.motionDurationSlow,", height ").concat(e.motionDurationSlow),marginInlineEnd:e.calc(2).mul(2).equal(),paddingInlineStart:e.paddingXS,paddingInlineEnd:e.calc(e.paddingXS).div(2).equal(),["".concat(n,"-disabled&")]:{color:e.multipleItemColorDisabled,borderColor:e.multipleItemBorderColorDisabled,cursor:"not-allowed"},"&-content":{display:"inline-block",marginInlineEnd:e.calc(e.paddingXS).div(2).equal(),overflow:"hidden",whiteSpace:"pre",textOverflow:"ellipsis"},"&-remove":Object.assign(Object.assign({},(0,tc.Ro)()),{display:"inline-flex",alignItems:"center",color:e.colorIcon,fontWeight:"bold",fontSize:10,lineHeight:"inherit",cursor:"pointer",["> ".concat(r)]:{verticalAlign:"-0.2em"},"&:hover":{color:e.colorIconHover}})},["".concat(o,"-item + ").concat(o,"-item")]:{["".concat(n,"-selection-search")]:{marginInlineStart:0}},["".concat(o,"-item-suffix")]:{height:"100%"},["".concat(n,"-selection-search")]:{display:"inline-flex",position:"relative",maxWidth:"100%",marginInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(i).equal(),"\n &-input,\n &-mirror\n ":{height:a,fontFamily:e.fontFamily,lineHeight:(0,ts.bf)(a),transition:"all ".concat(e.motionDurationSlow)},"&-input":{width:"100%",minWidth:4.1},"&-mirror":{position:"absolute",top:0,insetInlineStart:0,insetInlineEnd:"auto",zIndex:999,whiteSpace:"pre",visibility:"hidden"}},["".concat(n,"-selection-placeholder")]:{position:"absolute",top:"50%",insetInlineStart:e.inputPaddingHorizontalBase,insetInlineEnd:e.inputPaddingHorizontalBase,transform:"translateY(-50%)",transition:"all ".concat(e.motionDurationSlow)}}}}var tj=e=>{let{componentCls:t}=e,n=(0,e2.TS)(e,{selectHeight:e.controlHeightSM,multipleSelectItemHeight:e.controlHeightXS,borderRadius:e.borderRadiusSM,borderRadiusSM:e.borderRadiusXS}),r=(0,e2.TS)(e,{fontSize:e.fontSizeLG,selectHeight:e.controlHeightLG,multipleSelectItemHeight:e.multipleItemHeightLG,borderRadius:e.borderRadiusLG,borderRadiusSM:e.borderRadius});return[tM(e),tM(n,"sm"),{["".concat(t,"-multiple").concat(t,"-sm")]:{["".concat(t,"-selection-placeholder")]:{insetInline:e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal()},["".concat(t,"-selection-search")]:{marginInlineStart:2}}},tM(r,"lg")]};function tP(e,t){let{componentCls:n,inputPaddingHorizontalBase:r,borderRadius:o}=e,a=e.calc(e.controlHeight).sub(e.calc(e.lineWidth).mul(2)).equal(),i=t?"".concat(n,"-").concat(t):"";return{["".concat(n,"-single").concat(i)]:{fontSize:e.fontSize,height:e.controlHeight,["".concat(n,"-selector")]:Object.assign(Object.assign({},(0,tc.Wf)(e,!0)),{display:"flex",borderRadius:o,["".concat(n,"-selection-search")]:{position:"absolute",top:0,insetInlineStart:r,insetInlineEnd:r,bottom:0,"&-input":{width:"100%",WebkitAppearance:"textfield"}},["\n ".concat(n,"-selection-item,\n ").concat(n,"-selection-placeholder\n ")]:{padding:0,lineHeight:(0,ts.bf)(a),transition:"all ".concat(e.motionDurationSlow,", visibility 0s"),alignSelf:"center"},["".concat(n,"-selection-placeholder")]:{transition:"none",pointerEvents:"none"},[["&:after","".concat(n,"-selection-item:empty:after"),"".concat(n,"-selection-placeholder:empty:after")].join(",")]:{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'}}),["\n &".concat(n,"-show-arrow ").concat(n,"-selection-item,\n &").concat(n,"-show-arrow ").concat(n,"-selection-placeholder\n ")]:{paddingInlineEnd:e.showArrowPaddingInlineEnd},["&".concat(n,"-open ").concat(n,"-selection-item")]:{color:e.colorTextPlaceholder},["&:not(".concat(n,"-customize-input)")]:{["".concat(n,"-selector")]:{width:"100%",height:"100%",padding:"0 ".concat((0,ts.bf)(r)),["".concat(n,"-selection-search-input")]:{height:a},"&:after":{lineHeight:(0,ts.bf)(a)}}},["&".concat(n,"-customize-input")]:{["".concat(n,"-selector")]:{"&:after":{display:"none"},["".concat(n,"-selection-search")]:{position:"static",width:"100%"},["".concat(n,"-selection-placeholder")]:{position:"absolute",insetInlineStart:0,insetInlineEnd:0,padding:"0 ".concat((0,ts.bf)(r)),"&:after":{display:"none"}}}}}}}let tN=(e,t)=>{let{componentCls:n,antCls:r,controlOutlineWidth:o}=e;return{["&:not(".concat(n,"-customize-input) ").concat(n,"-selector")]:{border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(t.borderColor),background:e.selectorBg},["&:not(".concat(n,"-disabled):not(").concat(n,"-customize-input):not(").concat(r,"-pagination-size-changer)")]:{["&:hover ".concat(n,"-selector")]:{borderColor:t.hoverBorderHover},["".concat(n,"-focused& ").concat(n,"-selector")]:{borderColor:t.activeBorderColor,boxShadow:"0 0 0 ".concat((0,ts.bf)(o)," ").concat(t.activeShadowColor),outline:0}}}},tI=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status)]:Object.assign({},tN(e,t))}),tT=e=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign({},tN(e,{borderColor:e.colorBorder,hoverBorderHover:e.colorPrimaryHover,activeBorderColor:e.colorPrimary,activeShadowColor:e.controlOutline})),tI(e,{status:"error",borderColor:e.colorError,hoverBorderHover:e.colorErrorHover,activeBorderColor:e.colorError,activeShadowColor:e.colorErrorOutline})),tI(e,{status:"warning",borderColor:e.colorWarning,hoverBorderHover:e.colorWarningHover,activeBorderColor:e.colorWarning,activeShadowColor:e.colorWarningOutline})),{["&".concat(e.componentCls,"-disabled")]:{["&:not(".concat(e.componentCls,"-customize-input) ").concat(e.componentCls,"-selector")]:{background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},["&".concat(e.componentCls,"-multiple ").concat(e.componentCls,"-selection-item")]:{background:e.multipleItemBg,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.multipleItemBorderColor)}})}),tA=(e,t)=>{let{componentCls:n,antCls:r}=e;return{["&:not(".concat(n,"-customize-input) ").concat(n,"-selector")]:{background:t.bg,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," transparent"),color:t.color},["&:not(".concat(n,"-disabled):not(").concat(n,"-customize-input):not(").concat(r,"-pagination-size-changer)")]:{["&:hover ".concat(n,"-selector")]:{background:t.hoverBg},["".concat(n,"-focused& ").concat(n,"-selector")]:{background:e.selectorBg,borderColor:t.activeBorderColor,outline:0}}}},tF=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status)]:Object.assign({},tA(e,t))}),tz=e=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign({},tA(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.colorPrimary,color:e.colorText})),tF(e,{status:"error",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,color:e.colorError})),tF(e,{status:"warning",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,color:e.colorWarning})),{["&".concat(e.componentCls,"-disabled")]:{["&:not(".concat(e.componentCls,"-customize-input) ").concat(e.componentCls,"-selector")]:{borderColor:e.colorBorder,background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},["&".concat(e.componentCls,"-multiple ").concat(e.componentCls,"-selection-item")]:{background:e.colorBgContainer,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit)}})}),tL=e=>({"&-borderless":{["".concat(e.componentCls,"-selector")]:{background:"transparent",borderColor:"transparent"},["&".concat(e.componentCls,"-disabled")]:{["&:not(".concat(e.componentCls,"-customize-input) ").concat(e.componentCls,"-selector")]:{color:e.colorTextDisabled}},["&".concat(e.componentCls,"-multiple ").concat(e.componentCls,"-selection-item")]:{background:e.multipleItemBg,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.multipleItemBorderColor)}}});var t_=e=>({[e.componentCls]:Object.assign(Object.assign(Object.assign({},tT(e)),tz(e)),tL(e))});let tB=e=>{let{componentCls:t}=e;return{position:"relative",transition:"all ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut),input:{cursor:"pointer"},["".concat(t,"-show-search&")]:{cursor:"text",input:{cursor:"auto",color:"inherit",height:"100%"}},["".concat(t,"-disabled&")]:{cursor:"not-allowed",input:{cursor:"not-allowed"}}}},tH=e=>{let{componentCls:t}=e;return{["".concat(t,"-selection-search-input")]:{margin:0,padding:0,background:"transparent",border:"none",outline:"none",appearance:"none",fontFamily:"inherit","&::-webkit-search-cancel-button":{display:"none","-webkit-appearance":"none"}}}},tD=e=>{let{antCls:t,componentCls:n,inputPaddingHorizontalBase:r,iconCls:o}=e;return{[n]:Object.assign(Object.assign({},(0,tc.Wf)(e)),{position:"relative",display:"inline-block",cursor:"pointer",["&:not(".concat(n,"-customize-input) ").concat(n,"-selector")]:Object.assign(Object.assign({},tB(e)),tH(e)),["".concat(n,"-selection-item")]:Object.assign(Object.assign({flex:1,fontWeight:"normal",position:"relative",userSelect:"none"},tc.vS),{["> ".concat(t,"-typography")]:{display:"inline"}}),["".concat(n,"-selection-placeholder")]:Object.assign(Object.assign({},tc.vS),{flex:1,color:e.colorTextPlaceholder,pointerEvents:"none"}),["".concat(n,"-arrow")]:Object.assign(Object.assign({},(0,tc.Ro)()),{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:r,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,lineHeight:1,textAlign:"center",pointerEvents:"none",display:"flex",alignItems:"center",transition:"opacity ".concat(e.motionDurationSlow," ease"),[o]:{verticalAlign:"top",transition:"transform ".concat(e.motionDurationSlow),"> svg":{verticalAlign:"top"},["&:not(".concat(n,"-suffix)")]:{pointerEvents:"auto"}},["".concat(n,"-disabled &")]:{cursor:"not-allowed"},"> *:not(:last-child)":{marginInlineEnd:8}}),["".concat(n,"-clear")]:{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:r,zIndex:1,display:"inline-block",width:e.fontSizeIcon,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",cursor:"pointer",opacity:0,transition:"color ".concat(e.motionDurationMid," ease, opacity ").concat(e.motionDurationSlow," ease"),textRendering:"auto","&:before":{display:"block"},"&:hover":{color:e.colorTextTertiary}},"&:hover":{["".concat(n,"-clear")]:{opacity:1},["".concat(n,"-arrow:not(:last-child)")]:{opacity:0}}}),["".concat(n,"-has-feedback")]:{["".concat(n,"-clear")]:{insetInlineEnd:e.calc(r).add(e.fontSize).add(e.paddingXS).equal()}}}},tW=e=>{let{componentCls:t}=e;return[{[t]:{["&".concat(t,"-in-form-item")]:{width:"100%"}}},tD(e),function(e){let{componentCls:t}=e,n=e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal();return[tP(e),tP((0,e2.TS)(e,{controlHeight:e.controlHeightSM,borderRadius:e.borderRadiusSM}),"sm"),{["".concat(t,"-single").concat(t,"-sm")]:{["&:not(".concat(t,"-customize-input)")]:{["".concat(t,"-selection-search")]:{insetInlineStart:n,insetInlineEnd:n},["".concat(t,"-selector")]:{padding:"0 ".concat((0,ts.bf)(n))},["&".concat(t,"-show-arrow ").concat(t,"-selection-search")]:{insetInlineEnd:e.calc(n).add(e.calc(e.fontSize).mul(1.5)).equal()},["\n &".concat(t,"-show-arrow ").concat(t,"-selection-item,\n &").concat(t,"-show-arrow ").concat(t,"-selection-placeholder\n ")]:{paddingInlineEnd:e.calc(e.fontSize).mul(1.5).equal()}}}},tP((0,e2.TS)(e,{controlHeight:e.singleItemHeightLG,fontSize:e.fontSizeLG,borderRadius:e.borderRadiusLG}),"lg")]}(e),tj(e),tk(e),{["".concat(t,"-rtl")]:{direction:"rtl"}},(0,tl.c)(e,{borderElCls:"".concat(t,"-selector"),focusElCls:"".concat(t,"-focused")})]};var tV=(0,e1.I$)("Select",(e,t)=>{let{rootPrefixCls:n}=t,r=(0,e2.TS)(e,{rootPrefixCls:n,inputPaddingHorizontalBase:e.calc(e.paddingSM).sub(1).equal(),multipleSelectItemHeight:e.multipleItemHeight,selectHeight:e.controlHeight});return[tW(r),t_(r)]},e=>{let{fontSize:t,lineHeight:n,controlHeight:r,controlPaddingHorizontal:o,zIndexPopupBase:a,colorText:i,fontWeightStrong:c,controlItemBgActive:l,controlItemBgHover:s,colorBgContainer:u,colorFillSecondary:d,controlHeightLG:f,controlHeightSM:p,colorBgContainerDisabled:m,colorTextDisabled:g}=e;return{zIndexPopup:a+50,optionSelectedColor:i,optionSelectedFontWeight:c,optionSelectedBg:l,optionActiveBg:s,optionPadding:"".concat((r-t*n)/2,"px ").concat(o,"px"),optionFontSize:t,optionLineHeight:n,optionHeight:r,selectorBg:u,clearBg:u,singleItemHeightLG:f,multipleItemBg:d,multipleItemBorderColor:"transparent",multipleItemHeight:p,multipleItemHeightLG:r,multipleSelectorBgDisabled:m,multipleItemColorDisabled:g,multipleItemBorderColorDisabled:"transparent",showArrowPaddingInlineEnd:Math.ceil(1.25*e.fontSize)}},{unitless:{optionLineHeight:!0,optionSelectedFontWeight:!0}}),tq={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},tX=n(688),tG=r.forwardRef(function(e,t){return r.createElement(tX.Z,(0,i.Z)({},e,{ref:t,icon:tq}))}),tU=n(7136),tK=n(1183),t$=n(383),tY=n(9334),tQ=n(6871),tJ=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let t0="SECRET_COMBOBOX_MODE_DO_NOT_USE",t1=r.forwardRef((e,t)=>{var n,o,i;let c;let{prefixCls:l,bordered:s,className:u,rootClassName:d,getPopupContainer:f,popupClassName:p,dropdownClassName:m,listHeight:g=256,placement:h,listItemHeight:v,size:b,disabled:y,notFoundContent:x,status:w,builtinPlacements:E,dropdownMatchSelectWidth:C,popupMatchSelectWidth:S,direction:O,style:Z,allowClear:k,variant:R,dropdownStyle:M,transitionName:j,tagRender:P,maxCount:N}=e,I=tJ(e,["prefixCls","bordered","className","rootClassName","getPopupContainer","popupClassName","dropdownClassName","listHeight","placement","listItemHeight","size","disabled","notFoundContent","status","builtinPlacements","dropdownMatchSelectWidth","popupMatchSelectWidth","direction","style","allowClear","variant","dropdownStyle","transitionName","tagRender","maxCount"]),{getPopupContainer:T,getPrefixCls:A,renderEmpty:F,direction:z,virtual:L,popupMatchSelectWidth:_,popupOverflow:B,select:H}=r.useContext(eY.E_),[,D]=(0,e0.ZP)(),W=null!=v?v:null==D?void 0:D.controlHeight,V=A("select",l),q=A(),X=null!=O?O:z,{compactSize:G,compactItemClassnames:U}=(0,ta.ri)(V,X),[K,$]=(0,to.Z)(R,s),Y=(0,tt.Z)(V),[Q,J,ee]=tV(V,Y),et=r.useMemo(()=>{let{mode:t}=e;return"combobox"===t?void 0:t===t0?"combobox":t},[e.mode]),en="multiple"===et||"tags"===et,er=(o=e.suffixIcon,void 0!==(i=e.showArrow)?i:null!==o),eo=null!==(n=null!=S?S:C)&&void 0!==n?n:_,{status:ea,hasFeedback:ei,isFormItemInput:ec,feedbackIcon:el}=r.useContext(tr.aM),es=(0,e$.F)(ea,w);c=void 0!==x?x:"combobox"===et?null:(null==F?void 0:F("Select"))||r.createElement(e7,{componentName:"Select"});let{suffixIcon:eu,itemIcon:ed,removeIcon:ef,clearIcon:ep}=function(e){let{suffixIcon:t,clearIcon:n,menuItemSelectedIcon:o,removeIcon:a,loading:i,multiple:c,hasFeedback:l,prefixCls:s,showSuffixIcon:u,feedbackIcon:d,showArrow:f,componentName:p}=e,m=null!=n?n:r.createElement(tU.Z,null),g=e=>null!==t||l||f?r.createElement(r.Fragment,null,!1!==u&&e,l&&d):null,h=null;if(void 0!==t)h=g(t);else if(i)h=g(r.createElement(tY.Z,{spin:!0}));else{let e="".concat(s,"-suffix");h=t=>{let{open:n,showSearch:o}=t;return n&&o?g(r.createElement(tQ.Z,{className:e})):g(r.createElement(t$.Z,{className:e}))}}let v=null;return v=void 0!==o?o:c?r.createElement(tG,null):null,{clearIcon:m,suffixIcon:h,itemIcon:v,removeIcon:void 0!==a?a:r.createElement(tK.Z,null)}}(Object.assign(Object.assign({},I),{multiple:en,hasFeedback:ei,feedbackIcon:el,showSuffixIcon:er,prefixCls:V,componentName:"Select"})),em=(0,eg.Z)(I,["suffixIcon","itemIcon"]),eh=a()(p||m,{["".concat(V,"-dropdown-").concat(X)]:"rtl"===X},d,ee,Y,J),ev=(0,tn.Z)(e=>{var t;return null!==(t=null!=b?b:G)&&void 0!==t?t:e}),eb=r.useContext(te.Z),ey=a()({["".concat(V,"-lg")]:"large"===ev,["".concat(V,"-sm")]:"small"===ev,["".concat(V,"-rtl")]:"rtl"===X,["".concat(V,"-").concat(K)]:$,["".concat(V,"-in-form-item")]:ec},(0,e$.Z)(V,es,ei),U,null==H?void 0:H.className,u,d,ee,Y,J),ex=r.useMemo(()=>void 0!==h?h:"rtl"===X?"bottomRight":"bottomLeft",[h,X]),[ew]=(0,eG.Cn)("SelectLike",null==M?void 0:M.zIndex);return Q(r.createElement(eX,Object.assign({ref:t,virtual:L,showSearch:null==H?void 0:H.showSearch},em,{style:Object.assign(Object.assign({},null==H?void 0:H.style),Z),dropdownMatchSelectWidth:eo,transitionName:(0,eU.m)(q,"slide-up",j),builtinPlacements:E||ti(B),listHeight:g,listItemHeight:W,mode:et,prefixCls:V,placement:ex,direction:X,suffixIcon:eu,menuItemSelectedIcon:ed,removeIcon:ef,allowClear:!0===k?{clearIcon:ep}:k,notFoundContent:c,className:ey,getPopupContainer:f||T,dropdownClassName:eh,disabled:null!=y?y:eb,dropdownStyle:Object.assign(Object.assign({},M),{zIndex:ew}),maxCount:en?N:void 0,tagRender:en?P:void 0})))}),t2=(0,eK.Z)(t1);t1.SECRET_COMBOBOX_MODE_DO_NOT_USE=t0,t1.Option=ep,t1.OptGroup=ef,t1._InternalPanelDoNotUseOrYouWillBeFired=t2;var t4=t1},2801:function(e,t,n){n.d(t,{BR:function(){return l},ri:function(){return c}});var r=n(6480),o=n.n(r);n(3054);var a=n(4090);let i=a.createContext(null),c=(e,t)=>{let n=a.useContext(i),r=a.useMemo(()=>{if(!n)return"";let{compactDirection:r,isFirstItem:a,isLastItem:i}=n,c="vertical"===r?"-vertical-":"-";return o()("".concat(e,"-compact").concat(c,"item"),{["".concat(e,"-compact").concat(c,"first-item")]:a,["".concat(e,"-compact").concat(c,"last-item")]:i,["".concat(e,"-compact").concat(c,"item-rtl")]:"rtl"===t})},[e,t,n]);return{compactSize:null==n?void 0:n.compactSize,compactDirection:null==n?void 0:n.compactDirection,compactItemClassnames:r}},l=e=>{let{children:t}=e;return a.createElement(i.Provider,{value:null},t)}},2288:function(e,t,n){n.d(t,{c:function(){return r}});function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{focus:!0},{componentCls:n}=e,r="".concat(n,"-compact");return{[r]:Object.assign(Object.assign({},function(e,t,n){let{focusElCls:r,focus:o,borderElCls:a}=n,i=a?"> *":"",c=["hover",o?"focus":null,"active"].filter(Boolean).map(e=>"&:".concat(e," ").concat(i)).join(",");return{["&-item:not(".concat(t,"-last-item)")]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal()},"&-item":Object.assign(Object.assign({[c]:{zIndex:2}},r?{["&".concat(r)]:{zIndex:2}}:{}),{["&[disabled] ".concat(i)]:{zIndex:0}})}}(e,r,t)),function(e,t,n){let{borderElCls:r}=n,o=r?"> ".concat(r):"";return{["&-item:not(".concat(t,"-first-item):not(").concat(t,"-last-item) ").concat(o)]:{borderRadius:0},["&-item:not(".concat(t,"-last-item)").concat(t,"-first-item")]:{["& ".concat(o,", &").concat(e,"-sm ").concat(o,", &").concat(e,"-lg ").concat(o)]:{borderStartEndRadius:0,borderEndEndRadius:0}},["&-item:not(".concat(t,"-first-item)").concat(t,"-last-item")]:{["& ".concat(o,", &").concat(e,"-sm ").concat(o,", &").concat(e,"-lg ").concat(o)]:{borderStartStartRadius:0,borderEndStartRadius:0}}}}(n,r,t))}}},1303:function(e,t,n){n.d(t,{Lx:function(){return l},Qy:function(){return d},Ro:function(){return i},Wf:function(){return a},dF:function(){return c},du:function(){return s},vS:function(){return o}});var r=n(8985);let o={overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{boxSizing:"border-box",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:"none",fontFamily:t?"inherit":e.fontFamily}},i=()=>({display:"inline-flex",alignItems:"center",color:"inherit",fontStyle:"normal",lineHeight:0,textAlign:"center",textTransform:"none",verticalAlign:"-0.125em",textRendering:"optimizeLegibility","-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale","> *":{lineHeight:1},svg:{display:"inline-block"}}),c=()=>({"&::before":{display:"table",content:'""'},"&::after":{display:"table",clear:"both",content:'""'}}),l=e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"-webkit-text-decoration-skip":"objects","&:hover":{color:e.colorLinkHover},"&:active":{color:e.colorLinkActive},"&:active,\n &:hover":{textDecoration:e.linkHoverDecoration,outline:0},"&:focus":{textDecoration:e.linkFocusDecoration,outline:0},"&[disabled]":{color:e.colorTextDisabled,cursor:"not-allowed"}}}),s=(e,t)=>{let{fontFamily:n,fontSize:r}=e,o='[class^="'.concat(t,'"], [class*=" ').concat(t,'"]');return{[o]:{fontFamily:n,fontSize:r,boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"},[o]:{boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}}}}},u=e=>({outline:"".concat((0,r.bf)(e.lineWidthFocus)," solid ").concat(e.colorPrimaryBorder),outlineOffset:1,transition:"outline-offset 0s, outline 0s"}),d=e=>({"&:focus-visible":Object.assign({},u(e))})},9353:function(e,t,n){n.d(t,{R:function(){return a}});let r=e=>({animationDuration:e,animationFillMode:"both"}),o=e=>({animationDuration:e,animationFillMode:"both"}),a=function(e,t,n,a){let i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],c=i?"&":"";return{["\n ".concat(c).concat(e,"-enter,\n ").concat(c).concat(e,"-appear\n ")]:Object.assign(Object.assign({},r(a)),{animationPlayState:"paused"}),["".concat(c).concat(e,"-leave")]:Object.assign(Object.assign({},o(a)),{animationPlayState:"paused"}),["\n ".concat(c).concat(e,"-enter").concat(e,"-enter-active,\n ").concat(c).concat(e,"-appear").concat(e,"-appear-active\n ")]:{animationName:t,animationPlayState:"running"},["".concat(c).concat(e,"-leave").concat(e,"-leave-active")]:{animationName:n,animationPlayState:"running",pointerEvents:"none"}}}},8854:function(e,t,n){n.d(t,{_y:function(){return g},kr:function(){return a}});var r=n(8985),o=n(9353);let a=new r.E4("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),i=new r.E4("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),c=new r.E4("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),l=new r.E4("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),s=new r.E4("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),u=new r.E4("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),d=new r.E4("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),f=new r.E4("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new r.E4("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),m={zoom:{inKeyframes:a,outKeyframes:i},"zoom-big":{inKeyframes:c,outKeyframes:l},"zoom-big-fast":{inKeyframes:c,outKeyframes:l},"zoom-left":{inKeyframes:d,outKeyframes:f},"zoom-right":{inKeyframes:p,outKeyframes:new r.E4("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}})},"zoom-up":{inKeyframes:s,outKeyframes:u},"zoom-down":{inKeyframes:new r.E4("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),outKeyframes:new r.E4("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}})}},g=(e,t)=>{let{antCls:n}=e,r="".concat(n,"-").concat(t),{inKeyframes:a,outKeyframes:i}=m[t];return[(0,o.R)(r,a,i,"zoom-big-fast"===t?e.motionDurationFast:e.motionDurationMid),{["\n ".concat(r,"-enter,\n ").concat(r,"-appear\n ")]:{transform:"scale(0)",opacity:0,animationTimingFunction:e.motionEaseOutCirc,"&-prepare":{transform:"none"}},["".concat(r,"-leave")]:{animationTimingFunction:e.motionEaseInOutCirc}}]}},3345:function(e,t,n){n.d(t,{Mj:function(){return b},u_:function(){return v},uH:function(){return h}});var r=n(4090),o=n(8985),a=n(2215),i=e=>{let{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t}},c=n(6864),l=n(6336),s=e=>{let t=e,n=e,r=e,o=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?n=4:e<8&&e>=7?n=5:e<14&&e>=8?n=6:e<16&&e>=14?n=7:e>=16&&(n=8),e<6&&e>=2?r=1:e>=6&&(r=2),e>4&&e<8?o=4:e>=8&&(o=6),{borderRadius:e,borderRadiusXS:r,borderRadiusSM:n,borderRadiusLG:t,borderRadiusOuter:o}};let u=(e,t)=>new l.C(e).setAlpha(t).toRgbString(),d=(e,t)=>new l.C(e).darken(t).toHexString(),f=e=>{let t=(0,a.R_)(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},p=(e,t)=>{let n=e||"#fff",r=t||"#000";return{colorBgBase:n,colorTextBase:r,colorText:u(r,.88),colorTextSecondary:u(r,.65),colorTextTertiary:u(r,.45),colorTextQuaternary:u(r,.25),colorFill:u(r,.15),colorFillSecondary:u(r,.06),colorFillTertiary:u(r,.04),colorFillQuaternary:u(r,.02),colorBgLayout:d(n,4),colorBgContainer:d(n,0),colorBgElevated:d(n,0),colorBgSpotlight:u(r,.85),colorBgBlur:"transparent",colorBorder:d(n,15),colorBorderSecondary:d(n,6)}};var m=n(9202),g=e=>{let t=(0,m.Z)(e),n=t.map(e=>e.size),r=t.map(e=>e.lineHeight),o=n[1],a=n[0],i=n[2],c=r[1],l=r[0],s=r[2];return{fontSizeSM:a,fontSize:o,fontSizeLG:i,fontSizeXL:n[3],fontSizeHeading1:n[6],fontSizeHeading2:n[5],fontSizeHeading3:n[4],fontSizeHeading4:n[3],fontSizeHeading5:n[2],lineHeight:c,lineHeightLG:s,lineHeightSM:l,fontHeight:Math.round(c*o),fontHeightLG:Math.round(s*i),fontHeightSM:Math.round(l*a),lineHeightHeading1:r[6],lineHeightHeading2:r[5],lineHeightHeading3:r[4],lineHeightHeading4:r[3],lineHeightHeading5:r[2]}};let h=(0,o.jG)(function(e){let t=Object.keys(c.M).map(t=>{let n=(0,a.R_)(e[t]);return Array(10).fill(1).reduce((e,r,o)=>(e["".concat(t,"-").concat(o+1)]=n[o],e["".concat(t).concat(o+1)]=n[o],e),{})}).reduce((e,t)=>e=Object.assign(Object.assign({},e),t),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),function(e,t){let{generateColorPalettes:n,generateNeutralColorPalettes:r}=t,{colorSuccess:o,colorWarning:a,colorError:i,colorInfo:c,colorPrimary:s,colorBgBase:u,colorTextBase:d}=e,f=n(s),p=n(o),m=n(a),g=n(i),h=n(c),v=r(u,d),b=n(e.colorLink||e.colorInfo);return Object.assign(Object.assign({},v),{colorPrimaryBg:f[1],colorPrimaryBgHover:f[2],colorPrimaryBorder:f[3],colorPrimaryBorderHover:f[4],colorPrimaryHover:f[5],colorPrimary:f[6],colorPrimaryActive:f[7],colorPrimaryTextHover:f[8],colorPrimaryText:f[9],colorPrimaryTextActive:f[10],colorSuccessBg:p[1],colorSuccessBgHover:p[2],colorSuccessBorder:p[3],colorSuccessBorderHover:p[4],colorSuccessHover:p[4],colorSuccess:p[6],colorSuccessActive:p[7],colorSuccessTextHover:p[8],colorSuccessText:p[9],colorSuccessTextActive:p[10],colorErrorBg:g[1],colorErrorBgHover:g[2],colorErrorBorder:g[3],colorErrorBorderHover:g[4],colorErrorHover:g[5],colorError:g[6],colorErrorActive:g[7],colorErrorTextHover:g[8],colorErrorText:g[9],colorErrorTextActive:g[10],colorWarningBg:m[1],colorWarningBgHover:m[2],colorWarningBorder:m[3],colorWarningBorderHover:m[4],colorWarningHover:m[4],colorWarning:m[6],colorWarningActive:m[7],colorWarningTextHover:m[8],colorWarningText:m[9],colorWarningTextActive:m[10],colorInfoBg:h[1],colorInfoBgHover:h[2],colorInfoBorder:h[3],colorInfoBorderHover:h[4],colorInfoHover:h[4],colorInfo:h[6],colorInfoActive:h[7],colorInfoTextHover:h[8],colorInfoText:h[9],colorInfoTextActive:h[10],colorLinkHover:b[4],colorLink:b[6],colorLinkActive:b[7],colorBgMask:new l.C("#000").setAlpha(.45).toRgbString(),colorWhite:"#fff"})}(e,{generateColorPalettes:f,generateNeutralColorPalettes:p})),g(e.fontSize)),function(e){let{sizeUnit:t,sizeStep:n}=e;return{sizeXXL:t*(n+8),sizeXL:t*(n+4),sizeLG:t*(n+2),sizeMD:t*(n+1),sizeMS:t*n,size:t*n,sizeSM:t*(n-1),sizeXS:t*(n-2),sizeXXS:t*(n-3)}}(e)),i(e)),function(e){let{motionUnit:t,motionBase:n,borderRadius:r,lineWidth:o}=e;return Object.assign({motionDurationFast:"".concat((n+t).toFixed(1),"s"),motionDurationMid:"".concat((n+2*t).toFixed(1),"s"),motionDurationSlow:"".concat((n+3*t).toFixed(1),"s"),lineWidthBold:o+1},s(r))}(e))}),v={token:c.Z,override:{override:c.Z},hashed:!0},b=r.createContext(v)},6864:function(e,t,n){n.d(t,{M:function(){return r}});let r={blue:"#1677ff",purple:"#722ED1",cyan:"#13C2C2",green:"#52C41A",magenta:"#EB2F96",pink:"#eb2f96",red:"#F5222D",orange:"#FA8C16",yellow:"#FADB14",volcano:"#FA541C",geekblue:"#2F54EB",gold:"#FAAD14",lime:"#A0D911"},o=Object.assign(Object.assign({},r),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace",fontSize:14,lineWidth:1,lineType:"solid",motionUnit:.1,motionBase:0,motionEaseOutCirc:"cubic-bezier(0.08, 0.82, 0.17, 1)",motionEaseInOutCirc:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",motionEaseOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",motionEaseInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",motionEaseOutBack:"cubic-bezier(0.12, 0.4, 0.29, 1.46)",motionEaseInBack:"cubic-bezier(0.71, -0.46, 0.88, 0.6)",motionEaseInQuint:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",motionEaseOutQuint:"cubic-bezier(0.23, 1, 0.32, 1)",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0});t.Z=o},9202:function(e,t,n){function r(e){return(e+8)/e}function o(e){let t=Array(10).fill(null).map((t,n)=>{let r=e*Math.pow(2.71828,(n-1)/5);return 2*Math.floor((n>1?Math.floor(r):Math.ceil(r))/2)});return t[1]=e,t.map(e=>({size:e,lineHeight:r(e)}))}n.d(t,{D:function(){return r},Z:function(){return o}})},4750:function(e,t,n){n.d(t,{ZP:function(){return v},ID:function(){return m},NJ:function(){return p}});var r=n(4090),o=n(8985),a=n(3345),i=n(6864),c=n(6336);function l(e){return e>=0&&e<=255}var s=function(e,t){let{r:n,g:r,b:o,a:a}=new c.C(e).toRgb();if(a<1)return e;let{r:i,g:s,b:u}=new c.C(t).toRgb();for(let e=.01;e<=1;e+=.01){let t=Math.round((n-i*(1-e))/e),a=Math.round((r-s*(1-e))/e),d=Math.round((o-u*(1-e))/e);if(l(t)&&l(a)&&l(d))return new c.C({r:t,g:a,b:d,a:Math.round(100*e)/100}).toRgbString()}return new c.C({r:n,g:r,b:o,a:1}).toRgbString()},u=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function d(e){let{override:t}=e,n=u(e,["override"]),r=Object.assign({},t);Object.keys(i.Z).forEach(e=>{delete r[e]});let o=Object.assign(Object.assign({},n),r);return!1===o.motion&&(o.motionDurationFast="0s",o.motionDurationMid="0s",o.motionDurationSlow="0s"),Object.assign(Object.assign(Object.assign({},o),{colorFillContent:o.colorFillSecondary,colorFillContentHover:o.colorFill,colorFillAlter:o.colorFillQuaternary,colorBgContainerDisabled:o.colorFillTertiary,colorBorderBg:o.colorBgContainer,colorSplit:s(o.colorBorderSecondary,o.colorBgContainer),colorTextPlaceholder:o.colorTextQuaternary,colorTextDisabled:o.colorTextQuaternary,colorTextHeading:o.colorText,colorTextLabel:o.colorTextSecondary,colorTextDescription:o.colorTextTertiary,colorTextLightSolid:o.colorWhite,colorHighlight:o.colorError,colorBgTextHover:o.colorFillSecondary,colorBgTextActive:o.colorFill,colorIcon:o.colorTextTertiary,colorIconHover:o.colorText,colorErrorOutline:s(o.colorErrorBg,o.colorBgContainer),colorWarningOutline:s(o.colorWarningBg,o.colorBgContainer),fontSizeIcon:o.fontSizeSM,lineWidthFocus:4*o.lineWidth,lineWidth:o.lineWidth,controlOutlineWidth:2*o.lineWidth,controlInteractiveSize:o.controlHeight/2,controlItemBgHover:o.colorFillTertiary,controlItemBgActive:o.colorPrimaryBg,controlItemBgActiveHover:o.colorPrimaryBgHover,controlItemBgActiveDisabled:o.colorFill,controlTmpOutline:o.colorFillQuaternary,controlOutline:s(o.colorPrimaryBg,o.colorBgContainer),lineType:o.lineType,borderRadius:o.borderRadius,borderRadiusXS:o.borderRadiusXS,borderRadiusSM:o.borderRadiusSM,borderRadiusLG:o.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:o.sizeXXS,paddingXS:o.sizeXS,paddingSM:o.sizeSM,padding:o.size,paddingMD:o.sizeMD,paddingLG:o.sizeLG,paddingXL:o.sizeXL,paddingContentHorizontalLG:o.sizeLG,paddingContentVerticalLG:o.sizeMS,paddingContentHorizontal:o.sizeMS,paddingContentVertical:o.sizeSM,paddingContentHorizontalSM:o.size,paddingContentVerticalSM:o.sizeXS,marginXXS:o.sizeXXS,marginXS:o.sizeXS,marginSM:o.sizeSM,margin:o.size,marginMD:o.sizeMD,marginLG:o.sizeLG,marginXL:o.sizeXL,marginXXL:o.sizeXXL,boxShadow:"\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowSecondary:"\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowTertiary:"\n 0 1px 2px 0 rgba(0, 0, 0, 0.03),\n 0 1px 6px -1px rgba(0, 0, 0, 0.02),\n 0 2px 4px 0 rgba(0, 0, 0, 0.02)\n ",screenXS:480,screenXSMin:480,screenXSMax:575,screenSM:576,screenSMMin:576,screenSMMax:767,screenMD:768,screenMDMin:768,screenMDMax:991,screenLG:992,screenLGMin:992,screenLGMax:1199,screenXL:1200,screenXLMin:1200,screenXLMax:1599,screenXXL:1600,screenXXLMin:1600,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:"\n 0 1px 2px -2px ".concat(new c.C("rgba(0, 0, 0, 0.16)").toRgbString(),",\n 0 3px 6px 0 ").concat(new c.C("rgba(0, 0, 0, 0.12)").toRgbString(),",\n 0 5px 12px 4px ").concat(new c.C("rgba(0, 0, 0, 0.09)").toRgbString(),"\n "),boxShadowDrawerRight:"\n -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowDrawerLeft:"\n 6px 0 16px 0 rgba(0, 0, 0, 0.08),\n 3px 0 6px -4px rgba(0, 0, 0, 0.12),\n 9px 0 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowDrawerUp:"\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowDrawerDown:"\n 0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowTabsOverflowLeft:"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowRight:"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowTop:"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowBottom:"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)"}),r)}var f=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let p={lineHeight:!0,lineHeightSM:!0,lineHeightLG:!0,lineHeightHeading1:!0,lineHeightHeading2:!0,lineHeightHeading3:!0,lineHeightHeading4:!0,lineHeightHeading5:!0,opacityLoading:!0,fontWeightStrong:!0,zIndexPopupBase:!0,zIndexBase:!0},m={size:!0,sizeSM:!0,sizeLG:!0,sizeMD:!0,sizeXS:!0,sizeXXS:!0,sizeMS:!0,sizeXL:!0,sizeXXL:!0,sizeUnit:!0,sizeStep:!0,motionBase:!0,motionUnit:!0},g={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},h=(e,t,n)=>{let r=n.getDerivativeToken(e),{override:o}=t,a=f(t,["override"]),i=Object.assign(Object.assign({},r),{override:o});return i=d(i),a&&Object.entries(a).forEach(e=>{let[t,n]=e,{theme:r}=n,o=f(n,["theme"]),a=o;r&&(a=h(Object.assign(Object.assign({},i),o),{override:o},r)),i[t]=a}),i};function v(){let{token:e,hashed:t,theme:n,override:c,cssVar:l}=r.useContext(a.Mj),s="".concat("5.13.2","-").concat(t||""),u=n||a.uH,[f,v,b]=(0,o.fp)(u,[i.Z,e],{salt:s,override:c,getComputedToken:h,formatToken:d,cssVar:l&&{prefix:l.prefix,key:l.key,unitless:p,ignore:m,preserve:g}});return[u,b,t?v:"",f,l]}},6585:function(e,t,n){n.d(t,{ZP:function(){return O},I$:function(){return R},bk:function(){return Z}});var r=n(4090),o=n(8985);n(8563);var a=n(7499),i=n(1303),c=n(4750),l=n(7365),s=n(5127),u=n(2784),d=n(9676),f=n(8605),p=n(7478);let m=(0,s.Z)(function e(){(0,l.Z)(this,e)}),g=function(e){function t(e){var n,r,o;return(0,l.Z)(this,t),r=t,r=(0,f.Z)(r),(n=(0,u.Z)(this,(0,d.Z)()?Reflect.construct(r,o||[],(0,f.Z)(this).constructor):r.apply(this,o))).result=0,e instanceof t?n.result=e.result:"number"==typeof e&&(n.result=e),n}return(0,p.Z)(t,e),(0,s.Z)(t,[{key:"add",value:function(e){return e instanceof t?this.result+=e.result:"number"==typeof e&&(this.result+=e),this}},{key:"sub",value:function(e){return e instanceof t?this.result-=e.result:"number"==typeof e&&(this.result-=e),this}},{key:"mul",value:function(e){return e instanceof t?this.result*=e.result:"number"==typeof e&&(this.result*=e),this}},{key:"div",value:function(e){return e instanceof t?this.result/=e.result:"number"==typeof e&&(this.result/=e),this}},{key:"equal",value:function(){return this.result}}]),t}(m),h="CALC_UNIT";function v(e){return"number"==typeof e?"".concat(e).concat(h):e}let b=function(e){function t(e){var n,r,o;return(0,l.Z)(this,t),r=t,r=(0,f.Z)(r),(n=(0,u.Z)(this,(0,d.Z)()?Reflect.construct(r,o||[],(0,f.Z)(this).constructor):r.apply(this,o))).result="",e instanceof t?n.result="(".concat(e.result,")"):"number"==typeof e?n.result=v(e):"string"==typeof e&&(n.result=e),n}return(0,p.Z)(t,e),(0,s.Z)(t,[{key:"add",value:function(e){return e instanceof t?this.result="".concat(this.result," + ").concat(e.getResult()):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," + ").concat(v(e))),this.lowPriority=!0,this}},{key:"sub",value:function(e){return e instanceof t?this.result="".concat(this.result," - ").concat(e.getResult()):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," - ").concat(v(e))),this.lowPriority=!0,this}},{key:"mul",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof t?this.result="".concat(this.result," * ").concat(e.getResult(!0)):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," * ").concat(e)),this.lowPriority=!1,this}},{key:"div",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof t?this.result="".concat(this.result," / ").concat(e.getResult(!0)):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," / ").concat(e)),this.lowPriority=!1,this}},{key:"getResult",value:function(e){return this.lowPriority||e?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(e){let{unit:t=!0}=e||{},n=RegExp("".concat(h),"g");return(this.result=this.result.replace(n,t?"px":""),void 0!==this.lowPriority)?"calc(".concat(this.result,")"):this.result}}]),t}(m);var y=e=>{let t="css"===e?b:g;return e=>new t(e)},x=n(316),w=n(8030);let E=(e,t,n)=>{var r;return"function"==typeof n?n((0,x.TS)(t,null!==(r=t[e])&&void 0!==r?r:{})):null!=n?n:{}},C=(e,t,n,r)=>{let o=Object.assign({},t[e]);if(null==r?void 0:r.deprecatedTokens){let{deprecatedTokens:e}=r;e.forEach(e=>{var t;let[n,r]=e;((null==o?void 0:o[n])||(null==o?void 0:o[r]))&&(null!==(t=o[r])&&void 0!==t||(o[r]=null==o?void 0:o[n]))})}let a=Object.assign(Object.assign({},n),o);return Object.keys(a).forEach(e=>{a[e]===t[e]&&delete a[e]}),a},S=(e,t)=>"".concat([t,e.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"));function O(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=Array.isArray(e)?e:[e,e],[u]=s,d=s.join("-");return e=>{let[s,f,p,m,g]=(0,c.ZP)(),{getPrefixCls:h,iconPrefixCls:v,csp:b}=(0,r.useContext)(a.E_),O=h(),Z=g?"css":"js",k=y(Z),{max:R,min:M}="js"===Z?{max:Math.max,min:Math.min}:{max:function(){for(var e=arguments.length,t=Array(e),n=0;n(0,o.bf)(e)).join(","),")")},min:function(){for(var e=arguments.length,t=Array(e),n=0;n(0,o.bf)(e)).join(","),")")}},j={theme:s,token:m,hashId:p,nonce:()=>null==b?void 0:b.nonce,clientOnly:l.clientOnly,order:l.order||-999};return(0,o.xy)(Object.assign(Object.assign({},j),{clientOnly:!1,path:["Shared",O]}),()=>[{"&":(0,i.Lx)(m)}]),(0,w.Z)(v,b),[(0,o.xy)(Object.assign(Object.assign({},j),{path:[d,e,v]}),()=>{if(!1===l.injectStyle)return[];let{token:r,flush:a}=(0,x.ZP)(m),c=E(u,f,n),s=".".concat(e),d=C(u,f,c,{deprecatedTokens:l.deprecatedTokens});g&&Object.keys(c).forEach(e=>{c[e]="var(".concat((0,o.ks)(e,S(u,g.prefix)),")")});let h=(0,x.TS)(r,{componentCls:s,prefixCls:e,iconCls:".".concat(v),antCls:".".concat(O),calc:k,max:R,min:M},g?c:d),b=t(h,{hashId:p,prefixCls:e,rootPrefixCls:O,iconPrefixCls:v});return a(u,d),[!1===l.resetStyle?null:(0,i.du)(h,e),b]}),p]}}let Z=(e,t,n,r)=>{let o=O(e,t,n,Object.assign({resetStyle:!1,order:-998},r));return e=>{let{prefixCls:t}=e;return o(t),null}},k=(e,t,n)=>{function a(t){return"".concat(e).concat(t.slice(0,1).toUpperCase()).concat(t.slice(1))}let{unitless:i={},injectStyle:l=!0}=null!=n?n:{},s={[a("zIndexPopup")]:!0};Object.keys(i).forEach(e=>{s[a(e)]=i[e]});let u=r=>{let{rootCls:i,cssVar:l}=r,[,u]=(0,c.ZP)();return(0,o.CI)({path:[e],prefix:l.prefix,key:null==l?void 0:l.key,unitless:Object.assign(Object.assign({},c.NJ),s),ignore:c.ID,token:u,scope:i},()=>{let r=E(e,u,t),o=C(e,u,r,{deprecatedTokens:null==n?void 0:n.deprecatedTokens});return Object.keys(r).forEach(e=>{o[a(e)]=o[e],delete o[e]}),o}),null};return t=>{let[,,,,n]=(0,c.ZP)();return[o=>l&&n?r.createElement(r.Fragment,null,r.createElement(u,{rootCls:t,cssVar:n,component:e}),o):o,null==n?void 0:n.key]}},R=(e,t,n,r)=>{let o=O(e,t,n,r),a=k(Array.isArray(e)?e[0]:e,n,r);return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,[,n]=o(e),[r,i]=a(t);return[r,n,i]}}},316:function(e,t,n){n.d(t,{TS:function(){return a}});let r="undefined"!=typeof CSSINJS_STATISTIC,o=!0;function a(){for(var e=arguments.length,t=Array(e),n=0;n{Object.keys(e).forEach(t=>{Object.defineProperty(a,t,{configurable:!0,enumerable:!0,get:()=>e[t]})})}),o=!0,a}let i={};function c(){}t.ZP=e=>{let t;let n=e,a=c;return r&&"undefined"!=typeof Proxy&&(t=new Set,n=new Proxy(e,{get:(e,n)=>(o&&t.add(n),e[n])}),a=(e,n)=>{var r;i[e]={global:Array.from(t),component:Object.assign(Object.assign({},null===(r=i[e])||void 0===r?void 0:r.component),n)}}),{token:n,keys:t,flush:a}}},8030:function(e,t,n){var r=n(8985),o=n(1303),a=n(4750);t.Z=(e,t)=>{let[n,i]=(0,a.ZP)();return(0,r.xy)({theme:n,token:i,hashId:"",path:["ant-design-icons",e],nonce:()=>null==t?void 0:t.nonce},()=>[{[".".concat(e)]:Object.assign(Object.assign({},(0,o.Ro)()),{[".".concat(e," .").concat(e,"-icon")]:{display:"block"}})}])}},7907:function(e,t,n){var r=n(5313);n.o(r,"useSearchParams")&&n.d(t,{useSearchParams:function(){return r.useSearchParams}})},9079:function(e,t,n){var r,o;e.exports=(null==(r=n.g.process)?void 0:r.env)&&"object"==typeof(null==(o=n.g.process)?void 0:o.env)?n.g.process:n(3127)},2956:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addLocale",{enumerable:!0,get:function(){return r}}),n(2139);let r=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r{})}}function y(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}let x=a.default.forwardRef(function(e,t){let n,r;let{href:l,as:v,children:x,prefetch:w=null,passHref:E,replace:C,shallow:S,scroll:O,locale:Z,onClick:k,onMouseEnter:R,onTouchStart:M,legacyBehavior:j=!1,...P}=e;n=x,j&&("string"==typeof n||"number"==typeof n)&&(n=(0,o.jsx)("a",{children:n}));let N=a.default.useContext(d.RouterContext),I=a.default.useContext(f.AppRouterContext),T=null!=N?N:I,A=!N,F=!1!==w,z=null===w?h.PrefetchKind.AUTO:h.PrefetchKind.FULL,{href:L,as:_}=a.default.useMemo(()=>{if(!N){let e=y(l);return{href:e,as:v?y(v):e}}let[e,t]=(0,i.resolveHref)(N,l,!0);return{href:e,as:v?(0,i.resolveHref)(N,v):t||e}},[N,l,v]),B=a.default.useRef(L),H=a.default.useRef(_);j&&(r=a.default.Children.only(n));let D=j?r&&"object"==typeof r&&r.ref:t,[W,V,q]=(0,p.useIntersection)({rootMargin:"200px"}),X=a.default.useCallback(e=>{(H.current!==_||B.current!==L)&&(q(),H.current=_,B.current=L),W(e),D&&("function"==typeof D?D(e):"object"==typeof D&&(D.current=e))},[_,D,L,q,W]);a.default.useEffect(()=>{T&&V&&F&&b(T,L,_,{locale:Z},{kind:z},A)},[_,L,V,Z,F,null==N?void 0:N.locale,T,A,z]);let G={ref:X,onClick(e){j||"function"!=typeof k||k(e),j&&r.props&&"function"==typeof r.props.onClick&&r.props.onClick(e),T&&!e.defaultPrevented&&function(e,t,n,r,o,i,l,s,u){let{nodeName:d}=e.currentTarget;if("A"===d.toUpperCase()&&(function(e){let t=e.currentTarget.getAttribute("target");return t&&"_self"!==t||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which}(e)||!u&&!(0,c.isLocalURL)(n)))return;e.preventDefault();let f=()=>{let e=null==l||l;"beforePopState"in t?t[o?"replace":"push"](n,r,{shallow:i,locale:s,scroll:e}):t[o?"replace":"push"](r||n,{scroll:e})};u?a.default.startTransition(f):f()}(e,T,L,_,C,S,O,Z,A)},onMouseEnter(e){j||"function"!=typeof R||R(e),j&&r.props&&"function"==typeof r.props.onMouseEnter&&r.props.onMouseEnter(e),T&&(F||!A)&&b(T,L,_,{locale:Z,priority:!0,bypassPrefetchedCheck:!0},{kind:z},A)},onTouchStart(e){j||"function"!=typeof M||M(e),j&&r.props&&"function"==typeof r.props.onTouchStart&&r.props.onTouchStart(e),T&&(F||!A)&&b(T,L,_,{locale:Z,priority:!0,bypassPrefetchedCheck:!0},{kind:z},A)}};if((0,s.isAbsoluteUrl)(_))G.href=_;else if(!j||E||"a"===r.type&&!("href"in r.props)){let e=void 0!==Z?Z:null==N?void 0:N.locale,t=(null==N?void 0:N.isLocaleDomain)&&(0,m.getDomainLocale)(_,e,null==N?void 0:N.locales,null==N?void 0:N.domainLocales);G.href=t||(0,g.addBasePath)((0,u.addLocale)(_,e,null==N?void 0:N.defaultLocale))}return j?a.default.cloneElement(r,G):(0,o.jsx)("a",{...P,...G,children:n})});("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2185:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{requestIdleCallback:function(){return n},cancelIdleCallback:function(){return r}});let n="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)},r="undefined"!=typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4542:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"resolveHref",{enumerable:!0,get:function(){return d}});let r=n(5770),o=n(1030),a=n(4544),i=n(6874),c=n(2139),l=n(7434),s=n(2360),u=n(6735);function d(e,t,n){let d;let f="string"==typeof t?t:(0,o.formatWithValidation)(t),p=f.match(/^[a-zA-Z]{1,}:\/\//),m=p?f.slice(p[0].length):f;if((m.split("?",1)[0]||"").match(/(\/\/|\\)/)){console.error("Invalid href '"+f+"' passed to next/router in page: '"+e.pathname+"'. Repeated forward-slashes (//) or backslashes \\ are not valid in the href.");let t=(0,i.normalizeRepeatedSlashes)(m);f=(p?p[0]:"")+t}if(!(0,l.isLocalURL)(f))return n?[f]:f;try{d=new URL(f.startsWith("#")?e.asPath:e.pathname,"http://n")}catch(e){d=new URL("/","http://n")}try{let e=new URL(f,d);e.pathname=(0,c.normalizePathTrailingSlash)(e.pathname);let t="";if((0,s.isDynamicRoute)(e.pathname)&&e.searchParams&&n){let n=(0,r.searchParamsToUrlQuery)(e.searchParams),{result:i,params:c}=(0,u.interpolateAs)(e.pathname,e.pathname,n);i&&(t=(0,o.formatWithValidation)({pathname:i,hash:e.hash,query:(0,a.omit)(n,c)}))}let i=e.origin===d.origin?e.href.slice(e.origin.length):e.href;return n?[i,t||i]:i}catch(e){return n?[f]:f}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5291:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"useIntersection",{enumerable:!0,get:function(){return l}});let r=n(4090),o=n(2185),a="function"==typeof IntersectionObserver,i=new Map,c=[];function l(e){let{rootRef:t,rootMargin:n,disabled:l}=e,s=l||!a,[u,d]=(0,r.useState)(!1),f=(0,r.useRef)(null),p=(0,r.useCallback)(e=>{f.current=e},[]);return(0,r.useEffect)(()=>{if(a){if(s||u)return;let e=f.current;if(e&&e.tagName)return function(e,t,n){let{id:r,observer:o,elements:a}=function(e){let t;let n={root:e.root||null,margin:e.rootMargin||""},r=c.find(e=>e.root===n.root&&e.margin===n.margin);if(r&&(t=i.get(r)))return t;let o=new Map;return t={id:n,observer:new IntersectionObserver(e=>{e.forEach(e=>{let t=o.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)})},e),elements:o},c.push(n),i.set(n,t),t}(n);return a.set(e,t),o.observe(e),function(){if(a.delete(e),o.unobserve(e),0===a.size){o.disconnect(),i.delete(r);let e=c.findIndex(e=>e.root===r.root&&e.margin===r.margin);e>-1&&c.splice(e,1)}}}(e,e=>e&&d(e),{root:null==t?void 0:t.current,rootMargin:n})}else if(!u){let e=(0,o.requestIdleCallback)(()=>d(!0));return()=>(0,o.cancelIdleCallback)(e)}},[s,n,t,u,f.current]),[p,u,(0,r.useCallback)(()=>{d(!1)},[])]}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3127:function(e){!function(){var t={229:function(e){var t,n,r,o=e.exports={};function a(){throw Error("setTimeout has not been defined")}function i(){throw Error("clearTimeout has not been defined")}function c(e){if(t===setTimeout)return setTimeout(e,0);if((t===a||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:a}catch(e){t=a}try{n="function"==typeof clearTimeout?clearTimeout:i}catch(e){n=i}}();var l=[],s=!1,u=-1;function d(){s&&r&&(s=!1,r.length?l=r.concat(l):u=-1,l.length&&f())}function f(){if(!s){var e=c(d);s=!0;for(var t=l.length;t;){for(r=l,l=[];++u1)for(var n=1;n{let t=l[e]||"",{repeat:n,optional:r}=c[e],o="["+(n?"...":"")+e+"]";return r&&(o=(t?"":"/")+"["+o+"]"),n&&!Array.isArray(t)&&(t=[t]),(r||e in l)&&(a=a.replace(o,n?t.map(e=>encodeURIComponent(e)).join("/"):encodeURIComponent(t))||"/")})||(a=""),{params:s,result:a}}},1305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isDynamicRoute",{enumerable:!0,get:function(){return a}});let r=n(4749),o=/\/\[[^/]+?\](?=\/|$)/;function a(e){return(0,r.isInterceptionRouteAppPath)(e)&&(e=(0,r.extractInterceptionRouteInformation)(e).interceptedRoute),o.test(e)}},7434:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isLocalURL",{enumerable:!0,get:function(){return a}});let r=n(6874),o=n(7379);function a(e){if(!(0,r.isAbsoluteUrl)(e))return!0;try{let t=(0,r.getLocationOrigin)(),n=new URL(e,t);return n.origin===t&&(0,o.hasBasePath)(n.pathname)}catch(e){return!1}}},4544:function(e,t){function n(e,t){let n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"omit",{enumerable:!0,get:function(){return n}})},5770:function(e,t){function n(e){let t={};return e.forEach((e,n)=>{void 0===t[n]?t[n]=e:Array.isArray(t[n])?t[n].push(e):t[n]=[t[n],e]}),t}function r(e){return"string"!=typeof e&&("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;return Object.entries(e).forEach(e=>{let[n,o]=e;Array.isArray(o)?o.forEach(e=>t.append(n,r(e))):t.set(n,r(o))}),t}function a(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r{Array.from(t.keys()).forEach(t=>e.delete(t)),t.forEach((t,n)=>e.append(n,t))}),e}Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{searchParamsToUrlQuery:function(){return n},urlQueryToSearchParams:function(){return o},assign:function(){return a}})},2395:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getRouteMatcher",{enumerable:!0,get:function(){return o}});let r=n(6874);function o(e){let{re:t,groups:n}=e;return e=>{let o=t.exec(e);if(!o)return!1;let a=e=>{try{return decodeURIComponent(e)}catch(e){throw new r.DecodeError("failed to decode param")}},i={};return Object.keys(n).forEach(e=>{let t=n[e],r=o[t.pos];void 0!==r&&(i[e]=~r.indexOf("/")?r.split("/").map(e=>a(e)):t.repeat?[a(r)]:a(r))}),i}}},9935:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{getRouteRegex:function(){return l},getNamedRouteRegex:function(){return d},getNamedMiddlewareRegex:function(){return f}});let r=n(4749),o=n(2202),a=n(5868);function i(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let n=e.startsWith("...");return n&&(e=e.slice(3)),{key:e,repeat:n,optional:t}}function c(e){let t=(0,a.removeTrailingSlash)(e).slice(1).split("/"),n={},c=1;return{parameterizedRoute:t.map(e=>{let t=r.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t)),a=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&a){let{key:e,optional:r,repeat:l}=i(a[1]);return n[e]={pos:c++,repeat:l,optional:r},"/"+(0,o.escapeStringRegexp)(t)+"([^/]+?)"}if(!a)return"/"+(0,o.escapeStringRegexp)(e);{let{key:e,repeat:t,optional:r}=i(a[1]);return n[e]={pos:c++,repeat:t,optional:r},t?r?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:n}}function l(e){let{parameterizedRoute:t,groups:n}=c(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:n}}function s(e){let{interceptionMarker:t,getSafeRouteKey:n,segment:r,routeKeys:a,keyPrefix:c}=e,{key:l,optional:s,repeat:u}=i(r),d=l.replace(/\W/g,"");c&&(d=""+c+d);let f=!1;(0===d.length||d.length>30)&&(f=!0),isNaN(parseInt(d.slice(0,1)))||(f=!0),f&&(d=n()),c?a[d]=""+c+l:a[d]=l;let p=t?(0,o.escapeStringRegexp)(t):"";return u?s?"(?:/"+p+"(?<"+d+">.+?))?":"/"+p+"(?<"+d+">.+?)":"/"+p+"(?<"+d+">[^/]+?)"}function u(e,t){let n;let i=(0,a.removeTrailingSlash)(e).slice(1).split("/"),c=(n=0,()=>{let e="",t=++n;for(;t>0;)e+=String.fromCharCode(97+(t-1)%26),t=Math.floor((t-1)/26);return e}),l={};return{namedParameterizedRoute:i.map(e=>{let n=r.INTERCEPTION_ROUTE_MARKERS.some(t=>e.startsWith(t)),a=e.match(/\[((?:\[.*\])|.+)\]/);if(n&&a){let[n]=e.split(a[0]);return s({getSafeRouteKey:c,interceptionMarker:n,segment:a[1],routeKeys:l,keyPrefix:t?"nxtI":void 0})}return a?s({getSafeRouteKey:c,segment:a[1],routeKeys:l,keyPrefix:t?"nxtP":void 0}):"/"+(0,o.escapeStringRegexp)(e)}).join(""),routeKeys:l}}function d(e,t){let n=u(e,t);return{...l(e),namedRegex:"^"+n.namedParameterizedRoute+"(?:/)?$",routeKeys:n.routeKeys}}function f(e,t){let{parameterizedRoute:n}=c(e),{catchAll:r=!0}=t;if("/"===n)return{namedRegex:"^/"+(r?".*":"")+"$"};let{namedParameterizedRoute:o}=u(e,!1);return{namedRegex:"^"+o+(r?"(?:(/.*)?)":"")+"$"}}},7409:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSortedRoutes",{enumerable:!0,get:function(){return r}});class n{insert(e){this._insert(e.split("/").filter(Boolean),[],!1)}smoosh(){return this._smoosh()}_smoosh(e){void 0===e&&(e="/");let t=[...this.children.keys()].sort();null!==this.slugName&&t.splice(t.indexOf("[]"),1),null!==this.restSlugName&&t.splice(t.indexOf("[...]"),1),null!==this.optionalRestSlugName&&t.splice(t.indexOf("[[...]]"),1);let n=t.map(t=>this.children.get(t)._smoosh(""+e+t+"/")).reduce((e,t)=>[...e,...t],[]);if(null!==this.slugName&&n.push(...this.children.get("[]")._smoosh(e+"["+this.slugName+"]/")),!this.placeholder){let t="/"===e?"/":e.slice(0,-1);if(null!=this.optionalRestSlugName)throw Error('You cannot define a route with the same specificity as a optional catch-all route ("'+t+'" and "'+t+"[[..."+this.optionalRestSlugName+']]").');n.unshift(t)}return null!==this.restSlugName&&n.push(...this.children.get("[...]")._smoosh(e+"[..."+this.restSlugName+"]/")),null!==this.optionalRestSlugName&&n.push(...this.children.get("[[...]]")._smoosh(e+"[[..."+this.optionalRestSlugName+"]]/")),n}_insert(e,t,r){if(0===e.length){this.placeholder=!1;return}if(r)throw Error("Catch-all must be the last part of the URL.");let o=e[0];if(o.startsWith("[")&&o.endsWith("]")){let n=o.slice(1,-1),i=!1;if(n.startsWith("[")&&n.endsWith("]")&&(n=n.slice(1,-1),i=!0),n.startsWith("...")&&(n=n.substring(3),r=!0),n.startsWith("[")||n.endsWith("]"))throw Error("Segment names may not start or end with extra brackets ('"+n+"').");if(n.startsWith("."))throw Error("Segment names may not start with erroneous periods ('"+n+"').");function a(e,n){if(null!==e&&e!==n)throw Error("You cannot use different slug names for the same dynamic path ('"+e+"' !== '"+n+"').");t.forEach(e=>{if(e===n)throw Error('You cannot have the same slug name "'+n+'" repeat within a single dynamic path');if(e.replace(/\W/g,"")===o.replace(/\W/g,""))throw Error('You cannot have the slug names "'+e+'" and "'+n+'" differ only by non-word symbols within a single dynamic path')}),t.push(n)}if(r){if(i){if(null!=this.restSlugName)throw Error('You cannot use both an required and optional catch-all route at the same level ("[...'+this.restSlugName+']" and "'+e[0]+'" ).');a(this.optionalRestSlugName,n),this.optionalRestSlugName=n,o="[[...]]"}else{if(null!=this.optionalRestSlugName)throw Error('You cannot use both an optional and required catch-all route at the same level ("[[...'+this.optionalRestSlugName+']]" and "'+e[0]+'").');a(this.restSlugName,n),this.restSlugName=n,o="[...]"}}else{if(i)throw Error('Optional route parameters are not yet supported ("'+e[0]+'").');a(this.slugName,n),this.slugName=n,o="[]"}}this.children.has(o)||this.children.set(o,new n),this.children.get(o)._insert(e.slice(1),t,r)}constructor(){this.placeholder=!0,this.children=new Map,this.slugName=null,this.restSlugName=null,this.optionalRestSlugName=null}}function r(e){let t=new n;return e.forEach(e=>t.insert(e)),t.smoosh()}},6874:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{WEB_VITALS:function(){return n},execOnce:function(){return r},isAbsoluteUrl:function(){return a},getLocationOrigin:function(){return i},getURL:function(){return c},getDisplayName:function(){return l},isResSent:function(){return s},normalizeRepeatedSlashes:function(){return u},loadGetInitialProps:function(){return d},SP:function(){return f},ST:function(){return p},DecodeError:function(){return m},NormalizeError:function(){return g},PageNotFoundError:function(){return h},MissingStaticPage:function(){return v},MiddlewareNotFoundError:function(){return b},stringifyError:function(){return y}});let n=["CLS","FCP","FID","INP","LCP","TTFB"];function r(e){let t,n=!1;return function(){for(var r=arguments.length,o=Array(r),a=0;ao.test(e);function i(){let{protocol:e,hostname:t,port:n}=window.location;return e+"//"+t+(n?":"+n:"")}function c(){let{href:e}=window.location,t=i();return e.substring(t.length)}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function s(e){return e.finished||e.headersSent}function u(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function d(e,t){let n=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await d(t.Component,t.ctx)}:{};let r=await e.getInitialProps(t);if(n&&s(n))return r;if(!r)throw Error('"'+l(e)+'.getInitialProps()" should resolve to an object. But found "'+r+'" instead.');return r}let f="undefined"!=typeof performance,p=f&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class m extends Error{}class g extends Error{}class h extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class v extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class b extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function y(e){return JSON.stringify({message:e.message,stack:e.stack})}},6570:function(e,t,n){n.d(t,{gN:function(){return eh},zb:function(){return E},RV:function(){return eZ},aV:function(){return ev},ZM:function(){return C},ZP:function(){return eN},cI:function(){return eS},qo:function(){return ej}});var r,o=n(4090),a=n(2110),i=n(6787),c=n(6926),l=n(4902),s=n(5239),u=n(3787),d=n(7365),f=n(5127),p=n(4951),m=n(7478),g=n(5430),h=n(833),v=n(3054),b=n(2536),y=n(3850),x="RC_FORM_INTERNAL_HOOKS",w=function(){(0,y.ZP)(!1,"Can not find FormContext. Please make sure you wrap Field under Form.")},E=o.createContext({getFieldValue:w,getFieldsValue:w,getFieldError:w,getFieldWarning:w,getFieldsError:w,isFieldsTouched:w,isFieldTouched:w,isFieldValidating:w,isFieldsValidating:w,resetFields:w,setFields:w,setFieldValue:w,setFieldsValue:w,validateFields:w,submit:w,getInternalHooks:function(){return w(),{dispatch:w,initEntityValue:w,registerField:w,useSubscribe:w,setInitialValues:w,destroyForm:w,setCallbacks:w,registerWatch:w,getFields:w,setValidateMessages:w,setPreserve:w,getInitialValue:w}}}),C=o.createContext(null);function S(e){return null==e?[]:Array.isArray(e)?e:[e]}var O=n(9079);function Z(){return(Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t1?t-1:0),r=1;r=a)return e;switch(e){case"%s":return String(n[o++]);case"%d":return Number(n[o++]);case"%j":try{return JSON.stringify(n[o++])}catch(e){return"[Circular]"}break;default:return e}}):e}function T(e,t){return!!(null==e||"array"===t&&Array.isArray(e)&&!e.length)||("string"===t||"url"===t||"hex"===t||"email"===t||"date"===t||"pattern"===t)&&"string"==typeof e&&!e}function A(e,t,n){var r=0,o=e.length;!function a(i){if(i&&i.length){n(i);return}var c=r;r+=1,c()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},D={integer:function(e){return D.number(e)&&parseInt(e,10)===e},float:function(e){return D.number(e)&&!D.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return new RegExp(e),!0}catch(e){return!1}},date:function(e){return"function"==typeof e.getTime&&"function"==typeof e.getMonth&&"function"==typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"==typeof e},object:function(e){return"object"==typeof e&&!D.array(e)},method:function(e){return"function"==typeof e},email:function(e){return"string"==typeof e&&e.length<=320&&!!e.match(H.email)},url:function(e){return"string"==typeof e&&e.length<=2048&&!!e.match(B())},hex:function(e){return"string"==typeof e&&!!e.match(H.hex)}},W="enum",V={required:_,whitespace:function(e,t,n,r,o){(/^\s+$/.test(t)||""===t)&&r.push(I(o.messages.whitespace,e.fullField))},type:function(e,t,n,r,o){if(e.required&&void 0===t){_(e,t,n,r,o);return}var a=e.type;["integer","float","array","regexp","object","method","email","number","date","url","hex"].indexOf(a)>-1?D[a](t)||r.push(I(o.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(I(o.messages.types[a],e.fullField,e.type))},range:function(e,t,n,r,o){var a="number"==typeof e.len,i="number"==typeof e.min,c="number"==typeof e.max,l=t,s=null,u="number"==typeof t,d="string"==typeof t,f=Array.isArray(t);if(u?s="number":d?s="string":f&&(s="array"),!s)return!1;f&&(l=t.length),d&&(l=t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length),a?l!==e.len&&r.push(I(o.messages[s].len,e.fullField,e.len)):i&&!c&&le.max?r.push(I(o.messages[s].max,e.fullField,e.max)):i&&c&&(le.max)&&r.push(I(o.messages[s].range,e.fullField,e.min,e.max))},enum:function(e,t,n,r,o){e[W]=Array.isArray(e[W])?e[W]:[],-1===e[W].indexOf(t)&&r.push(I(o.messages[W],e.fullField,e[W].join(", ")))},pattern:function(e,t,n,r,o){!e.pattern||(e.pattern instanceof RegExp?(e.pattern.lastIndex=0,e.pattern.test(t)||r.push(I(o.messages.pattern.mismatch,e.fullField,t,e.pattern))):"string"!=typeof e.pattern||new RegExp(e.pattern).test(t)||r.push(I(o.messages.pattern.mismatch,e.fullField,t,e.pattern)))}},q=function(e,t,n,r,o){var a=e.type,i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,a)&&!e.required)return n();V.required(e,t,r,i,o,a),T(t,a)||V.type(e,t,r,i,o)}n(i)},X={string:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,"string")&&!e.required)return n();V.required(e,t,r,a,o,"string"),T(t,"string")||(V.type(e,t,r,a,o),V.range(e,t,r,a,o),V.pattern(e,t,r,a,o),!0===e.whitespace&&V.whitespace(e,t,r,a,o))}n(a)},method:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.type(e,t,r,a,o)}n(a)},number:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(""===t&&(t=void 0),T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},boolean:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.type(e,t,r,a,o)}n(a)},regexp:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),T(t)||V.type(e,t,r,a,o)}n(a)},integer:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},float:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},array:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(null==t&&!e.required)return n();V.required(e,t,r,a,o,"array"),null!=t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},object:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.type(e,t,r,a,o)}n(a)},enum:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.enum(e,t,r,a,o)}n(a)},pattern:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,"string")&&!e.required)return n();V.required(e,t,r,a,o),T(t,"string")||V.pattern(e,t,r,a,o)}n(a)},date:function(e,t,n,r,o){var a,i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,"date")&&!e.required)return n();V.required(e,t,r,i,o),!T(t,"date")&&(a=t instanceof Date?t:new Date(t),V.type(e,a,r,i,o),a&&V.range(e,a.getTime(),r,i,o))}n(i)},url:q,hex:q,email:q,required:function(e,t,n,r,o){var a=[],i=Array.isArray(t)?"array":typeof t;V.required(e,t,r,a,o,i),n(a)},any:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o)}n(a)}};function G(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var U=G(),K=function(){function e(e){this.rules=null,this._messages=U,this.define(e)}var t=e.prototype;return t.define=function(e){var t=this;if(!e)throw Error("Cannot configure a schema with no rules");if("object"!=typeof e||Array.isArray(e))throw Error("Rules must be an object");this.rules={},Object.keys(e).forEach(function(n){var r=e[n];t.rules[n]=Array.isArray(r)?r:[r]})},t.messages=function(e){return e&&(this._messages=L(G(),e)),this._messages},t.validate=function(t,n,r){var o=this;void 0===n&&(n={}),void 0===r&&(r=function(){});var a=t,i=n,c=r;if("function"==typeof i&&(c=i,i={}),!this.rules||0===Object.keys(this.rules).length)return c&&c(null,a),Promise.resolve(a);if(i.messages){var l=this.messages();l===U&&(l=G()),L(l,i.messages),i.messages=l}else i.messages=this.messages();var s={};(i.keys||Object.keys(this.rules)).forEach(function(e){var n=o.rules[e],r=a[e];n.forEach(function(n){var i=n;"function"==typeof i.transform&&(a===t&&(a=Z({},a)),r=a[e]=i.transform(r)),(i="function"==typeof i?{validator:i}:Z({},i)).validator=o.getValidationMethod(i),i.validator&&(i.field=e,i.fullField=i.fullField||e,i.type=o.getType(i),s[e]=s[e]||[],s[e].push({rule:i,value:r,source:a,field:e}))})});var u={};return function(e,t,n,r,o){if(t.first){var a=new Promise(function(t,a){var i;A((i=[],Object.keys(e).forEach(function(t){i.push.apply(i,e[t]||[])}),i),n,function(e){return r(e),e.length?a(new F(e,N(e))):t(o)})});return a.catch(function(e){return e}),a}var i=!0===t.firstFields?Object.keys(e):t.firstFields||[],c=Object.keys(e),l=c.length,s=0,u=[],d=new Promise(function(t,a){var d=function(e){if(u.push.apply(u,e),++s===l)return r(u),u.length?a(new F(u,N(u))):t(o)};c.length||(r(u),t(o)),c.forEach(function(t){var r=e[t];-1!==i.indexOf(t)?A(r,n,d):function(e,t,n){var r=[],o=0,a=e.length;function i(e){r.push.apply(r,e||[]),++o===a&&n(r)}e.forEach(function(e){t(e,i)})}(r,n,d)})});return d.catch(function(e){return e}),d}(s,i,function(t,n){var r,o=t.rule,c=("object"===o.type||"array"===o.type)&&("object"==typeof o.fields||"object"==typeof o.defaultField);function l(e,t){return Z({},t,{fullField:o.fullField+"."+e,fullFields:o.fullFields?[].concat(o.fullFields,[e]):[e]})}function s(r){void 0===r&&(r=[]);var s=Array.isArray(r)?r:[r];!i.suppressWarning&&s.length&&e.warning("async-validator:",s),s.length&&void 0!==o.message&&(s=[].concat(o.message));var d=s.map(z(o,a));if(i.first&&d.length)return u[o.field]=1,n(d);if(c){if(o.required&&!t.value)return void 0!==o.message?d=[].concat(o.message).map(z(o,a)):i.error&&(d=[i.error(o,I(i.messages.required,o.field))]),n(d);var f={};o.defaultField&&Object.keys(t.value).map(function(e){f[e]=o.defaultField});var p={};Object.keys(f=Z({},f,t.rule.fields)).forEach(function(e){var t=f[e],n=Array.isArray(t)?t:[t];p[e]=n.map(l.bind(null,e))});var m=new e(p);m.messages(i.messages),t.rule.options&&(t.rule.options.messages=i.messages,t.rule.options.error=i.error),m.validate(t.value,t.rule.options||i,function(e){var t=[];d&&d.length&&t.push.apply(t,d),e&&e.length&&t.push.apply(t,e),n(t.length?t:null)})}else n(d)}if(c=c&&(o.required||!o.required&&t.value),o.field=t.field,o.asyncValidator)r=o.asyncValidator(o,t.value,s,t.source,i);else if(o.validator){try{r=o.validator(o,t.value,s,t.source,i)}catch(e){null==console.error||console.error(e),i.suppressValidatorError||setTimeout(function(){throw e},0),s(e.message)}!0===r?s():!1===r?s("function"==typeof o.message?o.message(o.fullField||o.field):o.message||(o.fullField||o.field)+" fails"):r instanceof Array?s(r):r instanceof Error&&s(r.message)}r&&r.then&&r.then(function(){return s()},function(e){return s(e)})},function(e){!function(e){for(var t=[],n={},r=0;r2&&void 0!==arguments[2]&&arguments[2];return e&&e.some(function(e){return es(t,e,n)})}function es(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return!!e&&!!t&&(!!n||e.length===t.length)&&t.every(function(t,n){return e[n]===t})}function eu(e){var t=arguments.length<=1?void 0:arguments[1];return t&&t.target&&"object"===(0,eo.Z)(t.target)&&e in t.target?t.target[e]:t}function ed(e,t,n){var r=e.length;if(t<0||t>=r||n<0||n>=r)return e;var o=e[t],a=t-n;return a>0?[].concat((0,u.Z)(e.slice(0,n)),[o],(0,u.Z)(e.slice(n,t)),(0,u.Z)(e.slice(t+1,r))):a<0?[].concat((0,u.Z)(e.slice(0,t)),(0,u.Z)(e.slice(t+1,n+1)),[o],(0,u.Z)(e.slice(n+1,r))):e}var ef=["name"],ep=[];function em(e,t,n,r,o,a){return"function"==typeof e?e(t,n,"source"in a?{source:a.source}:{}):r!==o}var eg=function(e){(0,m.Z)(n,e);var t=(0,g.Z)(n);function n(e){var r;return(0,d.Z)(this,n),r=t.call(this,e),(0,h.Z)((0,p.Z)(r),"state",{resetCount:0}),(0,h.Z)((0,p.Z)(r),"cancelRegisterFunc",null),(0,h.Z)((0,p.Z)(r),"mounted",!1),(0,h.Z)((0,p.Z)(r),"touched",!1),(0,h.Z)((0,p.Z)(r),"dirty",!1),(0,h.Z)((0,p.Z)(r),"validatePromise",void 0),(0,h.Z)((0,p.Z)(r),"prevValidating",void 0),(0,h.Z)((0,p.Z)(r),"errors",ep),(0,h.Z)((0,p.Z)(r),"warnings",ep),(0,h.Z)((0,p.Z)(r),"cancelRegister",function(){var e=r.props,t=e.preserve,n=e.isListField,o=e.name;r.cancelRegisterFunc&&r.cancelRegisterFunc(n,t,ei(o)),r.cancelRegisterFunc=null}),(0,h.Z)((0,p.Z)(r),"getNamePath",function(){var e=r.props,t=e.name,n=e.fieldContext.prefixName;return void 0!==t?[].concat((0,u.Z)(void 0===n?[]:n),(0,u.Z)(t)):[]}),(0,h.Z)((0,p.Z)(r),"getRules",function(){var e=r.props,t=e.rules,n=e.fieldContext;return(void 0===t?[]:t).map(function(e){return"function"==typeof e?e(n):e})}),(0,h.Z)((0,p.Z)(r),"refresh",function(){r.mounted&&r.setState(function(e){return{resetCount:e.resetCount+1}})}),(0,h.Z)((0,p.Z)(r),"metaCache",null),(0,h.Z)((0,p.Z)(r),"triggerMetaEvent",function(e){var t=r.props.onMetaChange;if(t){var n=(0,s.Z)((0,s.Z)({},r.getMeta()),{},{destroy:e});(0,b.Z)(r.metaCache,n)||t(n),r.metaCache=n}else r.metaCache=null}),(0,h.Z)((0,p.Z)(r),"onStoreChange",function(e,t,n){var o=r.props,a=o.shouldUpdate,i=o.dependencies,c=void 0===i?[]:i,l=o.onReset,s=n.store,u=r.getNamePath(),d=r.getValue(e),f=r.getValue(s),p=t&&el(t,u);switch("valueUpdate"===n.type&&"external"===n.source&&d!==f&&(r.touched=!0,r.dirty=!0,r.validatePromise=null,r.errors=ep,r.warnings=ep,r.triggerMetaEvent()),n.type){case"reset":if(!t||p){r.touched=!1,r.dirty=!1,r.validatePromise=void 0,r.errors=ep,r.warnings=ep,r.triggerMetaEvent(),null==l||l(),r.refresh();return}break;case"remove":if(a){r.reRender();return}break;case"setField":var m=n.data;if(p){"touched"in m&&(r.touched=m.touched),"validating"in m&&!("originRCField"in m)&&(r.validatePromise=m.validating?Promise.resolve([]):null),"errors"in m&&(r.errors=m.errors||ep),"warnings"in m&&(r.warnings=m.warnings||ep),r.dirty=!0,r.triggerMetaEvent(),r.reRender();return}if("value"in m&&el(t,u,!0)||a&&!u.length&&em(a,e,s,d,f,n)){r.reRender();return}break;case"dependenciesUpdate":if(c.map(ei).some(function(e){return el(n.relatedFields,e)})){r.reRender();return}break;default:if(p||(!c.length||u.length||a)&&em(a,e,s,d,f,n)){r.reRender();return}}!0===a&&r.reRender()}),(0,h.Z)((0,p.Z)(r),"validateRules",function(e){var t=r.getNamePath(),n=r.getValue(),o=e||{},a=o.triggerName,i=o.validateOnly,d=Promise.resolve().then((0,l.Z)((0,c.Z)().mark(function o(){var i,f,p,m,g,h,v;return(0,c.Z)().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(r.mounted){o.next=2;break}return o.abrupt("return",[]);case 2:if(p=void 0!==(f=(i=r.props).validateFirst)&&f,m=i.messageVariables,g=i.validateDebounce,h=r.getRules(),a&&(h=h.filter(function(e){return e}).filter(function(e){var t=e.validateTrigger;return!t||S(t).includes(a)})),!(g&&a)){o.next=10;break}return o.next=8,new Promise(function(e){setTimeout(e,g)});case 8:if(!(r.validatePromise!==d)){o.next=10;break}return o.abrupt("return",[]);case 10:return(v=function(e,t,n,r,o,a){var i,u,d=e.join("."),f=n.map(function(e,t){var n=e.validator,r=(0,s.Z)((0,s.Z)({},e),{},{ruleIndex:t});return n&&(r.validator=function(e,t,r){var o=!1,a=n(e,t,function(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:ep;if(r.validatePromise===d){r.validatePromise=null;var t,n=[],o=[];null===(t=e.forEach)||void 0===t||t.call(e,function(e){var t=e.rule.warningOnly,r=e.errors,a=void 0===r?ep:r;t?o.push.apply(o,(0,u.Z)(a)):n.push.apply(n,(0,u.Z)(a))}),r.errors=n,r.warnings=o,r.triggerMetaEvent(),r.reRender()}}),o.abrupt("return",v);case 13:case"end":return o.stop()}},o)})));return void 0!==i&&i||(r.validatePromise=d,r.dirty=!0,r.errors=ep,r.warnings=ep,r.triggerMetaEvent(),r.reRender()),d}),(0,h.Z)((0,p.Z)(r),"isFieldValidating",function(){return!!r.validatePromise}),(0,h.Z)((0,p.Z)(r),"isFieldTouched",function(){return r.touched}),(0,h.Z)((0,p.Z)(r),"isFieldDirty",function(){return!!r.dirty||void 0!==r.props.initialValue||void 0!==(0,r.props.fieldContext.getInternalHooks(x).getInitialValue)(r.getNamePath())}),(0,h.Z)((0,p.Z)(r),"getErrors",function(){return r.errors}),(0,h.Z)((0,p.Z)(r),"getWarnings",function(){return r.warnings}),(0,h.Z)((0,p.Z)(r),"isListField",function(){return r.props.isListField}),(0,h.Z)((0,p.Z)(r),"isList",function(){return r.props.isList}),(0,h.Z)((0,p.Z)(r),"isPreserve",function(){return r.props.preserve}),(0,h.Z)((0,p.Z)(r),"getMeta",function(){return r.prevValidating=r.isFieldValidating(),{touched:r.isFieldTouched(),validating:r.prevValidating,errors:r.errors,warnings:r.warnings,name:r.getNamePath(),validated:null===r.validatePromise}}),(0,h.Z)((0,p.Z)(r),"getOnlyChild",function(e){if("function"==typeof e){var t=r.getMeta();return(0,s.Z)((0,s.Z)({},r.getOnlyChild(e(r.getControlled(),t,r.props.fieldContext))),{},{isFunction:!0})}var n=(0,v.Z)(e);return 1===n.length&&o.isValidElement(n[0])?{child:n[0],isFunction:!1}:{child:n,isFunction:!1}}),(0,h.Z)((0,p.Z)(r),"getValue",function(e){var t=r.props.fieldContext.getFieldsValue,n=r.getNamePath();return(0,ea.Z)(e||t(!0),n)}),(0,h.Z)((0,p.Z)(r),"getControlled",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=r.props,n=t.trigger,o=t.validateTrigger,a=t.getValueFromEvent,i=t.normalize,c=t.valuePropName,l=t.getValueProps,u=t.fieldContext,d=void 0!==o?o:u.validateTrigger,f=r.getNamePath(),p=u.getInternalHooks,m=u.getFieldsValue,g=p(x).dispatch,v=r.getValue(),b=l||function(e){return(0,h.Z)({},c,e)},y=e[n],w=(0,s.Z)((0,s.Z)({},e),b(v));return w[n]=function(){r.touched=!0,r.dirty=!0,r.triggerMetaEvent();for(var e,t=arguments.length,n=Array(t),o=0;o=0&&t<=n.length?(f.keys=[].concat((0,u.Z)(f.keys.slice(0,t)),[f.id],(0,u.Z)(f.keys.slice(t))),o([].concat((0,u.Z)(n.slice(0,t)),[e],(0,u.Z)(n.slice(t))))):(f.keys=[].concat((0,u.Z)(f.keys),[f.id]),o([].concat((0,u.Z)(n),[e]))),f.id+=1},remove:function(e){var t=i(),n=new Set(Array.isArray(e)?e:[e]);n.size<=0||(f.keys=f.keys.filter(function(e,t){return!n.has(t)}),o(t.filter(function(e,t){return!n.has(t)})))},move:function(e,t){if(e!==t){var n=i();e<0||e>=n.length||t<0||t>=n.length||(f.keys=ed(f.keys,e,t),o(ed(n,e,t)))}}},t)})))},eb=n(406),ey="__@field_split__";function ex(e){return e.map(function(e){return"".concat((0,eo.Z)(e),":").concat(e)}).join(ey)}var ew=function(){function e(){(0,d.Z)(this,e),(0,h.Z)(this,"kvs",new Map)}return(0,f.Z)(e,[{key:"set",value:function(e,t){this.kvs.set(ex(e),t)}},{key:"get",value:function(e){return this.kvs.get(ex(e))}},{key:"update",value:function(e,t){var n=t(this.get(e));n?this.set(e,n):this.delete(e)}},{key:"delete",value:function(e){this.kvs.delete(ex(e))}},{key:"map",value:function(e){return(0,u.Z)(this.kvs.entries()).map(function(t){var n=(0,eb.Z)(t,2),r=n[0],o=n[1];return e({key:r.split(ey).map(function(e){var t=e.match(/^([^:]*):(.*)$/),n=(0,eb.Z)(t,3),r=n[1],o=n[2];return"number"===r?Number(o):o}),value:o})})}},{key:"toJSON",value:function(){var e={};return this.map(function(t){var n=t.key,r=t.value;return e[n.join(".")]=r,null}),e}}]),e}(),eE=["name"],eC=(0,f.Z)(function e(t){var n=this;(0,d.Z)(this,e),(0,h.Z)(this,"formHooked",!1),(0,h.Z)(this,"forceRootUpdate",void 0),(0,h.Z)(this,"subscribable",!0),(0,h.Z)(this,"store",{}),(0,h.Z)(this,"fieldEntities",[]),(0,h.Z)(this,"initialValues",{}),(0,h.Z)(this,"callbacks",{}),(0,h.Z)(this,"validateMessages",null),(0,h.Z)(this,"preserve",null),(0,h.Z)(this,"lastValidatePromise",null),(0,h.Z)(this,"getForm",function(){return{getFieldValue:n.getFieldValue,getFieldsValue:n.getFieldsValue,getFieldError:n.getFieldError,getFieldWarning:n.getFieldWarning,getFieldsError:n.getFieldsError,isFieldsTouched:n.isFieldsTouched,isFieldTouched:n.isFieldTouched,isFieldValidating:n.isFieldValidating,isFieldsValidating:n.isFieldsValidating,resetFields:n.resetFields,setFields:n.setFields,setFieldValue:n.setFieldValue,setFieldsValue:n.setFieldsValue,validateFields:n.validateFields,submit:n.submit,_init:!0,getInternalHooks:n.getInternalHooks}}),(0,h.Z)(this,"getInternalHooks",function(e){return e===x?(n.formHooked=!0,{dispatch:n.dispatch,initEntityValue:n.initEntityValue,registerField:n.registerField,useSubscribe:n.useSubscribe,setInitialValues:n.setInitialValues,destroyForm:n.destroyForm,setCallbacks:n.setCallbacks,setValidateMessages:n.setValidateMessages,getFields:n.getFields,setPreserve:n.setPreserve,getInitialValue:n.getInitialValue,registerWatch:n.registerWatch}):((0,y.ZP)(!1,"`getInternalHooks` is internal usage. Should not call directly."),null)}),(0,h.Z)(this,"useSubscribe",function(e){n.subscribable=e}),(0,h.Z)(this,"prevWithoutPreserves",null),(0,h.Z)(this,"setInitialValues",function(e,t){if(n.initialValues=e||{},t){var r,o=(0,Q.T)(e,n.store);null===(r=n.prevWithoutPreserves)||void 0===r||r.map(function(t){var n=t.key;o=(0,Q.Z)(o,n,(0,ea.Z)(e,n))}),n.prevWithoutPreserves=null,n.updateStore(o)}}),(0,h.Z)(this,"destroyForm",function(){var e=new ew;n.getFieldEntities(!0).forEach(function(t){n.isMergedPreserve(t.isPreserve())||e.set(t.getNamePath(),!0)}),n.prevWithoutPreserves=e}),(0,h.Z)(this,"getInitialValue",function(e){var t=(0,ea.Z)(n.initialValues,e);return e.length?(0,Q.T)(t):t}),(0,h.Z)(this,"setCallbacks",function(e){n.callbacks=e}),(0,h.Z)(this,"setValidateMessages",function(e){n.validateMessages=e}),(0,h.Z)(this,"setPreserve",function(e){n.preserve=e}),(0,h.Z)(this,"watchList",[]),(0,h.Z)(this,"registerWatch",function(e){return n.watchList.push(e),function(){n.watchList=n.watchList.filter(function(t){return t!==e})}}),(0,h.Z)(this,"notifyWatch",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(n.watchList.length){var t=n.getFieldsValue(),r=n.getFieldsValue(!0);n.watchList.forEach(function(n){n(t,r,e)})}}),(0,h.Z)(this,"timeoutId",null),(0,h.Z)(this,"warningUnhooked",function(){}),(0,h.Z)(this,"updateStore",function(e){n.store=e}),(0,h.Z)(this,"getFieldEntities",function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e?n.fieldEntities.filter(function(e){return e.getNamePath().length}):n.fieldEntities}),(0,h.Z)(this,"getFieldsMap",function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=new ew;return n.getFieldEntities(e).forEach(function(e){var n=e.getNamePath();t.set(n,e)}),t}),(0,h.Z)(this,"getFieldEntitiesForNamePathList",function(e){if(!e)return n.getFieldEntities(!0);var t=n.getFieldsMap(!0);return e.map(function(e){var n=ei(e);return t.get(n)||{INVALIDATE_NAME_PATH:ei(e)}})}),(0,h.Z)(this,"getFieldsValue",function(e,t){if(n.warningUnhooked(),!0===e||Array.isArray(e)?(r=e,o=t):e&&"object"===(0,eo.Z)(e)&&(a=e.strict,o=e.filter),!0===r&&!o)return n.store;var r,o,a,i=n.getFieldEntitiesForNamePathList(Array.isArray(r)?r:null),c=[];return i.forEach(function(e){var t,n,i,l="INVALIDATE_NAME_PATH"in e?e.INVALIDATE_NAME_PATH:e.getNamePath();if(a){if(null!==(i=e.isList)&&void 0!==i&&i.call(e))return}else if(!r&&null!==(t=(n=e).isListField)&&void 0!==t&&t.call(n))return;if(o){var s="getMeta"in e?e.getMeta():null;o(s)&&c.push(l)}else c.push(l)}),ec(n.store,c.map(ei))}),(0,h.Z)(this,"getFieldValue",function(e){n.warningUnhooked();var t=ei(e);return(0,ea.Z)(n.store,t)}),(0,h.Z)(this,"getFieldsError",function(e){return n.warningUnhooked(),n.getFieldEntitiesForNamePathList(e).map(function(t,n){return!t||"INVALIDATE_NAME_PATH"in t?{name:ei(e[n]),errors:[],warnings:[]}:{name:t.getNamePath(),errors:t.getErrors(),warnings:t.getWarnings()}})}),(0,h.Z)(this,"getFieldError",function(e){n.warningUnhooked();var t=ei(e);return n.getFieldsError([t])[0].errors}),(0,h.Z)(this,"getFieldWarning",function(e){n.warningUnhooked();var t=ei(e);return n.getFieldsError([t])[0].warnings}),(0,h.Z)(this,"isFieldsTouched",function(){n.warningUnhooked();for(var e,t=arguments.length,r=Array(t),o=0;o0&&void 0!==arguments[0]?arguments[0]:{},r=new ew,o=n.getFieldEntities(!0);o.forEach(function(e){var t=e.props.initialValue,n=e.getNamePath();if(void 0!==t){var o=r.get(n)||new Set;o.add({entity:e,value:t}),r.set(n,o)}}),t.entities?e=t.entities:t.namePathList?(e=[],t.namePathList.forEach(function(t){var n,o=r.get(t);o&&(n=e).push.apply(n,(0,u.Z)((0,u.Z)(o).map(function(e){return e.entity})))})):e=o,function(e){e.forEach(function(e){if(void 0!==e.props.initialValue){var o=e.getNamePath();if(void 0!==n.getInitialValue(o))(0,y.ZP)(!1,"Form already set 'initialValues' with path '".concat(o.join("."),"'. Field can not overwrite it."));else{var a=r.get(o);if(a&&a.size>1)(0,y.ZP)(!1,"Multiple Field with path '".concat(o.join("."),"' set 'initialValue'. Can not decide which one to pick."));else if(a){var i=n.getFieldValue(o);e.isListField()||t.skipExist&&void 0!==i||n.updateStore((0,Q.Z)(n.store,o,(0,u.Z)(a)[0].value))}}}})}(e)}),(0,h.Z)(this,"resetFields",function(e){n.warningUnhooked();var t=n.store;if(!e){n.updateStore((0,Q.T)(n.initialValues)),n.resetWithFieldInitialValue(),n.notifyObservers(t,null,{type:"reset"}),n.notifyWatch();return}var r=e.map(ei);r.forEach(function(e){var t=n.getInitialValue(e);n.updateStore((0,Q.Z)(n.store,e,t))}),n.resetWithFieldInitialValue({namePathList:r}),n.notifyObservers(t,r,{type:"reset"}),n.notifyWatch(r)}),(0,h.Z)(this,"setFields",function(e){n.warningUnhooked();var t=n.store,r=[];e.forEach(function(e){var o=e.name,a=(0,i.Z)(e,eE),c=ei(o);r.push(c),"value"in a&&n.updateStore((0,Q.Z)(n.store,c,a.value)),n.notifyObservers(t,[c],{type:"setField",data:e})}),n.notifyWatch(r)}),(0,h.Z)(this,"getFields",function(){return n.getFieldEntities(!0).map(function(e){var t=e.getNamePath(),r=e.getMeta(),o=(0,s.Z)((0,s.Z)({},r),{},{name:t,value:n.getFieldValue(t)});return Object.defineProperty(o,"originRCField",{value:!0}),o})}),(0,h.Z)(this,"initEntityValue",function(e){var t=e.props.initialValue;if(void 0!==t){var r=e.getNamePath();void 0===(0,ea.Z)(n.store,r)&&n.updateStore((0,Q.Z)(n.store,r,t))}}),(0,h.Z)(this,"isMergedPreserve",function(e){var t=void 0!==e?e:n.preserve;return null==t||t}),(0,h.Z)(this,"registerField",function(e){n.fieldEntities.push(e);var t=e.getNamePath();if(n.notifyWatch([t]),void 0!==e.props.initialValue){var r=n.store;n.resetWithFieldInitialValue({entities:[e],skipExist:!0}),n.notifyObservers(r,[e.getNamePath()],{type:"valueUpdate",source:"internal"})}return function(r,o){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(n.fieldEntities=n.fieldEntities.filter(function(t){return t!==e}),!n.isMergedPreserve(o)&&(!r||a.length>1)){var i=r?void 0:n.getInitialValue(t);if(t.length&&n.getFieldValue(t)!==i&&n.fieldEntities.every(function(e){return!es(e.getNamePath(),t)})){var c=n.store;n.updateStore((0,Q.Z)(c,t,i,!0)),n.notifyObservers(c,[t],{type:"remove"}),n.triggerDependenciesUpdate(c,t)}}n.notifyWatch([t])}}),(0,h.Z)(this,"dispatch",function(e){switch(e.type){case"updateValue":var t=e.namePath,r=e.value;n.updateValue(t,r);break;case"validateField":var o=e.namePath,a=e.triggerName;n.validateFields([o],{triggerName:a})}}),(0,h.Z)(this,"notifyObservers",function(e,t,r){if(n.subscribable){var o=(0,s.Z)((0,s.Z)({},r),{},{store:n.getFieldsValue(!0)});n.getFieldEntities().forEach(function(n){(0,n.onStoreChange)(e,t,o)})}else n.forceRootUpdate()}),(0,h.Z)(this,"triggerDependenciesUpdate",function(e,t){var r=n.getDependencyChildrenFields(t);return r.length&&n.validateFields(r),n.notifyObservers(e,r,{type:"dependenciesUpdate",relatedFields:[t].concat((0,u.Z)(r))}),r}),(0,h.Z)(this,"updateValue",function(e,t){var r=ei(e),o=n.store;n.updateStore((0,Q.Z)(n.store,r,t)),n.notifyObservers(o,[r],{type:"valueUpdate",source:"internal"}),n.notifyWatch([r]);var a=n.triggerDependenciesUpdate(o,r),i=n.callbacks.onValuesChange;i&&i(ec(n.store,[r]),n.getFieldsValue()),n.triggerOnFieldsChange([r].concat((0,u.Z)(a)))}),(0,h.Z)(this,"setFieldsValue",function(e){n.warningUnhooked();var t=n.store;if(e){var r=(0,Q.T)(n.store,e);n.updateStore(r)}n.notifyObservers(t,null,{type:"valueUpdate",source:"external"}),n.notifyWatch()}),(0,h.Z)(this,"setFieldValue",function(e,t){n.setFields([{name:e,value:t}])}),(0,h.Z)(this,"getDependencyChildrenFields",function(e){var t=new Set,r=[],o=new ew;return n.getFieldEntities().forEach(function(e){(e.props.dependencies||[]).forEach(function(t){var n=ei(t);o.update(n,function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Set;return t.add(e),t})})}),function e(n){(o.get(n)||new Set).forEach(function(n){if(!t.has(n)){t.add(n);var o=n.getNamePath();n.isFieldDirty()&&o.length&&(r.push(o),e(o))}})}(e),r}),(0,h.Z)(this,"triggerOnFieldsChange",function(e,t){var r=n.callbacks.onFieldsChange;if(r){var o=n.getFields();if(t){var a=new ew;t.forEach(function(e){var t=e.name,n=e.errors;a.set(t,n)}),o.forEach(function(e){e.errors=a.get(e.name)||e.errors})}var i=o.filter(function(t){return el(e,t.name)});i.length&&r(i,o)}}),(0,h.Z)(this,"validateFields",function(e,t){n.warningUnhooked(),Array.isArray(e)||"string"==typeof e||"string"==typeof t?(i=e,c=t):c=e;var r,o,a,i,c,l=!!i,d=l?i.map(ei):[],f=[],p=String(Date.now()),m=new Set,g=c||{},h=g.recursive,v=g.dirty;n.getFieldEntities(!0).forEach(function(e){if(l||d.push(e.getNamePath()),e.props.rules&&e.props.rules.length&&(!v||e.isFieldDirty())){var t=e.getNamePath();if(m.add(t.join(p)),!l||el(d,t,h)){var r=e.validateRules((0,s.Z)({validateMessages:(0,s.Z)((0,s.Z)({},Y),n.validateMessages)},c));f.push(r.then(function(){return{name:t,errors:[],warnings:[]}}).catch(function(e){var n,r=[],o=[];return(null===(n=e.forEach)||void 0===n||n.call(e,function(e){var t=e.rule.warningOnly,n=e.errors;t?o.push.apply(o,(0,u.Z)(n)):r.push.apply(r,(0,u.Z)(n))}),r.length)?Promise.reject({name:t,errors:r,warnings:o}):{name:t,errors:r,warnings:o}}))}}});var b=(r=!1,o=f.length,a=[],f.length?new Promise(function(e,t){f.forEach(function(n,i){n.catch(function(e){return r=!0,e}).then(function(n){o-=1,a[i]=n,o>0||(r&&t(a),e(a))})})}):Promise.resolve([]));n.lastValidatePromise=b,b.catch(function(e){return e}).then(function(e){var t=e.map(function(e){return e.name});n.notifyObservers(n.store,t,{type:"validateFinish"}),n.triggerOnFieldsChange(t,e)});var y=b.then(function(){return n.lastValidatePromise===b?Promise.resolve(n.getFieldsValue(d)):Promise.reject([])}).catch(function(e){var t=e.filter(function(e){return e&&e.errors.length});return Promise.reject({values:n.getFieldsValue(d),errorFields:t,outOfDate:n.lastValidatePromise!==b})});y.catch(function(e){return e});var x=d.filter(function(e){return m.has(e.join(p))});return n.triggerOnFieldsChange(x),y}),(0,h.Z)(this,"submit",function(){n.warningUnhooked(),n.validateFields().then(function(e){var t=n.callbacks.onFinish;if(t)try{t(e)}catch(e){console.error(e)}}).catch(function(e){var t=n.callbacks.onFinishFailed;t&&t(e)})}),this.forceRootUpdate=t}),eS=function(e){var t=o.useRef(),n=o.useState({}),r=(0,eb.Z)(n,2)[1];if(!t.current){if(e)t.current=e;else{var a=new eC(function(){r({})});t.current=a.getForm()}}return[t.current]},eO=o.createContext({triggerFormChange:function(){},triggerFormFinish:function(){},registerForm:function(){},unregisterForm:function(){}}),eZ=function(e){var t=e.validateMessages,n=e.onFormChange,r=e.onFormFinish,a=e.children,i=o.useContext(eO),c=o.useRef({});return o.createElement(eO.Provider,{value:(0,s.Z)((0,s.Z)({},i),{},{validateMessages:(0,s.Z)((0,s.Z)({},i.validateMessages),t),triggerFormChange:function(e,t){n&&n(e,{changedFields:t,forms:c.current}),i.triggerFormChange(e,t)},triggerFormFinish:function(e,t){r&&r(e,{values:t,forms:c.current}),i.triggerFormFinish(e,t)},registerForm:function(e,t){e&&(c.current=(0,s.Z)((0,s.Z)({},c.current),{},(0,h.Z)({},e,t))),i.registerForm(e,t)},unregisterForm:function(e){var t=(0,s.Z)({},c.current);delete t[e],c.current=t,i.unregisterForm(e)}})},a)},ek=["name","initialValues","fields","form","preserve","children","component","validateMessages","validateTrigger","onValuesChange","onFieldsChange","onFinish","onFinishFailed"];function eR(e){try{return JSON.stringify(e)}catch(e){return Math.random()}}var eM=function(){},ej=function(){for(var e=arguments.length,t=Array(e),n=0;n1?t-1:0),o=1;oen;(0,s.useImperativeHandle)(t,function(){return{focus:q,blur:function(){var e;null===(e=V.current)||void 0===e||e.blur()},setSelectionRange:function(e,t,n){var r;null===(r=V.current)||void 0===r||r.setSelectionRange(e,t,n)},select:function(){var e;null===(e=V.current)||void 0===e||e.select()},input:V.current}}),(0,s.useEffect)(function(){D(function(e){return(!e||!O)&&e})},[O]);var ea=function(e,t,n){var r,o,a=t;if(!W.current&&et.exceedFormatter&&et.max&&et.strategy(t)>et.max)a=et.exceedFormatter(t,{max:et.max}),t!==a&&ee([(null===(r=V.current)||void 0===r?void 0:r.selectionStart)||0,(null===(o=V.current)||void 0===o?void 0:o.selectionEnd)||0]);else if("compositionEnd"===n.source)return;K(a),V.current&&(0,u.rJ)(V.current,e,c,a)};(0,s.useEffect)(function(){if(J){var e;null===(e=V.current)||void 0===e||e.setSelectionRange.apply(e,(0,f.Z)(J))}},[J]);var ei=eo&&"".concat(S,"-out-of-range");return s.createElement(d,(0,o.Z)({},L,{prefixCls:S,className:l()(k,ei),handleReset:function(e){K(""),q(),V.current&&(0,u.rJ)(V.current,e,c)},value:$,focused:H,triggerFocus:q,suffix:function(){var e=Number(en)>0;if(M||et.show){var t=et.showFormatter?et.showFormatter({value:$,count:er,maxLength:en}):"".concat(er).concat(e?" / ".concat(en):"");return s.createElement(s.Fragment,null,et.show&&s.createElement("span",{className:l()("".concat(S,"-show-count-suffix"),(0,a.Z)({},"".concat(S,"-show-count-has-suffix"),!!M),null==T?void 0:T.count),style:(0,r.Z)({},null==A?void 0:A.count)},t),M)}return null}(),disabled:O,classes:I,classNames:T,styles:A}),(n=(0,h.Z)(e,["prefixCls","onPressEnter","addonBefore","addonAfter","prefix","suffix","allowClear","defaultValue","showCount","count","classes","htmlSize","styles","classNames"]),s.createElement("input",(0,o.Z)({autoComplete:i},n,{onChange:function(e){ea(e,e.target.value,{source:"change"})},onFocus:function(e){D(!0),null==y||y(e)},onBlur:function(e){D(!1),null==x||x(e)},onKeyDown:function(e){w&&"Enter"===e.key&&w(e),null==E||E(e)},className:l()(S,(0,a.Z)({},"".concat(S,"-disabled"),O),null==T?void 0:T.input),style:null==A?void 0:A.input,ref:V,size:Z,type:void 0===N?"text":N,onCompositionStart:function(e){W.current=!0,null==F||F(e)},onCompositionEnd:function(e){W.current=!1,ea(e,e.currentTarget.value,{source:"compositionEnd"}),null==z||z(e)}}))))})},8002:function(e,t,n){function r(e){return!!(e.addonBefore||e.addonAfter)}function o(e){return!!(e.prefix||e.suffix||e.allowClear)}function a(e,t,n,r){if(n){var o=t;if("click"===t.type){var a=e.cloneNode(!0);o=Object.create(t,{target:{value:a},currentTarget:{value:a}}),a.value="",n(o);return}if("file"!==e.type&&void 0!==r){var i=e.cloneNode(!0);o=Object.create(t,{target:{value:i},currentTarget:{value:i}}),i.value=r,n(o);return}n(o)}}function i(e,t){if(e){e.focus(t);var n=(t||{}).cursor;if(n){var r=e.value.length;switch(n){case"start":e.setSelectionRange(0,0);break;case"end":e.setSelectionRange(r,r);break;default:e.setSelectionRange(0,r)}}}}n.d(t,{He:function(){return r},X3:function(){return o},nH:function(){return i},rJ:function(){return a}})},9367:function(e,t,n){n.d(t,{V4:function(){return eu},zt:function(){return x},ZP:function(){return ed}});var r,o,a,i,c,l=n(833),s=n(5239),u=n(406),d=n(6976),f=n(6480),p=n.n(f),m=n(7472),g=n(4084),h=n(4090),v=n(6787),b=["children"],y=h.createContext({});function x(e){var t=e.children,n=(0,v.Z)(e,b);return h.createElement(y.Provider,{value:n},t)}var w=n(7365),E=n(5127),C=n(7478),S=n(5430),O=function(e){(0,C.Z)(n,e);var t=(0,S.Z)(n);function n(){return(0,w.Z)(this,n),t.apply(this,arguments)}return(0,E.Z)(n,[{key:"render",value:function(){return this.props.children}}]),n}(h.Component),Z=n(9211),k="none",R="appear",M="enter",j="leave",P="none",N="prepare",I="start",T="active",A="prepared",F=n(2127);function z(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var L=(r=(0,F.Z)(),o=window,a={animationend:z("Animation","AnimationEnd"),transitionend:z("Transition","TransitionEnd")},!r||("AnimationEvent"in o||delete a.animationend.animation,"TransitionEvent"in o||delete a.transitionend.transition),a),_={};(0,F.Z)()&&(_=document.createElement("div").style);var B={};function H(e){if(B[e])return B[e];var t=L[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o0&&(clearTimeout(eg.current),eg.current=setTimeout(function(){eb({deadline:!0})},S))),eZ===A&&ev(),!0},a=(0,Z.Z)(P),c=(i=(0,u.Z)(a,2))[0],d=i[1],f=function(){var e=h.useRef(null);function t(){K.Z.cancel(e.current)}return h.useEffect(function(){return function(){t()}},[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var a=(0,K.Z)(function(){o<=1?r({isCanceled:function(){return a!==e.current}}):n(r,o-1)});e.current=a},t]}(),m=(p=(0,u.Z)(f,2))[0],g=p[1],v=e?$:Y,U(function(){if(c!==P&&"end"!==c){var e=v.indexOf(c),t=v[e+1],n=o(c);!1===n?d(t,!0):t&&m(function(e){function r(){e.isCanceled()||d(t,!0)}!0===n?r():Promise.resolve(n).then(r)})}},[el,c]),h.useEffect(function(){return function(){g()}},[]),[function(){d(N,!0)},c]),eS=(0,u.Z)(eC,2),eO=eS[0],eZ=eS[1],ek=Q(eZ);eh.current=ek,U(function(){ea(t);var n,r=em.current;em.current=!0,!r&&t&&w&&(n=R),r&&t&&y&&(n=M),(r&&!t&&C||!r&&O&&!t&&C)&&(n=j);var o=ew(n);n&&(e||o[N])?(es(n),eO()):es(k)},[t]),(0,h.useEffect)(function(){(el!==R||w)&&(el!==M||y)&&(el!==j||C)||es(k)},[w,y,C]),(0,h.useEffect)(function(){return function(){em.current=!1,clearTimeout(eg.current)}},[]);var eR=h.useRef(!1);(0,h.useEffect)(function(){eo&&(eR.current=!0),void 0!==eo&&el===k&&((eR.current||eo)&&(null==et||et(eo)),eR.current=!0)},[eo,el]);var eM=ef;return eE[N]&&eZ===I&&(eM=(0,s.Z)({transition:"none"},eM)),[el,eZ,eM,null!=eo?eo:t]}(w,r,function(){try{return E.current instanceof HTMLElement?E.current:(0,m.Z)(C.current)}catch(e){return null}},e),F=(0,u.Z)(S,4),z=F[0],L=F[1],_=F[2],B=F[3],H=h.useRef(B);B&&(H.current=!0);var D=h.useCallback(function(e){E.current=e,(0,g.mH)(t,e)},[t]),W=(0,s.Z)((0,s.Z)({},b),{},{visible:r});if(d){if(z===k)V=B?d((0,s.Z)({},W),D):!a&&H.current&&v?d((0,s.Z)((0,s.Z)({},W),{},{className:v}),D):!c&&(a||v)?null:d((0,s.Z)((0,s.Z)({},W),{},{style:{display:"none"}}),D);else{L===N?ee="prepare":Q(L)?ee="active":L===I&&(ee="start");var V,J,ee,et=G(f,"".concat(z,"-").concat(ee));V=d((0,s.Z)((0,s.Z)({},W),{},{className:p()(G(f,z),(J={},(0,l.Z)(J,et,et&&ee),(0,l.Z)(J,f,"string"==typeof f),J)),style:_}),D)}}else V=null;return h.isValidElement(V)&&(0,g.Yr)(V)&&!V.ref&&(V=h.cloneElement(V,{ref:D})),h.createElement(O,{ref:C},V)})).displayName="CSSMotion",c),ee=n(2110),et=n(4951),en="keep",er="remove",eo="removed";function ea(e){var t;return t=e&&"object"===(0,d.Z)(e)&&"key"in e?e:{key:e},(0,s.Z)((0,s.Z)({},t),{},{key:String(t.key)})}function ei(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.map(ea)}var ec=["component","children","onVisibleChanged","onAllRemoved"],el=["status"],es=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"],eu=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J,n=function(e){(0,C.Z)(r,e);var n=(0,S.Z)(r);function r(){var e;(0,w.Z)(this,r);for(var t=arguments.length,o=Array(t),a=0;a0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,a=ei(e),i=ei(t);a.forEach(function(e){for(var t=!1,a=r;a1}).forEach(function(e){(n=n.filter(function(t){var n=t.key,r=t.status;return n!==e||r!==er})).forEach(function(t){t.key===e&&(t.status=en)})}),n})(r,ei(n)).filter(function(e){var t=r.find(function(t){var n=t.key;return e.key===n});return!t||t.status!==eo||e.status!==er})}}}]),r}(h.Component);return(0,l.Z)(n,"defaultProps",{component:"div"}),n}(V),ed=J},6505:function(e,t,n){n.d(t,{Z:function(){return B}});var r=n(2110),o=n(4090),a=n(3054);n(3850);var i=n(5239),c=n(6976),l=n(7472),s=n(4084),u=o.createContext(null),d=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some(function(e,r){return e[0]===t&&(n=r,!0)}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n0},e.prototype.connect_=function(){f&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),h?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){f&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;g.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),b=function(e,t){for(var n=0,r=Object.keys(t);n0},e}(),R="undefined"!=typeof WeakMap?new WeakMap:new d,M=function e(t){if(!(this instanceof e))throw TypeError("Cannot call a class as a function.");if(!arguments.length)throw TypeError("1 argument required, but only 0 present.");var n=new k(t,v.getInstance(),this);R.set(this,n)};["observe","unobserve","disconnect"].forEach(function(e){M.prototype[e]=function(){var t;return(t=R.get(this))[e].apply(t,arguments)}});var j=void 0!==p.ResizeObserver?p.ResizeObserver:M,P=new Map,N=new j(function(e){e.forEach(function(e){var t,n=e.target;null===(t=P.get(n))||void 0===t||t.forEach(function(e){return e(n)})})}),I=n(7365),T=n(5127),A=n(7478),F=n(5430),z=function(e){(0,A.Z)(n,e);var t=(0,F.Z)(n);function n(){return(0,I.Z)(this,n),t.apply(this,arguments)}return(0,T.Z)(n,[{key:"render",value:function(){return this.props.children}}]),n}(o.Component),L=o.forwardRef(function(e,t){var n=e.children,r=e.disabled,a=o.useRef(null),d=o.useRef(null),f=o.useContext(u),p="function"==typeof n,m=p?n(a):n,g=o.useRef({width:-1,height:-1,offsetWidth:-1,offsetHeight:-1}),h=!p&&o.isValidElement(m)&&(0,s.Yr)(m),v=h?m.ref:null,b=(0,s.x1)(v,a),y=function(){var e;return(0,l.Z)(a.current)||(a.current&&"object"===(0,c.Z)(a.current)?(0,l.Z)(null===(e=a.current)||void 0===e?void 0:e.nativeElement):null)||(0,l.Z)(d.current)};o.useImperativeHandle(t,function(){return y()});var x=o.useRef(e);x.current=e;var w=o.useCallback(function(e){var t=x.current,n=t.onResize,r=t.data,o=e.getBoundingClientRect(),a=o.width,c=o.height,l=e.offsetWidth,s=e.offsetHeight,u=Math.floor(a),d=Math.floor(c);if(g.current.width!==u||g.current.height!==d||g.current.offsetWidth!==l||g.current.offsetHeight!==s){var p={width:u,height:d,offsetWidth:l,offsetHeight:s};g.current=p;var m=(0,i.Z)((0,i.Z)({},p),{},{offsetWidth:l===Math.round(a)?a:l,offsetHeight:s===Math.round(c)?c:s});null==f||f(m,e,r),n&&Promise.resolve().then(function(){n(m,e)})}},[]);return o.useEffect(function(){var e=y();return e&&!r&&(P.has(e)||(P.set(e,new Set),N.observe(e)),P.get(e).add(w)),function(){P.has(e)&&(P.get(e).delete(w),P.get(e).size||(N.unobserve(e),P.delete(e)))}},[a.current,r]),o.createElement(z,{ref:d},h?o.cloneElement(m,{ref:b}):m)}),_=o.forwardRef(function(e,t){var n=e.children;return("function"==typeof n?[n]:(0,a.Z)(n)).map(function(n,a){var i=(null==n?void 0:n.key)||"".concat("rc-observer-key","-").concat(a);return o.createElement(L,(0,r.Z)({},e,{key:i,ref:0===a?t:void 0}),n)})});_.Collection=function(e){var t=e.children,n=e.onBatchResize,r=o.useRef(0),a=o.useRef([]),i=o.useContext(u),c=o.useCallback(function(e,t,o){r.current+=1;var c=r.current;a.current.push({size:e,element:t,data:o}),Promise.resolve().then(function(){c===r.current&&(null==n||n(a.current),a.current=[])}),null==i||i(e,t,o)},[n,i]);return o.createElement(u.Provider,{value:c},t)};var B=_},3054:function(e,t,n){n.d(t,{Z:function(){return function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=[];return r.Children.forEach(t,function(t){(null!=t||n.keepEmpty)&&(Array.isArray(t)?a=a.concat(e(t)):(0,o.isFragment)(t)&&t.props?a=a.concat(e(t.props.children,n)):a.push(t))}),a}}});var r=n(4090),o=n(4185)},2127:function(e,t,n){n.d(t,{Z:function(){return r}});function r(){return!!window.document&&!!window.document.createElement}},1506:function(e,t,n){n.d(t,{Z:function(){return r}});function r(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var n=t;n;){if(n===e)return!0;n=n.parentNode}return!1}},4050:function(e,t,n){n.d(t,{hq:function(){return m},jL:function(){return p}});var r=n(2127),o=n(1506),a="data-rc-order",i="data-rc-priority",c=new Map;function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.mark;return t?t.startsWith("data-")?t:"data-".concat(t):"rc-util-key"}function s(e){return e.attachTo?e.attachTo:document.querySelector("head")||document.body}function u(e){return Array.from((c.get(e)||e).children).filter(function(e){return"STYLE"===e.tagName})}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,r.Z)())return null;var n=t.csp,o=t.prepend,c=t.priority,l=void 0===c?0:c,d="queue"===o?"prependQueue":o?"prepend":"append",f="prependQueue"===d,p=document.createElement("style");p.setAttribute(a,d),f&&l&&p.setAttribute(i,"".concat(l)),null!=n&&n.nonce&&(p.nonce=null==n?void 0:n.nonce),p.innerHTML=e;var m=s(t),g=m.firstChild;if(o){if(f){var h=u(m).filter(function(e){return!!["prepend","prependQueue"].includes(e.getAttribute(a))&&l>=Number(e.getAttribute(i)||0)});if(h.length)return m.insertBefore(p,h[h.length-1].nextSibling),p}m.insertBefore(p,g)}else m.appendChild(p);return p}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u(s(t)).find(function(n){return n.getAttribute(l(t))===e})}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=f(e,t);n&&s(t).removeChild(n)}function m(e,t){var n,r,a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){var n=c.get(e);if(!n||!(0,o.Z)(document,n)){var r=d("",t),a=r.parentNode;c.set(e,a),e.removeChild(r)}}(s(i),i);var u=f(t,i);if(u)return null!==(n=i.csp)&&void 0!==n&&n.nonce&&u.nonce!==(null===(r=i.csp)||void 0===r?void 0:r.nonce)&&(u.nonce=null===(a=i.csp)||void 0===a?void 0:a.nonce),u.innerHTML!==e&&(u.innerHTML=e),u;var p=d(e,i);return p.setAttribute(l(i),t),p}},7472:function(e,t,n){n.d(t,{S:function(){return a},Z:function(){return i}});var r=n(4090),o=n(9542);function a(e){return e instanceof HTMLElement||e instanceof SVGElement}function i(e){return a(e)?e:e instanceof r.Component?o.findDOMNode(e):null}},3193:function(e,t,n){n.d(t,{Z:function(){return r}});function r(e){if(!e)return!1;if(e instanceof Element){if(e.offsetParent)return!0;if(e.getBBox){var t=e.getBBox(),n=t.width,r=t.height;if(n||r)return!0}if(e.getBoundingClientRect){var o=e.getBoundingClientRect(),a=o.width,i=o.height;if(a||i)return!0}}return!1}},4687:function(e,t,n){function r(e){var t;return null==e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}function o(e){return r(e) instanceof ShadowRoot?r(e):null}n.d(t,{A:function(){return o}})},4295:function(e,t){var n={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var t=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||t>=n.F1&&t<=n.F12)return!1;switch(t){case n.ALT:case n.CAPS_LOCK:case n.CONTEXT_MENU:case n.CTRL:case n.DOWN:case n.END:case n.ESC:case n.HOME:case n.INSERT:case n.LEFT:case n.MAC_FF_META:case n.META:case n.NUMLOCK:case n.NUM_CENTER:case n.PAGE_DOWN:case n.PAGE_UP:case n.PAUSE:case n.PRINT_SCREEN:case n.RIGHT:case n.SHIFT:case n.UP:case n.WIN_KEY:case n.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=n.ZERO&&e<=n.NINE||e>=n.NUM_ZERO&&e<=n.NUM_MULTIPLY||e>=n.A&&e<=n.Z||-1!==window.navigator.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case n.SPACE:case n.QUESTION_MARK:case n.NUM_PLUS:case n.NUM_MINUS:case n.NUM_PERIOD:case n.NUM_DIVISION:case n.SEMICOLON:case n.DASH:case n.EQUALS:case n.COMMA:case n.PERIOD:case n.SLASH:case n.APOSTROPHE:case n.SINGLE_QUOTE:case n.OPEN_SQUARE_BRACKET:case n.BACKSLASH:case n.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};t.Z=n},7274:function(e,t,n){n.d(t,{s:function(){return h},v:function(){return b}});var r,o,a=n(6926),i=n(4902),c=n(6976),l=n(5239),s=n(9542),u=(0,l.Z)({},r||(r=n.t(s,2))),d=u.version,f=u.render,p=u.unmountComponentAtNode;try{Number((d||"").split(".")[0])>=18&&(o=u.createRoot)}catch(e){}function m(e){var t=u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&"object"===(0,c.Z)(t)&&(t.usingClientEntryPoint=e)}var g="__rc_react_root__";function h(e,t){if(o){var n;m(!0),n=t[g]||o(t),m(!1),n.render(e),t[g]=n;return}f(e,t)}function v(){return(v=(0,i.Z)((0,a.Z)().mark(function e(t){return(0,a.Z)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Promise.resolve().then(function(){var e;null===(e=t[g])||void 0===e||e.unmount(),delete t[g]}));case 1:case"end":return e.stop()}},e)}))).apply(this,arguments)}function b(e){return y.apply(this,arguments)}function y(){return(y=(0,i.Z)((0,a.Z)().mark(function e(t){return(0,a.Z)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(void 0!==o)){e.next=2;break}return e.abrupt("return",function(e){return v.apply(this,arguments)}(t));case 2:p(t);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}},4811:function(e,t,n){n.d(t,{Z:function(){return o}});var r=n(4090);function o(e){var t=r.useRef();return t.current=e,r.useCallback(function(){for(var e,n=arguments.length,r=Array(n),o=0;o2&&void 0!==arguments[2]&&arguments[2],a=new Set;return function e(t,i){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,l=a.has(t);if((0,o.ZP)(!l,"Warning: There may be circular references"),l)return!1;if(t===i)return!0;if(n&&c>1)return!1;a.add(t);var s=c+1;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var u=0;u
+

LiteLLM Login

+ +

By default Username is "admin" and Password is your set LiteLLM Proxy `MASTER_KEY`

+

If you need to set UI credentials / SSO docs here: https://docs.litellm.ai/docs/proxy/ui

+
+ + + + + +
+ + +""" diff --git a/litellm/router.py b/litellm/router.py index d5b42343c..a970b5d44 100644 --- a/litellm/router.py +++ b/litellm/router.py @@ -94,11 +94,15 @@ class Router: timeout: Optional[float] = None, default_litellm_params={}, # default params for Router.chat.completion.create set_verbose: bool = False, + debug_level: Literal["DEBUG", "INFO"] = "INFO", fallbacks: List = [], - allowed_fails: Optional[int] = None, context_window_fallbacks: List = [], model_group_alias: Optional[dict] = {}, retry_after: int = 0, # min time to wait before retrying a failed request + allowed_fails: Optional[ + int + ] = None, # Number of times a deployment can failbefore being added to cooldown + cooldown_time: float = 1, # (seconds) time to cooldown a deployment after failure routing_strategy: Literal[ "simple-shuffle", "least-busy", @@ -107,7 +111,42 @@ class Router: ] = "simple-shuffle", routing_strategy_args: dict = {}, # just for latency-based routing ) -> None: + """ + Initialize the Router class with the given parameters for caching, reliability, and routing strategy. + + Args: + model_list (Optional[list]): List of models to be used. Defaults to None. + redis_url (Optional[str]): URL of the Redis server. Defaults to None. + redis_host (Optional[str]): Hostname of the Redis server. Defaults to None. + redis_port (Optional[int]): Port of the Redis server. Defaults to None. + redis_password (Optional[str]): Password of the Redis server. Defaults to None. + cache_responses (Optional[bool]): Flag to enable caching of responses. Defaults to False. + cache_kwargs (dict): Additional kwargs to pass to RedisCache. Defaults to {}. + caching_groups (Optional[List[tuple]]): List of model groups for caching across model groups. Defaults to None. + client_ttl (int): Time-to-live for cached clients in seconds. Defaults to 3600. + num_retries (int): Number of retries for failed requests. Defaults to 0. + timeout (Optional[float]): Timeout for requests. Defaults to None. + default_litellm_params (dict): Default parameters for Router.chat.completion.create. Defaults to {}. + set_verbose (bool): Flag to set verbose mode. Defaults to False. + debug_level (Literal["DEBUG", "INFO"]): Debug level for logging. Defaults to "INFO". + fallbacks (List): List of fallback options. Defaults to []. + context_window_fallbacks (List): List of context window fallback options. Defaults to []. + model_group_alias (Optional[dict]): Alias for model groups. Defaults to {}. + retry_after (int): Minimum time to wait before retrying a failed request. Defaults to 0. + allowed_fails (Optional[int]): Number of allowed fails before adding to cooldown. Defaults to None. + cooldown_time (float): Time to cooldown a deployment after failure in seconds. Defaults to 1. + routing_strategy (Literal["simple-shuffle", "least-busy", "usage-based-routing", "latency-based-routing"]): Routing strategy. Defaults to "simple-shuffle". + routing_strategy_args (dict): Additional args for latency-based routing. Defaults to {}. + + Returns: + Router: An instance of the litellm.Router class. + """ self.set_verbose = set_verbose + if self.set_verbose: + if debug_level == "INFO": + verbose_router_logger.setLevel(logging.INFO) + elif debug_level == "DEBUG": + verbose_router_logger.setLevel(logging.DEBUG) self.deployment_names: List = ( [] ) # names of models under litellm_params. ex. azure/chatgpt-v-2 @@ -157,6 +196,7 @@ class Router: self.deployment_latency_map[m["litellm_params"]["model"]] = 0 self.allowed_fails = allowed_fails or litellm.allowed_fails + self.cooldown_time = cooldown_time or 1 self.failed_calls = ( InMemoryCache() ) # cache to track failed call per deployment, if num failed calls within 1 minute > allowed fails, then add it to cooldown @@ -249,16 +289,13 @@ class Router: timeout = kwargs.get("request_timeout", self.timeout) kwargs["num_retries"] = kwargs.get("num_retries", self.num_retries) kwargs.setdefault("metadata", {}).update({"model_group": model}) - with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor: - # Submit the function to the executor with a timeout - future = executor.submit(self.function_with_fallbacks, **kwargs) - response = future.result(timeout=timeout) # type: ignore - + response = self.function_with_fallbacks(**kwargs) return response except Exception as e: raise e def _completion(self, model: str, messages: List[Dict[str, str]], **kwargs): + model_name = None try: # pick the one that is available (lowest TPM/RPM) deployment = self.get_available_deployment( @@ -271,6 +308,7 @@ class Router: ) data = deployment["litellm_params"].copy() kwargs["model_info"] = deployment.get("model_info", {}) + model_name = data["model"] for k, v in self.default_litellm_params.items(): if ( k not in kwargs @@ -292,7 +330,7 @@ class Router: else: model_client = potential_model_client - return litellm.completion( + response = litellm.completion( **{ **data, "messages": messages, @@ -301,7 +339,14 @@ class Router: **kwargs, } ) + verbose_router_logger.info( + f"litellm.completion(model={model_name})\033[32m 200 OK\033[0m" + ) + return response except Exception as e: + verbose_router_logger.info( + f"litellm.completion(model={model_name})\033[31m Exception {str(e)}\033[0m" + ) raise e async def acompletion(self, model: str, messages: List[Dict[str, str]], **kwargs): @@ -830,6 +875,9 @@ class Router: """ try: kwargs["model"] = mg + kwargs.setdefault("metadata", {}).update( + {"model_group": mg} + ) # update model_group used, if fallbacks are done response = await self.async_function_with_retries( *args, **kwargs ) @@ -858,8 +906,10 @@ class Router: f"Falling back to model_group = {mg}" ) kwargs["model"] = mg - kwargs["metadata"]["model_group"] = mg - response = await self.async_function_with_retries( + kwargs.setdefault("metadata", {}).update( + {"model_group": mg} + ) # update model_group used, if fallbacks are done + response = await self.async_function_with_fallbacks( *args, **kwargs ) return response @@ -1024,6 +1074,9 @@ class Router: ## LOGGING kwargs = self.log_retry(kwargs=kwargs, e=original_exception) kwargs["model"] = mg + kwargs.setdefault("metadata", {}).update( + {"model_group": mg} + ) # update model_group used, if fallbacks are done response = self.function_with_fallbacks(*args, **kwargs) return response except Exception as e: @@ -1047,6 +1100,9 @@ class Router: ## LOGGING kwargs = self.log_retry(kwargs=kwargs, e=original_exception) kwargs["model"] = mg + kwargs.setdefault("metadata", {}).update( + {"model_group": mg} + ) # update model_group used, if fallbacks are done response = self.function_with_fallbacks(*args, **kwargs) return response except Exception as e: @@ -1232,6 +1288,7 @@ class Router: verbose_router_logger.debug( f"Attempting to add {deployment} to cooldown list. updated_fails: {updated_fails}; self.allowed_fails: {self.allowed_fails}" ) + cooldown_time = self.cooldown_time or 1 if updated_fails > self.allowed_fails: # get the current cooldown list for that minute cooldown_key = f"{current_minute}:cooldown_models" # group cooldown models by minute to reduce number of redis calls @@ -1245,13 +1302,19 @@ class Router: else: cached_value = cached_value + [deployment] # save updated value - self.cache.set_cache(value=cached_value, key=cooldown_key, ttl=1) + self.cache.set_cache( + value=cached_value, key=cooldown_key, ttl=cooldown_time + ) except: cached_value = [deployment] # save updated value - self.cache.set_cache(value=cached_value, key=cooldown_key, ttl=1) + self.cache.set_cache( + value=cached_value, key=cooldown_key, ttl=cooldown_time + ) else: - self.failed_calls.set_cache(key=deployment, value=updated_fails, ttl=1) + self.failed_calls.set_cache( + key=deployment, value=updated_fails, ttl=cooldown_time + ) def _get_cooldown_deployments(self): """ @@ -1344,6 +1407,38 @@ class Router: max_retries = litellm.get_secret(max_retries_env_name) litellm_params["max_retries"] = max_retries + + # proxy support + import os + import httpx + + # Check if the HTTP_PROXY and HTTPS_PROXY environment variables are set and use them accordingly. + http_proxy = os.getenv("HTTP_PROXY", None) + https_proxy = os.getenv("HTTPS_PROXY", None) + + # Create the proxies dictionary only if the environment variables are set. + sync_proxy_mounts = None + async_proxy_mounts = None + if http_proxy is not None and https_proxy is not None: + sync_proxy_mounts = { + "http://": httpx.HTTPTransport(proxy=httpx.Proxy(url=http_proxy)), + "https://": httpx.HTTPTransport(proxy=httpx.Proxy(url=https_proxy)), + } + async_proxy_mounts = { + "http://": httpx.AsyncHTTPTransport( + proxy=httpx.Proxy(url=http_proxy) + ), + "https://": httpx.AsyncHTTPTransport( + proxy=httpx.Proxy(url=https_proxy) + ), + } + + organization = litellm_params.get("organization", None) + if isinstance(organization, str) and organization.startswith("os.environ/"): + organization_env_name = organization.replace("os.environ/", "") + organization = litellm.get_secret(organization_env_name) + litellm_params["organization"] = organization + if "azure" in model_name: if api_base is None: raise ValueError( @@ -1368,6 +1463,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=async_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1389,6 +1485,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=sync_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1410,6 +1507,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=async_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1431,6 +1529,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=sync_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1443,12 +1542,22 @@ class Router: verbose_router_logger.debug( f"Initializing Azure OpenAI Client for {model_name}, Api Base: {str(api_base)}, Api Key:{api_key}" ) + azure_client_params = { + "api_key": api_key, + "azure_endpoint": api_base, + "api_version": api_version, + } + from litellm.llms.azure import select_azure_base_url_or_endpoint + + # this decides if we should set azure_endpoint or base_url on Azure OpenAI Client + # required to support GPT-4 vision enhancements, since base_url needs to be set on Azure OpenAI Client + azure_client_params = select_azure_base_url_or_endpoint( + azure_client_params + ) cache_key = f"{model_id}_async_client" _client = openai.AsyncAzureOpenAI( # type: ignore - api_key=api_key, - azure_endpoint=api_base, - api_version=api_version, + **azure_client_params, timeout=timeout, max_retries=max_retries, http_client=httpx.AsyncClient( @@ -1456,6 +1565,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=async_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1467,9 +1577,7 @@ class Router: cache_key = f"{model_id}_client" _client = openai.AzureOpenAI( # type: ignore - api_key=api_key, - azure_endpoint=api_base, - api_version=api_version, + **azure_client_params, timeout=timeout, max_retries=max_retries, http_client=httpx.Client( @@ -1477,6 +1585,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=sync_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1489,9 +1598,7 @@ class Router: # streaming clients should have diff timeouts cache_key = f"{model_id}_stream_async_client" _client = openai.AsyncAzureOpenAI( # type: ignore - api_key=api_key, - azure_endpoint=api_base, - api_version=api_version, + **azure_client_params, timeout=stream_timeout, max_retries=max_retries, http_client=httpx.AsyncClient( @@ -1499,6 +1606,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=async_proxy_mounts, ), ) self.cache.set_cache( @@ -1510,9 +1618,7 @@ class Router: cache_key = f"{model_id}_stream_client" _client = openai.AzureOpenAI( # type: ignore - api_key=api_key, - azure_endpoint=api_base, - api_version=api_version, + **azure_client_params, timeout=stream_timeout, max_retries=max_retries, http_client=httpx.Client( @@ -1520,6 +1626,7 @@ class Router: limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=sync_proxy_mounts, ), ) self.cache.set_cache( @@ -1539,11 +1646,13 @@ class Router: base_url=api_base, timeout=timeout, max_retries=max_retries, + organization=organization, http_client=httpx.AsyncClient( transport=AsyncCustomHTTPTransport(), limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=async_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1559,11 +1668,13 @@ class Router: base_url=api_base, timeout=timeout, max_retries=max_retries, + organization=organization, http_client=httpx.Client( transport=CustomHTTPTransport(), limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=sync_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1580,11 +1691,13 @@ class Router: base_url=api_base, timeout=stream_timeout, max_retries=max_retries, + organization=organization, http_client=httpx.AsyncClient( transport=AsyncCustomHTTPTransport(), limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=async_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1601,11 +1714,13 @@ class Router: base_url=api_base, timeout=stream_timeout, max_retries=max_retries, + organization=organization, http_client=httpx.Client( transport=CustomHTTPTransport(), limits=httpx.Limits( max_connections=1000, max_keepalive_connections=100 ), + mounts=sync_proxy_mounts, ), # type: ignore ) self.cache.set_cache( @@ -1655,9 +1770,24 @@ class Router: ), ) + # Azure GPT-Vision Enhancements, users can pass os.environ/ + data_sources = model.get("litellm_params", {}).get("dataSources", []) + + for data_source in data_sources: + params = data_source.get("parameters", {}) + for param_key in ["endpoint", "key"]: + # if endpoint or key set for Azure GPT Vision Enhancements, check if it's an env var + if param_key in params and params[param_key].startswith( + "os.environ/" + ): + env_name = params[param_key].replace("os.environ/", "") + params[param_key] = os.environ.get(env_name, "") + + # done reading model["litellm_params"] if custom_llm_provider not in litellm.provider_list: raise Exception(f"Unsupported provider - {custom_llm_provider}") + # init OpenAI, Azure clients self.set_client(model=model) verbose_router_logger.debug(f"\nInitialized Model List {self.model_list}") @@ -1809,6 +1939,9 @@ class Router: selected_index = random.choices(range(len(rpms)), weights=weights)[0] verbose_router_logger.debug(f"\n selected index, {selected_index}") deployment = healthy_deployments[selected_index] + verbose_router_logger.info( + f"get_available_deployment for model: {model}, Selected deployment: {deployment or deployment[0]} for model: {model}" + ) return deployment or deployment[0] ############## Check if we can do a RPM/TPM based weighted pick ################# tpm = healthy_deployments[0].get("litellm_params").get("tpm", None) @@ -1823,6 +1956,9 @@ class Router: selected_index = random.choices(range(len(tpms)), weights=weights)[0] verbose_router_logger.debug(f"\n selected index, {selected_index}") deployment = healthy_deployments[selected_index] + verbose_router_logger.info( + f"get_available_deployment for model: {model}, Selected deployment: {deployment or deployment[0]} for model: {model}" + ) return deployment or deployment[0] ############## No RPM/TPM passed, we do a random pick ################# @@ -1847,8 +1983,13 @@ class Router: ) if deployment is None: + verbose_router_logger.info( + f"get_available_deployment for model: {model}, No deployment available" + ) raise ValueError("No models available.") - + verbose_router_logger.info( + f"get_available_deployment for model: {model}, Selected deployment: {deployment} for model: {model}" + ) return deployment def flush_cache(self): diff --git a/litellm/router_strategy/lowest_tpm_rpm.py b/litellm/router_strategy/lowest_tpm_rpm.py index f53843f1c..e97d81aa1 100644 --- a/litellm/router_strategy/lowest_tpm_rpm.py +++ b/litellm/router_strategy/lowest_tpm_rpm.py @@ -10,6 +10,7 @@ import traceback from litellm import token_counter from litellm.caching import DualCache from litellm.integrations.custom_logger import CustomLogger +from litellm._logging import verbose_router_logger class LowestTPMLoggingHandler(CustomLogger): @@ -130,6 +131,9 @@ class LowestTPMLoggingHandler(CustomLogger): Returns a deployment with the lowest TPM/RPM usage. """ # get list of potential deployments + verbose_router_logger.debug( + f"get_available_deployments - Usage Based. model_group: {model_group}, healthy_deployments: {healthy_deployments}" + ) current_minute = datetime.now().strftime("%H-%M") tpm_key = f"{model_group}:tpm:{current_minute}" rpm_key = f"{model_group}:rpm:{current_minute}" @@ -137,14 +141,31 @@ class LowestTPMLoggingHandler(CustomLogger): tpm_dict = self.router_cache.get_cache(key=tpm_key) rpm_dict = self.router_cache.get_cache(key=rpm_key) + verbose_router_logger.debug( + f"tpm_key={tpm_key}, tpm_dict: {tpm_dict}, rpm_dict: {rpm_dict}" + ) + try: + input_tokens = token_counter(messages=messages, text=input) + except: + input_tokens = 0 # ----------------------- # Find lowest used model # ---------------------- lowest_tpm = float("inf") deployment = None - if tpm_dict is None: # base case - item = random.choice(healthy_deployments) - return item + if tpm_dict is None: # base case - none of the deployments have been used + # Return the 1st deployment where deployment["tpm"] >= input_tokens + for deployment in healthy_deployments: + _deployment_tpm = ( + deployment.get("tpm", None) + or deployment.get("litellm_params", {}).get("tpm", None) + or deployment.get("model_info", {}).get("tpm", None) + or float("inf") + ) + + if _deployment_tpm >= input_tokens: + return deployment + return None all_deployments = tpm_dict for d in healthy_deployments: @@ -152,11 +173,6 @@ class LowestTPMLoggingHandler(CustomLogger): if d["model_info"]["id"] not in all_deployments: all_deployments[d["model_info"]["id"]] = 0 - try: - input_tokens = token_counter(messages=messages, text=input) - except: - input_tokens = 0 - for item, item_tpm in all_deployments.items(): ## get the item from model list _deployment = None diff --git a/litellm/tests/langfuse.log b/litellm/tests/langfuse.log index bc09c5ba2..e69de29bb 100644 --- a/litellm/tests/langfuse.log +++ b/litellm/tests/langfuse.log @@ -1,57 +0,0 @@ -Starting new HTTPS connection (1): api.anthropic.com:443 -Starting new HTTPS connection (1): litellm-logging.onrender.com:443 -https://litellm-logging.onrender.com:443 "POST /logging HTTP/1.1" 200 38 -https://api.anthropic.com:443 "POST /v1/complete HTTP/1.1" 200 None -Starting new HTTPS connection (1): litellm-logging.onrender.com:443 -Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': 'this is a streaming test for llama2 + langfuse'}], 'model': 'gpt-3.5-turbo', 'max_tokens': 20, 'stream': True, 'temperature': 0.2}} -connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=600.0 socket_options=None -connect_tcp.complete return_value= -start_tls.started ssl_context= server_hostname='api.openai.com' timeout=600.0 -start_tls.complete return_value= -send_request_headers.started request= -send_request_headers.complete -send_request_body.started request= -send_request_body.complete -receive_response_headers.started request= -https://litellm-logging.onrender.com:443 "POST /logging HTTP/1.1" 200 38 -receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 23 Dec 2023 06:33:00 GMT'), (b'Content-Type', b'text/event-stream'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'Cache-Control', b'no-cache, must-revalidate'), (b'openai-model', b'gpt-3.5-turbo-0613'), (b'openai-organization', b'reliablekeystest'), (b'openai-processing-ms', b'62'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'9000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-limit-tokens_usage_based', b'1000000'), (b'x-ratelimit-remaining-requests', b'8998'), (b'x-ratelimit-remaining-tokens', b'999967'), (b'x-ratelimit-remaining-tokens_usage_based', b'999967'), (b'x-ratelimit-reset-requests', b'6ms'), (b'x-ratelimit-reset-tokens', b'1ms'), (b'x-ratelimit-reset-tokens_usage_based', b'1ms'), (b'x-request-id', b'dd1029a85edecb986fb662945c9f7b4f'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=dnuSnc6BPNJd4lgWKpv3iE2P5zy4r5aCVekXVi7HG7U-1703313180-1-AbeMpAfvmJ6BShULb7tMaErR5ergUrt6ohiXj1e8zoo9AotZ0Jz0alUSUcp8FXyQX2VQ9P6gBUeoSR9aE98OasU=; path=/; expires=Sat, 23-Dec-23 07:03:00 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Set-Cookie', b'_cfuvid=dET0GKSNfbtSWNJuXndP8GY8M0ANzDK4Dl7mvIfhmM0-1703313180257-0-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'839e920e4f47f4b0-BOM'), (b'alt-svc', b'h3=":443"; ma=86400')]) -HTTP Request: POST https://api.openai.com/v1/chat/completions "200 OK" -receive_response_body.started request= -receive_response_body.complete -response_closed.started -response_closed.complete -Starting new HTTPS connection (1): litellm-logging.onrender.com:443 -Request options: {'method': 'post', 'url': '/chat/completions', 'files': None, 'json_data': {'messages': [{'role': 'user', 'content': "What's the weather like in San Francisco, Tokyo, and Paris?"}], 'model': 'gpt-3.5-turbo-1106', 'tool_choice': 'auto', 'tools': [{'type': 'function', 'function': {'name': 'get_current_weather', 'description': 'Get the current weather in a given location', 'parameters': {'type': 'object', 'properties': {'location': {'type': 'string', 'description': 'The city and state, e.g. San Francisco, CA'}, 'unit': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}}, 'required': ['location']}}}]}} -connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=600.0 socket_options=None -connect_tcp.complete return_value= -start_tls.started ssl_context= server_hostname='api.openai.com' timeout=600.0 -start_tls.complete return_value= -send_request_headers.started request= -send_request_headers.complete -send_request_body.started request= -send_request_body.complete -receive_response_headers.started request= -https://litellm-logging.onrender.com:443 "POST /logging HTTP/1.1" 200 38 -receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 23 Dec 2023 06:33:03 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'Cache-Control', b'no-cache, must-revalidate'), (b'openai-model', b'gpt-3.5-turbo-1106'), (b'openai-organization', b'reliablekeystest'), (b'openai-processing-ms', b'2145'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'9000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-limit-tokens_usage_based', b'1000000'), (b'x-ratelimit-remaining-requests', b'8998'), (b'x-ratelimit-remaining-tokens', b'999968'), (b'x-ratelimit-remaining-tokens_usage_based', b'999968'), (b'x-ratelimit-reset-requests', b'6ms'), (b'x-ratelimit-reset-tokens', b'1ms'), (b'x-ratelimit-reset-tokens_usage_based', b'1ms'), (b'x-request-id', b'd0fd54d3a7696ee677f3690e9e0d6d04'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=P_4fUmw4vvrbGKTlavf9VWuuzzro87gvhLE0DEGKA84-1703313183-1-ARgz+AQXAzH1uTTK8iyPE3QnT8TovAP61UvYsFD+d5DWM0lFi5U2+eSgPH+Pqt+Y1fNH1FWBUn9DmVceJKvyLcU=; path=/; expires=Sat, 23-Dec-23 07:03:03 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Set-Cookie', b'_cfuvid=g.nvBthte.6BJ7KHg5tihyGwupeGfMNMGnw72QUUBQc-1703313183034-0-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'839e92128b7ff2e2-BOM'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) -receive_response_body.started request= -receive_response_body.complete -response_closed.started -response_closed.complete -HTTP Request: POST https://api.openai.com/v1/chat/completions "200 OK" -nction': {'name': 'get_current_weather', 'description': 'Get the current weather in a given location', 'parameters': {'type': 'object', 'properties': {'location': {'type': 'string', 'description': 'The city and state, e.g. San Francisco, CA'}, 'unit': {'type': 'string', 'enum': ['celsius', 'fahrenheit']}}, 'required': ['location']}}}]}} -connect_tcp.started host='api.openai.com' port=443 local_address=None timeout=600.0 socket_options=None -connect_tcp.complete return_value= -start_tls.started ssl_context= server_hostname='api.openai.com' timeout=600.0 -start_tls.complete return_value= -send_request_headers.started request= -send_request_headers.complete -send_request_body.started request= -send_request_body.complete -receive_response_headers.started request= -https://litellm-logging.onrender.com:443 "POST /logging HTTP/1.1" 200 38 -receive_response_headers.complete return_value=(b'HTTP/1.1', 200, b'OK', [(b'Date', b'Sat, 23 Dec 2023 06:33:03 GMT'), (b'Content-Type', b'application/json'), (b'Transfer-Encoding', b'chunked'), (b'Connection', b'keep-alive'), (b'access-control-allow-origin', b'*'), (b'Cache-Control', b'no-cache, must-revalidate'), (b'openai-model', b'gpt-3.5-turbo-1106'), (b'openai-organization', b'reliablekeystest'), (b'openai-processing-ms', b'2145'), (b'openai-version', b'2020-10-01'), (b'strict-transport-security', b'max-age=15724800; includeSubDomains'), (b'x-ratelimit-limit-requests', b'9000'), (b'x-ratelimit-limit-tokens', b'1000000'), (b'x-ratelimit-limit-tokens_usage_based', b'1000000'), (b'x-ratelimit-remaining-requests', b'8998'), (b'x-ratelimit-remaining-tokens', b'999968'), (b'x-ratelimit-remaining-tokens_usage_based', b'999968'), (b'x-ratelimit-reset-requests', b'6ms'), (b'x-ratelimit-reset-tokens', b'1ms'), (b'x-ratelimit-reset-tokens_usage_based', b'1ms'), (b'x-request-id', b'd0fd54d3a7696ee677f3690e9e0d6d04'), (b'CF-Cache-Status', b'DYNAMIC'), (b'Set-Cookie', b'__cf_bm=P_4fUmw4vvrbGKTlavf9VWuuzzro87gvhLE0DEGKA84-1703313183-1-ARgz+AQXAzH1uTTK8iyPE3QnT8TovAP61UvYsFD+d5DWM0lFi5U2+eSgPH+Pqt+Y1fNH1FWBUn9DmVceJKvyLcU=; path=/; expires=Sat, 23-Dec-23 07:03:03 GMT; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Set-Cookie', b'_cfuvid=g.nvBthte.6BJ7KHg5tihyGwupeGfMNMGnw72QUUBQc-1703313183034-0-604800000; path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None'), (b'Server', b'cloudflare'), (b'CF-RAY', b'839e92128b7ff2e2-BOM'), (b'Content-Encoding', b'gzip'), (b'alt-svc', b'h3=":443"; ma=86400')]) -receive_response_body.started request= -receive_response_body.complete -response_closed.started -response_closed.complete -HTTP Request: POST https://api.openai.com/v1/chat/completions "200 OK" diff --git a/litellm/tests/test_alangfuse.py b/litellm/tests/test_alangfuse.py index 6a10528df..c1d8123c7 100644 --- a/litellm/tests/test_alangfuse.py +++ b/litellm/tests/test_alangfuse.py @@ -99,36 +99,68 @@ def pre_langfuse_setup(): return -@pytest.mark.skip(reason="beta test - checking langfuse output") def test_langfuse_logging_async(): + # this tests time added to make langfuse logging calls, vs just acompletion calls try: pre_langfuse_setup() litellm.set_verbose = True + + # Make 5 calls with an empty success_callback + litellm.success_callback = [] + start_time_empty_callback = asyncio.run(make_async_calls()) + print("done with no callback test") + + print("starting langfuse test") + # Make 5 calls with success_callback set to "langfuse" litellm.success_callback = ["langfuse"] + start_time_langfuse = asyncio.run(make_async_calls()) + print("done with langfuse test") - async def _test_langfuse(): - response = await litellm.acompletion( - model="azure/chatgpt-v-2", - messages=[{"role": "user", "content": "This is a test"}], - max_tokens=100, - temperature=0.7, - timeout=5, - user="test_user", - ) - await asyncio.sleep(1) - return response + # Compare the time for both scenarios + print(f"Time taken with success_callback='langfuse': {start_time_langfuse}") + print(f"Time taken with empty success_callback: {start_time_empty_callback}") - response = asyncio.run(_test_langfuse()) - print(f"response: {response}") + # assert the diff is not more than 1 second - this was 5 seconds before the fix + assert abs(start_time_langfuse - start_time_empty_callback) < 1 - # # check langfuse.log to see if there was a failed response - search_logs("langfuse.log") except litellm.Timeout as e: pass except Exception as e: pytest.fail(f"An exception occurred - {e}") +async def make_async_calls(): + tasks = [] + for _ in range(5): + task = asyncio.create_task( + litellm.acompletion( + model="azure/chatgpt-v-2", + messages=[{"role": "user", "content": "This is a test"}], + max_tokens=5, + temperature=0.7, + timeout=5, + user="langfuse_latency_test_user", + mock_response="It's simple to use and easy to get started", + ) + ) + tasks.append(task) + + # Measure the start time before running the tasks + start_time = asyncio.get_event_loop().time() + + # Wait for all tasks to complete + responses = await asyncio.gather(*tasks) + + # Print the responses when tasks return + for idx, response in enumerate(responses): + print(f"Response from Task {idx + 1}: {response}") + + # Calculate the total time taken + total_time = asyncio.get_event_loop().time() - start_time + + return total_time + + # def test_langfuse_logging_async_text_completion(): # try: # pre_langfuse_setup() @@ -245,7 +277,24 @@ def test_langfuse_logging_custom_generation_name(): print(e) -test_langfuse_logging_custom_generation_name() +# test_langfuse_logging_custom_generation_name() + + +@pytest.mark.skip(reason="beta test - checking langfuse output") +def test_langfuse_logging_embedding(): + try: + litellm.set_verbose = True + litellm.success_callback = ["langfuse"] + response = litellm.embedding( + model="text-embedding-ada-002", + input=["gm", "ishaan"], + ) + print(response) + except litellm.Timeout as e: + pass + except Exception as e: + pytest.fail(f"An exception occurred - {e}") + print(e) @pytest.mark.skip(reason="beta test - checking langfuse output") diff --git a/litellm/tests/test_s3_logs.py b/litellm/tests/test_amazing_s3_logs.py similarity index 60% rename from litellm/tests/test_s3_logs.py rename to litellm/tests/test_amazing_s3_logs.py index a5347fb08..ecc6ae26f 100644 --- a/litellm/tests/test_s3_logs.py +++ b/litellm/tests/test_amazing_s3_logs.py @@ -84,13 +84,16 @@ def test_s3_logging(): # for each key, get the part before "-" as the key. Do it safely cleaned_keys = [] for key in most_recent_keys: - split_key = key.split("-time=") - cleaned_keys.append(split_key[0]) + split_key = key.split("_") + if len(split_key) < 2: + continue + cleaned_keys.append(split_key[1]) print("\n most recent keys", most_recent_keys) print("\n cleaned keys", cleaned_keys) print("\n Expected keys: ", expected_keys) matches = 0 for key in expected_keys: + key += ".json" assert key in cleaned_keys if key in cleaned_keys: @@ -115,4 +118,70 @@ def test_s3_logging(): print("Passed! Testing async s3 logging") -test_s3_logging() +# test_s3_logging() + + +def test_s3_logging_r2(): + # all s3 requests need to be in one test function + # since we are modifying stdout, and pytests runs tests in parallel + # on circle ci - we only test litellm.acompletion() + try: + # redirect stdout to log_file + # litellm.cache = litellm.Cache( + # type="s3", s3_bucket_name="litellm-r2-bucket", s3_region_name="us-west-2" + # ) + litellm.set_verbose = True + from litellm._logging import verbose_logger + import logging + + verbose_logger.setLevel(level=logging.DEBUG) + + litellm.success_callback = ["s3"] + litellm.s3_callback_params = { + "s3_bucket_name": "litellm-r2-bucket", + "s3_aws_secret_access_key": "os.environ/R2_S3_ACCESS_KEY", + "s3_aws_access_key_id": "os.environ/R2_S3_ACCESS_ID", + "s3_endpoint_url": "os.environ/R2_S3_URL", + "s3_region_name": "os.environ/R2_S3_REGION_NAME", + } + print("Testing async s3 logging") + + expected_keys = [] + + import time + + curr_time = str(time.time()) + + async def _test(): + return await litellm.acompletion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": f"This is a test {curr_time}"}], + max_tokens=10, + temperature=0.7, + user="ishaan-2", + ) + + response = asyncio.run(_test()) + print(f"response: {response}") + expected_keys.append(response.id) + + import boto3 + + s3 = boto3.client( + "s3", + endpoint_url=os.getenv("R2_S3_URL"), + region_name=os.getenv("R2_S3_REGION_NAME"), + aws_access_key_id=os.getenv("R2_S3_ACCESS_ID"), + aws_secret_access_key=os.getenv("R2_S3_ACCESS_KEY"), + ) + + bucket_name = "litellm-r2-bucket" + # List objects in the bucket + response = s3.list_objects(Bucket=bucket_name) + + except Exception as e: + pytest.fail(f"An exception occurred - {e}") + finally: + # post, close log file and verify + # Reset stdout to the original value + print("Passed! Testing async s3 logging") diff --git a/litellm/tests/test_amazing_vertex_completion.py b/litellm/tests/test_amazing_vertex_completion.py index a56e0343c..0188d2358 100644 --- a/litellm/tests/test_amazing_vertex_completion.py +++ b/litellm/tests/test_amazing_vertex_completion.py @@ -95,11 +95,11 @@ def test_vertex_ai(): + litellm.vertex_code_text_models ) litellm.set_verbose = False - litellm.vertex_project = "reliablekeys" + vertex_ai_project = "reliablekeys" + # litellm.vertex_project = "reliablekeys" test_models = random.sample(test_models, 1) - # test_models += litellm.vertex_language_models # always test gemini-pro - test_models = litellm.vertex_language_models # always test gemini-pro + test_models += litellm.vertex_language_models # always test gemini-pro for model in test_models: try: if model in [ @@ -117,6 +117,7 @@ def test_vertex_ai(): model=model, messages=[{"role": "user", "content": "hi"}], temperature=0.7, + vertex_ai_project=vertex_ai_project, ) print("\nModel Response", response) print(response) @@ -275,7 +276,7 @@ def test_gemini_pro_vision(): try: load_vertex_ai_credentials() litellm.set_verbose = True - litellm.num_retries = 0 + litellm.num_retries = 3 resp = litellm.completion( model="vertex_ai/gemini-pro-vision", messages=[ @@ -302,10 +303,10 @@ def test_gemini_pro_vision(): assert prompt_tokens == 263 # the gemini api returns 263 to us except Exception as e: - import traceback - - traceback.print_exc() - raise e + if "500 Internal error encountered.'" in str(e): + pass + else: + pytest.fail(f"An exception occurred - {str(e)}") # test_gemini_pro_vision() @@ -372,7 +373,7 @@ async def gemini_pro_async_function_calling(): print(f"completion: {completion}") -asyncio.run(gemini_pro_async_function_calling()) +# asyncio.run(gemini_pro_async_function_calling()) # Extra gemini Vision tests for completion + stream, async, async + stream # if we run into issues with gemini, we will also add these to our ci/cd pipeline diff --git a/litellm/tests/test_bad_params.py b/litellm/tests/test_bad_params.py index 58fe204bd..9f126a1b8 100644 --- a/litellm/tests/test_bad_params.py +++ b/litellm/tests/test_bad_params.py @@ -70,18 +70,16 @@ def test_completion_with_empty_model(): def test_completion_invalid_param_cohere(): try: - response = completion(model="command-nightly", messages=messages, top_p=1) - print(f"response: {response}") + litellm.set_verbose = True + response = completion(model="command-nightly", messages=messages, seed=12) + pytest.fail(f"This should have failed cohere does not support `seed` parameter") except Exception as e: - if "Unsupported parameters passed: top_p" in str(e): + if " cohere does not support parameters: {'seed': 12}" in str(e): pass else: pytest.fail(f"An error occurred {e}") -# test_completion_invalid_param_cohere() - - def test_completion_function_call_cohere(): try: response = completion( diff --git a/litellm/tests/test_bedrock_completion.py b/litellm/tests/test_bedrock_completion.py index 3ef27b8c6..d672ca780 100644 --- a/litellm/tests/test_bedrock_completion.py +++ b/litellm/tests/test_bedrock_completion.py @@ -63,7 +63,7 @@ def test_completion_bedrock_claude_completion_auth(): pytest.fail(f"Error occurred: {e}") -test_completion_bedrock_claude_completion_auth() +# test_completion_bedrock_claude_completion_auth() def test_completion_bedrock_claude_2_1_completion_auth(): @@ -77,7 +77,6 @@ def test_completion_bedrock_claude_2_1_completion_auth(): os.environ.pop("AWS_ACCESS_KEY_ID", None) os.environ.pop("AWS_SECRET_ACCESS_KEY", None) os.environ.pop("AWS_REGION_NAME", None) - try: response = completion( model="bedrock/anthropic.claude-v2:1", @@ -100,7 +99,7 @@ def test_completion_bedrock_claude_2_1_completion_auth(): pytest.fail(f"Error occurred: {e}") -test_completion_bedrock_claude_2_1_completion_auth() +# test_completion_bedrock_claude_2_1_completion_auth() def test_completion_bedrock_claude_external_client_auth(): @@ -118,6 +117,8 @@ def test_completion_bedrock_claude_external_client_auth(): try: import boto3 + litellm.set_verbose = True + bedrock = boto3.client( service_name="bedrock-runtime", region_name=aws_region_name, @@ -145,4 +146,112 @@ def test_completion_bedrock_claude_external_client_auth(): pytest.fail(f"Error occurred: {e}") -test_completion_bedrock_claude_external_client_auth() +# test_completion_bedrock_claude_external_client_auth() + + +def test_completion_bedrock_claude_sts_client_auth(): + print("\ncalling bedrock claude external client auth") + import os + + aws_access_key_id = os.environ["AWS_TEMP_ACCESS_KEY_ID"] + aws_secret_access_key = os.environ["AWS_TEMP_SECRET_ACCESS_KEY"] + aws_region_name = os.environ["AWS_REGION_NAME"] + aws_role_name = os.environ["AWS_TEMP_ROLE_NAME"] + + try: + import boto3 + + litellm.set_verbose = True + + response = completion( + model="bedrock/anthropic.claude-instant-v1", + messages=messages, + max_tokens=10, + temperature=0.1, + aws_region_name=aws_region_name, + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_role_name=aws_role_name, + aws_session_name="my-test-session", + ) + + response = embedding( + model="cohere.embed-multilingual-v3", + input=["hello world"], + aws_region_name="us-east-1", + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_role_name=aws_role_name, + aws_session_name="my-test-session", + ) + + response = completion( + model="gpt-3.5-turbo", + messages=messages, + aws_region_name="us-east-1", + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + aws_role_name=aws_role_name, + aws_session_name="my-test-session", + ) + # Add any assertions here to check the response + print(response) + except RateLimitError: + pass + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +test_completion_bedrock_claude_sts_client_auth() + + +def test_provisioned_throughput(): + try: + litellm.set_verbose = True + import botocore, json, io + import botocore.session + from botocore.stub import Stubber + + bedrock_client = botocore.session.get_session().create_client( + "bedrock-runtime", region_name="us-east-1" + ) + + expected_params = { + "accept": "application/json", + "body": '{"prompt": "\\n\\nHuman: Hello, how are you?\\n\\nAssistant: ", ' + '"max_tokens_to_sample": 256}', + "contentType": "application/json", + "modelId": "provisioned-model-arn", + } + response_from_bedrock = { + "body": io.StringIO( + json.dumps( + { + "completion": " Here is a short poem about the sky:", + "stop_reason": "max_tokens", + "stop": None, + } + ) + ), + "contentType": "contentType", + "ResponseMetadata": {"HTTPStatusCode": 200}, + } + + with Stubber(bedrock_client) as stubber: + stubber.add_response( + "invoke_model", + service_response=response_from_bedrock, + expected_params=expected_params, + ) + response = litellm.completion( + model="bedrock/anthropic.claude-instant-v1", + model_id="provisioned-model-arn", + messages=[{"content": "Hello, how are you?", "role": "user"}], + aws_bedrock_client=bedrock_client, + ) + print("response stubbed", response) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +# test_provisioned_throughput() diff --git a/litellm/tests/test_caching.py b/litellm/tests/test_caching.py index 89410598e..468ab6f80 100644 --- a/litellm/tests/test_caching.py +++ b/litellm/tests/test_caching.py @@ -95,10 +95,7 @@ def test_caching_with_cache_controls(): ) print(f"response1: {response1}") print(f"response2: {response2}") - assert ( - response2["choices"][0]["message"]["content"] - != response1["choices"][0]["message"]["content"] - ) + assert response2["id"] != response1["id"] message = [{"role": "user", "content": f"Hey, how's it going? {uuid.uuid4()}"}] ## TTL = 5 response1 = completion( @@ -124,9 +121,10 @@ def test_caching_with_models_v2(): ] litellm.cache = Cache() print("test2 for caching") + litellm.set_verbose = True response1 = completion(model="gpt-3.5-turbo", messages=messages, caching=True) response2 = completion(model="gpt-3.5-turbo", messages=messages, caching=True) - response3 = completion(model="command-nightly", messages=messages, caching=True) + response3 = completion(model="azure/chatgpt-v-2", messages=messages, caching=True) print(f"response1: {response1}") print(f"response2: {response2}") print(f"response3: {response3}") @@ -361,7 +359,7 @@ def test_redis_cache_completion(): response3 = completion( model="gpt-3.5-turbo", messages=messages, caching=True, temperature=0.5 ) - response4 = completion(model="command-nightly", messages=messages, caching=True) + response4 = completion(model="azure/chatgpt-v-2", messages=messages, caching=True) print("\nresponse 1", response1) print("\nresponse 2", response2) @@ -796,8 +794,8 @@ def test_cache_override(): print(f"Embedding 2 response time: {end_time - start_time} seconds") assert ( - end_time - start_time > 0.1 - ) # ensure 2nd response comes in over 0.1s. This should not be cached. + end_time - start_time > 0.05 + ) # ensure 2nd response comes in over 0.05s. This should not be cached. # test_cache_override() diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index ae2cd06c7..54640b54b 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -87,6 +87,7 @@ def test_completion_mistral_api(): litellm.set_verbose = True response = completion( model="mistral/mistral-tiny", + max_tokens=5, messages=[ { "role": "user", @@ -96,6 +97,10 @@ def test_completion_mistral_api(): ) # Add any assertions here to check the response print(response) + + cost = litellm.completion_cost(completion_response=response) + print("cost to make mistral completion=", cost) + assert cost > 0.0 except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -186,6 +191,21 @@ def test_completion_gpt4_turbo(): # test_completion_gpt4_turbo() +def test_completion_gpt4_turbo_0125(): + try: + response = completion( + model="gpt-4-0125-preview", + messages=messages, + max_tokens=10, + ) + print(response) + except openai.RateLimitError: + print("got a rate liimt error") + pass + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + @pytest.mark.skip(reason="this test is flaky") def test_completion_gpt4_vision(): try: @@ -219,12 +239,12 @@ def test_completion_gpt4_vision(): def test_completion_azure_gpt4_vision(): - # azure gpt-4 vision takes 5s to respond + # azure/gpt-4, vision takes 5seconds to respond try: litellm.set_verbose = True response = completion( model="azure/gpt-4-vision", - timeout=1, + timeout=5, messages=[ { "role": "user", @@ -239,15 +259,28 @@ def test_completion_azure_gpt4_vision(): ], } ], - base_url="https://gpt-4-vision-resource.openai.azure.com/", + base_url="https://gpt-4-vision-resource.openai.azure.com/openai/deployments/gpt-4-vision/extensions", api_key=os.getenv("AZURE_VISION_API_KEY"), + enhancements={"ocr": {"enabled": True}, "grounding": {"enabled": True}}, + dataSources=[ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "https://gpt-4-vision-enhancement.cognitiveservices.azure.com/", + "key": os.environ["AZURE_VISION_ENHANCE_KEY"], + }, + } + ], ) print(response) except openai.APITimeoutError: print("got a timeout error") pass - except openai.RateLimitError: - print("got a rate liimt error") + except openai.RateLimitError as e: + print("got a rate liimt error", e) + pass + except openai.APIStatusError as e: + print("got an api status error", e) pass except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -485,22 +518,22 @@ def hf_test_completion_tgi(): # hf_test_error_logs() -def test_completion_cohere(): # commenting for now as the cohere endpoint is being flaky - try: - litellm.CohereConfig(max_tokens=1000, stop_sequences=["a"]) - response = completion( - model="command-nightly", messages=messages, logger_fn=logger_fn - ) - # Add any assertions here to check the response - print(response) - response_str = response["choices"][0]["message"]["content"] - response_str_2 = response.choices[0].message.content - if type(response_str) != str: - pytest.fail(f"Error occurred: {e}") - if type(response_str_2) != str: - pytest.fail(f"Error occurred: {e}") - except Exception as e: - pytest.fail(f"Error occurred: {e}") +# def test_completion_cohere(): # commenting out,for now as the cohere endpoint is being flaky +# try: +# litellm.CohereConfig(max_tokens=10, stop_sequences=["a"]) +# response = completion( +# model="command-nightly", messages=messages, logger_fn=logger_fn +# ) +# # Add any assertions here to check the response +# print(response) +# response_str = response["choices"][0]["message"]["content"] +# response_str_2 = response.choices[0].message.content +# if type(response_str) != str: +# pytest.fail(f"Error occurred: {e}") +# if type(response_str_2) != str: +# pytest.fail(f"Error occurred: {e}") +# except Exception as e: +# pytest.fail(f"Error occurred: {e}") # test_completion_cohere() @@ -536,20 +569,30 @@ def test_completion_openai(): pytest.fail(f"Error occurred: {e}") -# test_completion_openai() - - -def test_completion_text_openai(): +def test_completion_openai_organization(): try: - # litellm.set_verbose = True - response = completion(model="gpt-3.5-turbo-instruct", messages=messages) - print(response["choices"][0]["message"]["content"]) + litellm.set_verbose = True + try: + response = completion( + model="gpt-3.5-turbo", messages=messages, organization="org-ikDc4ex8NB" + ) + pytest.fail("Request should have failed - This organization does not exist") + except Exception as e: + assert "No such organization: org-ikDc4ex8NB" in str(e) + except Exception as e: print(e) pytest.fail(f"Error occurred: {e}") -# test_completion_text_openai() +def test_completion_text_openai(): + try: + # litellm.set_verbose =True + response = completion(model="gpt-3.5-turbo-instruct", messages=messages) + print(response["choices"][0]["message"]["content"]) + except Exception as e: + print(e) + pytest.fail(f"Error occurred: {e}") def custom_callback( @@ -758,6 +801,8 @@ def test_completion_ollama_hosted(): litellm.request_timeout = None pass except Exception as e: + if "try pulling it first" in str(e): + return pytest.fail(f"Error occurred: {e}") @@ -766,8 +811,9 @@ def test_completion_ollama_hosted(): def test_completion_openrouter1(): try: + litellm.set_verbose = True response = completion( - model="openrouter/google/palm-2-chat-bison", + model="openrouter/mistralai/mistral-tiny", messages=messages, max_tokens=5, ) @@ -824,6 +870,10 @@ def test_completion_anyscale_with_functions(): ) # Add any assertions here to check the response print(response) + + cost = litellm.completion_cost(completion_response=response) + print("cost to make anyscale completion=", cost) + assert cost > 0.0 except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -832,8 +882,8 @@ def test_completion_anyscale_with_functions(): def test_completion_azure_key_completion_arg(): - # this tests if we can pass api_key to completion, when it's not in the env - # DO NOT REMOVE THIS TEST. No MATTER WHAT Happens. + # this tests if we can pass api_key to completion, when it's not in the env. + # DO NOT REMOVE THIS TEST. No MATTER WHAT Happens! # If you want to remove it, speak to Ishaan! # Ishaan will be very disappointed if this test is removed -> this is a standard way to pass api_key + the router + proxy use this old_key = os.environ["AZURE_API_KEY"] @@ -849,6 +899,9 @@ def test_completion_azure_key_completion_arg(): max_tokens=10, ) print(f"response: {response}") + + print("Hidden Params", response._hidden_params) + assert response._hidden_params["custom_llm_provider"] == "azure" os.environ["AZURE_API_KEY"] = old_key except Exception as e: os.environ["AZURE_API_KEY"] = old_key @@ -965,9 +1018,9 @@ def test_azure_openai_ad_token(): print("azure ad token respoonse\n") print(response) litellm.input_callback = [] - except: + except Exception as e: litellm.input_callback = [] - pass + pytest.fail(f"An exception occurs - {str(e)}") # test_azure_openai_ad_token() @@ -1244,6 +1297,8 @@ def test_completion_together_ai(): "Cost for completion call together-computer/llama-2-70b: ", f"${float(cost):.10f}", ) + except litellm.Timeout as e: + pass except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -1345,16 +1400,22 @@ def test_customprompt_together_ai(): def test_completion_sagemaker(): try: - print("testing sagemaker") litellm.set_verbose = True + print("testing sagemaker") response = completion( model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", messages=messages, temperature=0.2, max_tokens=80, + input_cost_per_second=0.000420, ) # Add any assertions here to check the response print(response) + cost = completion_cost(completion_response=response) + print("calculated cost", cost) + assert ( + cost > 0.0 and cost < 1.0 + ) # should never be > $1 for a single completion call except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -1362,6 +1423,36 @@ def test_completion_sagemaker(): # test_completion_sagemaker() +def test_completion_sagemaker_stream(): + try: + litellm.set_verbose = False + print("testing sagemaker") + response = completion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=messages, + temperature=0.2, + max_tokens=80, + stream=True, + ) + + complete_streaming_response = "" + first_chunk_id, chunk_id = None, None + for i, chunk in enumerate(response): + print(chunk) + chunk_id = chunk.id + print(chunk_id) + if i == 0: + first_chunk_id = chunk_id + else: + assert chunk_id == first_chunk_id + complete_streaming_response += chunk.choices[0].delta.content or "" + # Add any assertions here to check the response + # print(response) + assert len(complete_streaming_response) > 0 + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + def test_completion_chat_sagemaker(): try: messages = [{"role": "user", "content": "Hey, how's it going?"}] @@ -1603,6 +1694,26 @@ def test_completion_anyscale_api(): # test_completion_anyscale_api() +@pytest.mark.skip(reason="flaky test, times out frequently") +def test_completion_cohere(): + try: + # litellm.set_verbose=True + messages = [ + {"role": "system", "content": "You're a good bot"}, + { + "role": "user", + "content": "Hey", + }, + ] + response = completion( + model="command-nightly", + messages=messages, + ) + print(response) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + def test_azure_cloudflare_api(): litellm.set_verbose = True try: @@ -1625,7 +1736,7 @@ def test_azure_cloudflare_api(): pass -test_azure_cloudflare_api() +# test_azure_cloudflare_api() def test_completion_anyscale_2(): @@ -1920,7 +2031,7 @@ def test_completion_cloudflare(): pytest.fail(f"Error occurred: {e}") -test_completion_cloudflare() +# test_completion_cloudflare() def test_moderation(): diff --git a/litellm/tests/test_completion_cost.py b/litellm/tests/test_completion_cost.py index 354342021..b55f9c9d6 100644 --- a/litellm/tests/test_completion_cost.py +++ b/litellm/tests/test_completion_cost.py @@ -13,7 +13,7 @@ import pytest def test_get_gpt3_tokens(): max_tokens = get_max_tokens("gpt-3.5-turbo") print(max_tokens) - assert max_tokens == 4097 + assert max_tokens == 4096 # print(results) @@ -124,7 +124,7 @@ def test_cost_azure_gpt_35(): ) -test_cost_azure_gpt_35() +# test_cost_azure_gpt_35() def test_cost_azure_embedding(): @@ -158,3 +158,78 @@ def test_cost_azure_embedding(): # test_cost_azure_embedding() + + +def test_cost_openai_image_gen(): + cost = litellm.completion_cost( + model="dall-e-2", size="1024-x-1024", quality="standard", n=1 + ) + assert cost == 0.019922944 + + +def test_cost_bedrock_pricing(): + """ + - get pricing specific to region for a model + """ + from litellm import ModelResponse, Choices, Message + from litellm.utils import Usage + + litellm.set_verbose = True + input_tokens = litellm.token_counter( + model="bedrock/anthropic.claude-instant-v1", + messages=[{"role": "user", "content": "Hey, how's it going?"}], + ) + print(f"input_tokens: {input_tokens}") + output_tokens = litellm.token_counter( + model="bedrock/anthropic.claude-instant-v1", + text="It's all going well", + count_response_tokens=True, + ) + print(f"output_tokens: {output_tokens}") + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content="It's all going well", + role="assistant", + ), + ) + ], + created=1700775391, + model="anthropic.claude-instant-v1", + object="chat.completion", + system_fingerprint=None, + usage=Usage( + prompt_tokens=input_tokens, + completion_tokens=output_tokens, + total_tokens=input_tokens + output_tokens, + ), + ) + resp._hidden_params = { + "custom_llm_provider": "bedrock", + "region_name": "ap-northeast-1", + } + + cost = litellm.completion_cost( + model="anthropic.claude-instant-v1", + completion_response=resp, + messages=[{"role": "user", "content": "Hey, how's it going?"}], + ) + predicted_cost = input_tokens * 0.00000223 + 0.00000755 * output_tokens + assert cost == predicted_cost + + +def test_cost_bedrock_pricing_actual_calls(): + litellm.set_verbose = True + model = "anthropic.claude-instant-v1" + messages = [{"role": "user", "content": "Hey, how's it going?"}] + response = litellm.completion(model=model, messages=messages) + assert response._hidden_params["region_name"] is not None + cost = litellm.completion_cost( + completion_response=response, + messages=[{"role": "user", "content": "Hey, how's it going?"}], + ) + assert cost > 0 diff --git a/litellm/tests/test_configs/custom_auth.py b/litellm/tests/test_configs/custom_auth.py index f3825038e..1b6bec43b 100644 --- a/litellm/tests/test_configs/custom_auth.py +++ b/litellm/tests/test_configs/custom_auth.py @@ -9,8 +9,14 @@ load_dotenv() async def user_api_key_auth(request: Request, api_key: str) -> UserAPIKeyAuth: try: print(f"api_key: {api_key}") + if api_key == "": + raise Exception( + f"CustomAuth - Malformed API Key passed in. Ensure Key has `Bearer` prefix" + ) if api_key == f"{os.getenv('PROXY_MASTER_KEY')}-1234": return UserAPIKeyAuth(api_key=api_key) raise Exception - except: - raise Exception + except Exception as e: + if len(str(e)) > 0: + raise e + raise Exception("Failed custom auth") diff --git a/litellm/tests/test_configs/test_bad_config.yaml b/litellm/tests/test_configs/test_bad_config.yaml index 9899af2b7..7c802a840 100644 --- a/litellm/tests/test_configs/test_bad_config.yaml +++ b/litellm/tests/test_configs/test_bad_config.yaml @@ -3,6 +3,11 @@ model_list: litellm_params: api_key: bad-key model: gpt-3.5-turbo + - model_name: working-azure-gpt-3.5-turbo + litellm_params: + model: azure/chatgpt-v-2 + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY - model_name: azure-gpt-3.5-turbo litellm_params: model: azure/chatgpt-v-2 diff --git a/litellm/tests/test_configs/test_config_no_auth.yaml b/litellm/tests/test_configs/test_config_no_auth.yaml index be85765a8..8441018e3 100644 --- a/litellm/tests/test_configs/test_config_no_auth.yaml +++ b/litellm/tests/test_configs/test_config_no_auth.yaml @@ -53,9 +53,9 @@ model_list: api_key: os.environ/AZURE_API_KEY api_version: 2023-07-01-preview model: azure/azure-embedding-model - model_name: azure-embedding-model model_info: - mode: "embedding" + mode: embedding + model_name: azure-embedding-model - litellm_params: model: gpt-3.5-turbo model_info: @@ -80,43 +80,49 @@ model_list: description: this is a test openai model id: 9b1ef341-322c-410a-8992-903987fef439 model_name: test_openai_models -- model_name: amazon-embeddings - litellm_params: - model: "bedrock/amazon.titan-embed-text-v1" +- litellm_params: + model: bedrock/amazon.titan-embed-text-v1 model_info: mode: embedding -- model_name: "GPT-J 6B - Sagemaker Text Embedding (Internal)" - litellm_params: - model: "sagemaker/berri-benchmarking-gpt-j-6b-fp16" + model_name: amazon-embeddings +- litellm_params: + model: sagemaker/berri-benchmarking-gpt-j-6b-fp16 model_info: mode: embedding -- model_name: dall-e-3 - litellm_params: + model_name: GPT-J 6B - Sagemaker Text Embedding (Internal) +- litellm_params: model: dall-e-3 model_info: mode: image_generation -- model_name: dall-e-3 - litellm_params: - model: "azure/dall-e-3-test" - api_version: "2023-12-01-preview" - api_base: "os.environ/AZURE_SWEDEN_API_BASE" - api_key: "os.environ/AZURE_SWEDEN_API_KEY" + model_name: dall-e-3 +- litellm_params: + api_base: os.environ/AZURE_SWEDEN_API_BASE + api_key: os.environ/AZURE_SWEDEN_API_KEY + api_version: 2023-12-01-preview + model: azure/dall-e-3-test model_info: mode: image_generation -- model_name: dall-e-2 - litellm_params: - model: "azure/" - api_version: "2023-06-01-preview" - api_base: "os.environ/AZURE_API_BASE" - api_key: "os.environ/AZURE_API_KEY" + model_name: dall-e-3 +- litellm_params: + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: 2023-06-01-preview + model: azure/ model_info: mode: image_generation -- model_name: text-embedding-ada-002 - litellm_params: + model_name: dall-e-2 +- litellm_params: + api_base: os.environ/AZURE_API_BASE + api_key: os.environ/AZURE_API_KEY + api_version: 2023-07-01-preview model: azure/azure-embedding-model - api_base: "os.environ/AZURE_API_BASE" - api_key: "os.environ/AZURE_API_KEY" - api_version: "2023-07-01-preview" model_info: + base_model: text-embedding-ada-002 mode: embedding - base_model: text-embedding-ada-002 \ No newline at end of file + model_name: text-embedding-ada-002 +- litellm_params: + model: gpt-3.5-turbo + model_info: + description: this is a test openai model + id: 34cb2419-7c63-44ae-a189-53f1d1ce5953 + model_name: test_openai_models diff --git a/litellm/tests/test_custom_callback_input.py b/litellm/tests/test_custom_callback_input.py index 8b41dfabb..080754ca8 100644 --- a/litellm/tests/test_custom_callback_input.py +++ b/litellm/tests/test_custom_callback_input.py @@ -74,6 +74,7 @@ class CompletionCustomHandler( def log_post_api_call(self, kwargs, response_obj, start_time, end_time): try: + print(f"kwargs: {kwargs}") self.states.append("post_api_call") ## START TIME assert isinstance(start_time, datetime) @@ -149,7 +150,14 @@ class CompletionCustomHandler( ## END TIME assert isinstance(end_time, datetime) ## RESPONSE OBJECT - assert isinstance(response_obj, litellm.ModelResponse) + assert isinstance( + response_obj, + ( + litellm.ModelResponse, + litellm.EmbeddingResponse, + litellm.ImageResponse, + ), + ) ## KWARGS assert isinstance(kwargs["model"], str) assert isinstance(kwargs["messages"], list) and isinstance( @@ -170,12 +178,14 @@ class CompletionCustomHandler( ) assert isinstance(kwargs["additional_args"], (dict, type(None))) assert isinstance(kwargs["log_event_type"], str) + assert isinstance(kwargs["response_cost"], (float, type(None))) except: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) def log_failure_event(self, kwargs, response_obj, start_time, end_time): try: + print(f"kwargs: {kwargs}") self.states.append("sync_failure") ## START TIME assert isinstance(start_time, datetime) @@ -262,6 +272,7 @@ class CompletionCustomHandler( assert isinstance(kwargs["additional_args"], (dict, type(None))) assert isinstance(kwargs["log_event_type"], str) assert kwargs["cache_hit"] is None or isinstance(kwargs["cache_hit"], bool) + assert isinstance(kwargs["response_cost"], (float, type(None))) except: print(f"Assertion Error: {traceback.format_exc()}") self.errors.append(traceback.format_exc()) @@ -545,6 +556,46 @@ async def test_async_chat_bedrock_stream(): # asyncio.run(test_async_chat_bedrock_stream()) +## Test Sagemaker + Async +@pytest.mark.asyncio +async def test_async_chat_sagemaker_stream(): + try: + customHandler = CompletionCustomHandler() + litellm.callbacks = [customHandler] + response = await litellm.acompletion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=[{"role": "user", "content": "Hi 👋 - i'm async sagemaker"}], + ) + # test streaming + response = await litellm.acompletion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=[{"role": "user", "content": "Hi 👋 - i'm async sagemaker"}], + stream=True, + ) + print(f"response: {response}") + async for chunk in response: + print(f"chunk: {chunk}") + continue + ## test failure callback + try: + response = await litellm.acompletion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=[{"role": "user", "content": "Hi 👋 - i'm async sagemaker"}], + aws_region_name="my-bad-key", + stream=True, + ) + async for chunk in response: + continue + except: + pass + time.sleep(1) + print(f"customHandler.errors: {customHandler.errors}") + assert len(customHandler.errors) == 0 + litellm.callbacks = [] + except Exception as e: + pytest.fail(f"An exception occurred: {str(e)}") + + # Text Completion @@ -766,6 +817,54 @@ async def test_async_embedding_azure_caching(): assert len(customHandler_caching.states) == 4 # pre, post, success, success -# asyncio.run( -# test_async_embedding_azure_caching() -# ) +# Image Generation + + +## Test OpenAI + Sync +def test_image_generation_openai(): + try: + customHandler_success = CompletionCustomHandler() + customHandler_failure = CompletionCustomHandler() + # litellm.callbacks = [customHandler_success] + + # litellm.set_verbose = True + + # response = litellm.image_generation( + # prompt="A cute baby sea otter", model="dall-e-3" + # ) + + # print(f"response: {response}") + # assert len(response.data) > 0 + + # print(f"customHandler_success.errors: {customHandler_success.errors}") + # print(f"customHandler_success.states: {customHandler_success.states}") + # assert len(customHandler_success.errors) == 0 + # assert len(customHandler_success.states) == 3 # pre, post, success + # test failure callback + litellm.callbacks = [customHandler_failure] + try: + response = litellm.image_generation( + prompt="A cute baby sea otter", + model="dall-e-2", + api_key="my-bad-api-key", + ) + except: + pass + print(f"customHandler_failure.errors: {customHandler_failure.errors}") + print(f"customHandler_failure.states: {customHandler_failure.states}") + assert len(customHandler_failure.errors) == 0 + assert len(customHandler_failure.states) == 3 # pre, post, failure + except litellm.RateLimitError as e: + pass + except litellm.ContentPolicyViolationError: + pass # OpenAI randomly raises these errors - skip when they occur + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +test_image_generation_openai() +## Test OpenAI + Async + +## Test Azure + Sync + +## Test Azure + Async diff --git a/litellm/tests/test_custom_logger.py b/litellm/tests/test_custom_logger.py index de7dd67b4..2747d33e9 100644 --- a/litellm/tests/test_custom_logger.py +++ b/litellm/tests/test_custom_logger.py @@ -1,56 +1,61 @@ ### What this tests #### import sys, os, time, inspect, asyncio, traceback import pytest -sys.path.insert(0, os.path.abspath('../..')) + +sys.path.insert(0, os.path.abspath("../..")) from litellm import completion, embedding import litellm from litellm.integrations.custom_logger import CustomLogger + class MyCustomHandler(CustomLogger): complete_streaming_response_in_callback = "" + def __init__(self): - self.success: bool = False # type: ignore - self.failure: bool = False # type: ignore - self.async_success: bool = False # type: ignore + self.success: bool = False # type: ignore + self.failure: bool = False # type: ignore + self.async_success: bool = False # type: ignore self.async_success_embedding: bool = False # type: ignore - self.async_failure: bool = False # type: ignore + self.async_failure: bool = False # type: ignore self.async_failure_embedding: bool = False # type: ignore - self.async_completion_kwargs = None # type: ignore - self.async_embedding_kwargs = None # type: ignore - self.async_embedding_response = None # type: ignore + self.async_completion_kwargs = None # type: ignore + self.async_embedding_kwargs = None # type: ignore + self.async_embedding_response = None # type: ignore - self.async_completion_kwargs_fail = None # type: ignore - self.async_embedding_kwargs_fail = None # type: ignore + self.async_completion_kwargs_fail = None # type: ignore + self.async_embedding_kwargs_fail = None # type: ignore - self.stream_collected_response = None # type: ignore - self.sync_stream_collected_response = None # type: ignore - self.user = None # type: ignore + self.stream_collected_response = None # type: ignore + self.sync_stream_collected_response = None # type: ignore + self.user = None # type: ignore self.data_sent_to_api: dict = {} + self.response_cost = 0 - def log_pre_api_call(self, model, messages, kwargs): + def log_pre_api_call(self, model, messages, kwargs): print(f"Pre-API Call") self.data_sent_to_api = kwargs["additional_args"].get("complete_input_dict", {}) - - def log_post_api_call(self, kwargs, response_obj, start_time, end_time): + + def log_post_api_call(self, kwargs, response_obj, start_time, end_time): print(f"Post-API Call") - + def log_stream_event(self, kwargs, response_obj, start_time, end_time): print(f"On Stream") - - def log_success_event(self, kwargs, response_obj, start_time, end_time): + + def log_success_event(self, kwargs, response_obj, start_time, end_time): print(f"On Success") self.success = True if kwargs.get("stream") == True: self.sync_stream_collected_response = response_obj + print(f"response cost in log_success_event: {kwargs.get('response_cost')}") + self.response_cost = kwargs.get("response_cost", 0) - - def log_failure_event(self, kwargs, response_obj, start_time, end_time): + def log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Failure") self.failure = True - async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): + async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): print(f"On Async success") print(f"received kwargs user: {kwargs['user']}") self.async_success = True @@ -62,24 +67,34 @@ class MyCustomHandler(CustomLogger): self.stream_collected_response = response_obj self.async_completion_kwargs = kwargs self.user = kwargs.get("user", None) - - async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): + print( + f"response cost in log_async_success_event: {kwargs.get('response_cost')}" + ) + self.response_cost = kwargs.get("response_cost", 0) + + async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): print(f"On Async Failure") self.async_failure = True if kwargs.get("model") == "text-embedding-ada-002": self.async_failure_embedding = True self.async_embedding_kwargs_fail = kwargs - + self.async_completion_kwargs_fail = kwargs + class TmpFunction: complete_streaming_response_in_callback = "" async_success: bool = False + async def async_test_logging_fn(self, kwargs, completion_obj, start_time, end_time): print(f"ON ASYNC LOGGING") self.async_success = True - print(f'kwargs.get("complete_streaming_response"): {kwargs.get("complete_streaming_response")}') - self.complete_streaming_response_in_callback = kwargs.get("complete_streaming_response") + print( + f'kwargs.get("complete_streaming_response"): {kwargs.get("complete_streaming_response")}' + ) + self.complete_streaming_response_in_callback = kwargs.get( + "complete_streaming_response" + ) def test_async_chat_openai_stream(): @@ -88,29 +103,39 @@ def test_async_chat_openai_stream(): # litellm.set_verbose = True litellm.success_callback = [tmp_function.async_test_logging_fn] complete_streaming_response = "" + async def call_gpt(): nonlocal complete_streaming_response - response = await litellm.acompletion(model="gpt-3.5-turbo", - messages=[{ - "role": "user", - "content": "Hi 👋 - i'm openai" - }], - stream=True) - async for chunk in response: - complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" + response = await litellm.acompletion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "Hi 👋 - i'm openai"}], + stream=True, + ) + async for chunk in response: + complete_streaming_response += ( + chunk["choices"][0]["delta"]["content"] or "" + ) print(complete_streaming_response) + asyncio.run(call_gpt()) complete_streaming_response = complete_streaming_response.strip("'") - response1 = tmp_function.complete_streaming_response_in_callback["choices"][0]["message"]["content"] + response1 = tmp_function.complete_streaming_response_in_callback["choices"][0][ + "message" + ]["content"] response2 = complete_streaming_response # assert [ord(c) for c in response1] == [ord(c) for c in response2] + print(f"response1: {response1}") + print(f"response2: {response2}") assert response1 == response2 assert tmp_function.async_success == True except Exception as e: print(e) pytest.fail(f"An error occurred - {str(e)}") + + # test_async_chat_openai_stream() + def test_completion_azure_stream_moderation_failure(): try: customHandler = MyCustomHandler() @@ -122,11 +147,11 @@ def test_completion_azure_stream_moderation_failure(): "content": "how do i kill someone", }, ] - try: + try: response = completion( model="azure/chatgpt-v-2", messages=messages, stream=True ) - for chunk in response: + for chunk in response: print(f"chunk: {chunk}") continue except Exception as e: @@ -139,7 +164,7 @@ def test_completion_azure_stream_moderation_failure(): def test_async_custom_handler_stream(): try: - # [PROD Test] - Do not DELETE + # [PROD Test] - Do not DELETE # checks if the model response available in the async + stream callbacks is equal to the received response customHandler2 = MyCustomHandler() litellm.callbacks = [customHandler2] @@ -152,59 +177,64 @@ def test_async_custom_handler_stream(): }, ] complete_streaming_response = "" + async def test_1(): nonlocal complete_streaming_response response = await litellm.acompletion( - model="azure/chatgpt-v-2", - messages=messages, - stream=True + model="azure/chatgpt-v-2", messages=messages, stream=True ) - async for chunk in response: - complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" + async for chunk in response: + complete_streaming_response += ( + chunk["choices"][0]["delta"]["content"] or "" + ) print(complete_streaming_response) - + asyncio.run(test_1()) response_in_success_handler = customHandler2.stream_collected_response - response_in_success_handler = response_in_success_handler["choices"][0]["message"]["content"] + response_in_success_handler = response_in_success_handler["choices"][0][ + "message" + ]["content"] print("\n\n") print("response_in_success_handler: ", response_in_success_handler) print("complete_streaming_response: ", complete_streaming_response) assert response_in_success_handler == complete_streaming_response except Exception as e: pytest.fail(f"Error occurred: {e}") + + # test_async_custom_handler_stream() def test_azure_completion_stream(): - # [PROD Test] - Do not DELETE + # [PROD Test] - Do not DELETE # test if completion() + sync custom logger get the same complete stream response try: # checks if the model response available in the async + stream callbacks is equal to the received response customHandler2 = MyCustomHandler() litellm.callbacks = [customHandler2] - litellm.set_verbose = False + litellm.set_verbose = True messages = [ {"role": "system", "content": "You are a helpful assistant."}, { "role": "user", - "content": "write 1 sentence about litellm being amazing", + "content": f"write 1 sentence about litellm being amazing {time.time()}", }, ] complete_streaming_response = "" response = litellm.completion( - model="azure/chatgpt-v-2", - messages=messages, - stream=True + model="azure/chatgpt-v-2", messages=messages, stream=True ) - for chunk in response: + for chunk in response: complete_streaming_response += chunk["choices"][0]["delta"]["content"] or "" print(complete_streaming_response) - - time.sleep(0.5) # wait 1/2 second before checking callbacks + + time.sleep(0.5) # wait 1/2 second before checking callbacks response_in_success_handler = customHandler2.sync_stream_collected_response - response_in_success_handler = response_in_success_handler["choices"][0]["message"]["content"] + response_in_success_handler = response_in_success_handler["choices"][0][ + "message" + ]["content"] print("\n\n") print("response_in_success_handler: ", response_in_success_handler) print("complete_streaming_response: ", complete_streaming_response) @@ -212,24 +242,32 @@ def test_azure_completion_stream(): except Exception as e: pytest.fail(f"Error occurred: {e}") + @pytest.mark.asyncio -async def test_async_custom_handler_completion(): - try: +async def test_async_custom_handler_completion(): + try: customHandler_success = MyCustomHandler() customHandler_failure = MyCustomHandler() # success assert customHandler_success.async_success == False litellm.callbacks = [customHandler_success] response = await litellm.acompletion( - model="gpt-3.5-turbo", - messages=[{ + model="gpt-3.5-turbo", + messages=[ + { "role": "user", "content": "hello from litellm test", - }] - ) + } + ], + ) await asyncio.sleep(1) - assert customHandler_success.async_success == True, "async success is not set to True even after success" - assert customHandler_success.async_completion_kwargs.get("model") == "gpt-3.5-turbo" + assert ( + customHandler_success.async_success == True + ), "async success is not set to True even after success" + assert ( + customHandler_success.async_completion_kwargs.get("model") + == "gpt-3.5-turbo" + ) # failure litellm.callbacks = [customHandler_failure] messages = [ @@ -240,80 +278,119 @@ async def test_async_custom_handler_completion(): }, ] - assert customHandler_failure.async_failure == False - try: + assert customHandler_failure.async_failure == False + try: response = await litellm.acompletion( - model="gpt-3.5-turbo", - messages=messages, - api_key="my-bad-key", - ) + model="gpt-3.5-turbo", + messages=messages, + api_key="my-bad-key", + ) except: pass - assert customHandler_failure.async_failure == True, "async failure is not set to True even after failure" - assert customHandler_failure.async_completion_kwargs_fail.get("model") == "gpt-3.5-turbo" - assert len(str(customHandler_failure.async_completion_kwargs_fail.get("exception"))) > 10 # expect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 + assert ( + customHandler_failure.async_failure == True + ), "async failure is not set to True even after failure" + assert ( + customHandler_failure.async_completion_kwargs_fail.get("model") + == "gpt-3.5-turbo" + ) + assert ( + len( + str(customHandler_failure.async_completion_kwargs_fail.get("exception")) + ) + > 10 + ) # expect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 litellm.callbacks = [] print("Passed setting async failure") except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") + + # asyncio.run(test_async_custom_handler_completion()) + @pytest.mark.asyncio -async def test_async_custom_handler_embedding(): - try: +async def test_async_custom_handler_embedding(): + try: customHandler_embedding = MyCustomHandler() litellm.callbacks = [customHandler_embedding] # success assert customHandler_embedding.async_success_embedding == False response = await litellm.aembedding( - model="text-embedding-ada-002", - input = ["hello world"], - ) + model="text-embedding-ada-002", + input=["hello world"], + ) await asyncio.sleep(1) - assert customHandler_embedding.async_success_embedding == True, "async_success_embedding is not set to True even after success" - assert customHandler_embedding.async_embedding_kwargs.get("model") == "text-embedding-ada-002" - assert customHandler_embedding.async_embedding_response["usage"]["prompt_tokens"] ==2 + assert ( + customHandler_embedding.async_success_embedding == True + ), "async_success_embedding is not set to True even after success" + assert ( + customHandler_embedding.async_embedding_kwargs.get("model") + == "text-embedding-ada-002" + ) + assert ( + customHandler_embedding.async_embedding_response["usage"]["prompt_tokens"] + == 2 + ) print("Passed setting async success: Embedding") - # failure + # failure assert customHandler_embedding.async_failure_embedding == False - try: + try: response = await litellm.aembedding( - model="text-embedding-ada-002", - input = ["hello world"], - api_key="my-bad-key", - ) - except: + model="text-embedding-ada-002", + input=["hello world"], + api_key="my-bad-key", + ) + except: pass - assert customHandler_embedding.async_failure_embedding == True, "async failure embedding is not set to True even after failure" - assert customHandler_embedding.async_embedding_kwargs_fail.get("model") == "text-embedding-ada-002" - assert len(str(customHandler_embedding.async_embedding_kwargs_fail.get("exception"))) > 10 # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 + assert ( + customHandler_embedding.async_failure_embedding == True + ), "async failure embedding is not set to True even after failure" + assert ( + customHandler_embedding.async_embedding_kwargs_fail.get("model") + == "text-embedding-ada-002" + ) + assert ( + len( + str( + customHandler_embedding.async_embedding_kwargs_fail.get("exception") + ) + ) + > 10 + ) # exppect APIError("OpenAIException - Error code: 401 - {'error': {'message': 'Incorrect API key provided: test. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}"), 'traceback_exception': 'Traceback (most recent call last):\n File "/Users/ishaanjaffer/Github/litellm/litellm/llms/openai.py", line 269, in acompletion\n response = await openai_aclient.chat.completions.create(**data)\n File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/openai/resources/chat/completions.py", line 119 except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") + + # asyncio.run(test_async_custom_handler_embedding()) + @pytest.mark.asyncio -async def test_async_custom_handler_embedding_optional_param(): +async def test_async_custom_handler_embedding_optional_param(): """ - Tests if the openai optional params for embedding - user + encoding_format, + Tests if the openai optional params for embedding - user + encoding_format, are logged """ customHandler_optional_params = MyCustomHandler() litellm.callbacks = [customHandler_optional_params] response = await litellm.aembedding( - model="azure/azure-embedding-model", - input = ["hello world"], - user = "John" - ) - await asyncio.sleep(1) # success callback is async + model="azure/azure-embedding-model", input=["hello world"], user="John" + ) + await asyncio.sleep(1) # success callback is async assert customHandler_optional_params.user == "John" - assert customHandler_optional_params.user == customHandler_optional_params.data_sent_to_api["user"] + assert ( + customHandler_optional_params.user + == customHandler_optional_params.data_sent_to_api["user"] + ) + # asyncio.run(test_async_custom_handler_embedding_optional_param()) + @pytest.mark.asyncio -async def test_async_custom_handler_embedding_optional_param_bedrock(): +async def test_async_custom_handler_embedding_optional_param_bedrock(): """ - Tests if the openai optional params for embedding - user + encoding_format, + Tests if the openai optional params for embedding - user + encoding_format, are logged but makes sure these are not sent to the non-openai/azure endpoint (raises errors). @@ -323,42 +400,112 @@ async def test_async_custom_handler_embedding_optional_param_bedrock(): customHandler_optional_params = MyCustomHandler() litellm.callbacks = [customHandler_optional_params] response = await litellm.aembedding( - model="bedrock/amazon.titan-embed-text-v1", - input = ["hello world"], - user = "John" - ) - await asyncio.sleep(1) # success callback is async + model="bedrock/amazon.titan-embed-text-v1", input=["hello world"], user="John" + ) + await asyncio.sleep(1) # success callback is async assert customHandler_optional_params.user == "John" assert "user" not in customHandler_optional_params.data_sent_to_api +@pytest.mark.asyncio +async def test_cost_tracking_with_caching(): + """ + Important Test - This tests if that cost is 0 for cached responses + """ + from litellm import Cache + + litellm.set_verbose = False + litellm.cache = Cache( + type="redis", + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + password=os.environ["REDIS_PASSWORD"], + ) + customHandler_optional_params = MyCustomHandler() + litellm.callbacks = [customHandler_optional_params] + messages = [ + { + "role": "user", + "content": f"write a one sentence poem about: {time.time()}", + } + ] + response1 = await litellm.acompletion( + model="gpt-3.5-turbo", + messages=messages, + max_tokens=40, + temperature=0.2, + caching=True, + ) + await asyncio.sleep(1) # success callback is async + response_cost = customHandler_optional_params.response_cost + assert response_cost > 0 + response2 = await litellm.acompletion( + model="gpt-3.5-turbo", + messages=messages, + max_tokens=40, + temperature=0.2, + caching=True, + ) + await asyncio.sleep(1) # success callback is async + response_cost_2 = customHandler_optional_params.response_cost + assert response_cost_2 == 0 + + def test_redis_cache_completion_stream(): from litellm import Cache - # Important Test - This tests if we can add to streaming cache, when custom callbacks are set + + # Important Test - This tests if we can add to streaming cache, when custom callbacks are set import random + try: print("\nrunning test_redis_cache_completion_stream") litellm.set_verbose = True - random_number = random.randint(1, 100000) # add a random number to ensure it's always adding / reading from cache - messages = [{"role": "user", "content": f"write a one sentence poem about: {random_number}"}] - litellm.cache = Cache(type="redis", host=os.environ['REDIS_HOST'], port=os.environ['REDIS_PORT'], password=os.environ['REDIS_PASSWORD']) + random_number = random.randint( + 1, 100000 + ) # add a random number to ensure it's always adding / reading from cache + messages = [ + { + "role": "user", + "content": f"write a one sentence poem about: {random_number}", + } + ] + litellm.cache = Cache( + type="redis", + host=os.environ["REDIS_HOST"], + port=os.environ["REDIS_PORT"], + password=os.environ["REDIS_PASSWORD"], + ) print("test for caching, streaming + completion") - response1 = completion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) + response1 = completion( + model="gpt-3.5-turbo", + messages=messages, + max_tokens=40, + temperature=0.2, + stream=True, + ) response_1_content = "" for chunk in response1: print(chunk) response_1_content += chunk.choices[0].delta.content or "" print(response_1_content) - time.sleep(0.1) # sleep for 0.1 seconds allow set cache to occur - response2 = completion(model="gpt-3.5-turbo", messages=messages, max_tokens=40, temperature=0.2, stream=True) + time.sleep(0.1) # sleep for 0.1 seconds allow set cache to occur + response2 = completion( + model="gpt-3.5-turbo", + messages=messages, + max_tokens=40, + temperature=0.2, + stream=True, + ) response_2_content = "" for chunk in response2: print(chunk) response_2_content += chunk.choices[0].delta.content or "" print("\nresponse 1", response_1_content) print("\nresponse 2", response_2_content) - assert response_1_content == response_2_content, f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" + assert ( + response_1_content == response_2_content + ), f"Response 1 != Response 2. Same params, Response 1{response_1_content} != Response 2{response_2_content}" litellm.success_callback = [] litellm._async_success_callback = [] litellm.cache = None @@ -366,4 +513,6 @@ def test_redis_cache_completion_stream(): print(e) litellm.success_callback = [] raise e -# test_redis_cache_completion_stream() \ No newline at end of file + + +# test_redis_cache_completion_stream() diff --git a/litellm/tests/test_dynamodb_logs.py b/litellm/tests/test_dynamodb_logs.py index a6bedd0cf..80a44a78a 100644 --- a/litellm/tests/test_dynamodb_logs.py +++ b/litellm/tests/test_dynamodb_logs.py @@ -33,6 +33,7 @@ def pre_request(): import re +@pytest.mark.skip def verify_log_file(log_file_path): with open(log_file_path, "r") as log_file: log_content = log_file.read() @@ -123,7 +124,7 @@ def test_dynamo_logging(): sys.stdout = original_stdout # Close the file log_file.close() - verify_log_file(file_name) + # verify_log_file(file_name) print("Passed! Testing async dynamoDB logging") diff --git a/litellm/tests/test_embedding.py b/litellm/tests/test_embedding.py index 6505d432d..4637a79e0 100644 --- a/litellm/tests/test_embedding.py +++ b/litellm/tests/test_embedding.py @@ -10,7 +10,7 @@ sys.path.insert( 0, os.path.abspath("../..") ) # Adds the parent directory to the system path import litellm -from litellm import embedding, completion +from litellm import embedding, completion, completion_cost litellm.set_verbose = False @@ -57,6 +57,48 @@ def test_openai_embedding(): # test_openai_embedding() +def test_openai_embedding_3(): + try: + litellm.set_verbose = True + response = embedding( + model="text-embedding-3-small", + input=["good morning from litellm", "this is another item"], + metadata={"anything": "good day"}, + dimensions=5, + ) + print(f"response:", response) + litellm_response = dict(response) + litellm_response_keys = set(litellm_response.keys()) + litellm_response_keys.discard("_response_ms") + + print(litellm_response_keys) + print("LiteLLM Response\n") + # print(litellm_response) + + # same request with OpenAI 1.0+ + import openai + + client = openai.OpenAI(api_key=os.environ["OPENAI_API_KEY"]) + response = client.embeddings.create( + model="text-embedding-3-small", + input=["good morning from litellm", "this is another item"], + dimensions=5, + ) + + response = dict(response) + openai_response_keys = set(response.keys()) + print(openai_response_keys) + assert ( + litellm_response_keys == openai_response_keys + ) # ENSURE the Keys in litellm response is exactly what the openai package returns + assert ( + len(litellm_response["data"]) == 2 + ) # expect two embedding responses from litellm_response since input had two + print(openai_response_keys) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + def test_openai_azure_embedding_simple(): try: litellm.set_verbose = True @@ -177,6 +219,11 @@ def test_cohere_embedding3(): input=["good morning from litellm", "this is another item"], ) print(f"response:", response) + + custom_llm_provider = response._hidden_params["custom_llm_provider"] + + assert custom_llm_provider == "cohere" + except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -184,6 +231,31 @@ def test_cohere_embedding3(): # test_cohere_embedding3() +def test_vertexai_embedding(): + try: + # litellm.set_verbose=True + response = embedding( + model="textembedding-gecko@001", + input=["good morning from litellm", "this is another item"], + ) + print(f"response:", response) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +@pytest.mark.asyncio +async def test_vertexai_aembedding(): + try: + # litellm.set_verbose=True + response = await litellm.aembedding( + model="textembedding-gecko@001", + input=["good morning from litellm", "this is another item"], + ) + print(f"response: {response}") + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + def test_bedrock_embedding_titan(): try: # this tests if we support str input for bedrock embedding @@ -226,7 +298,7 @@ def test_bedrock_embedding_titan(): pytest.fail(f"Error occurred: {e}") -test_bedrock_embedding_titan() +# test_bedrock_embedding_titan() def test_bedrock_embedding_cohere(): @@ -255,6 +327,25 @@ def test_bedrock_embedding_cohere(): # test_bedrock_embedding_cohere() +def test_demo_tokens_as_input_to_embeddings_fails_for_titan(): + litellm.set_verbose = True + + with pytest.raises( + litellm.BadRequestError, + match="BedrockException - Bedrock Embedding API input must be type str | List[str]", + ): + litellm.embedding(model="amazon.titan-embed-text-v1", input=[[1]]) + + with pytest.raises( + litellm.BadRequestError, + match="BedrockException - Bedrock Embedding API input must be type str | List[str]", + ): + litellm.embedding( + model="amazon.titan-embed-text-v1", + input=[1], + ) + + # comment out hf tests - since hf endpoints are unstable def test_hf_embedding(): try: @@ -314,6 +405,12 @@ def test_aembedding_azure(): input=["good morning from litellm", "this is another item"], ) print(response) + + print( + "hidden params - custom_llm_provider", + response._hidden_params["custom_llm_provider"], + ) + assert response._hidden_params["custom_llm_provider"] == "azure" except Exception as e: pytest.fail(f"Error occurred: {e}") @@ -330,8 +427,30 @@ def test_sagemaker_embeddings(): response = litellm.embedding( model="sagemaker/berri-benchmarking-gpt-j-6b-fp16", input=["good morning from litellm", "this is another item"], + input_cost_per_second=0.000420, ) print(f"response: {response}") + cost = completion_cost(completion_response=response) + assert ( + cost > 0.0 and cost < 1.0 + ) # should never be > $1 for a single embedding call + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +@pytest.mark.asyncio +async def test_sagemaker_aembeddings(): + try: + response = await litellm.aembedding( + model="sagemaker/berri-benchmarking-gpt-j-6b-fp16", + input=["good morning from litellm", "this is another item"], + input_cost_per_second=0.000420, + ) + print(f"response: {response}") + cost = completion_cost(completion_response=response) + assert ( + cost > 0.0 and cost < 1.0 + ) # should never be > $1 for a single embedding call except Exception as e: pytest.fail(f"Error occurred: {e}") diff --git a/litellm/tests/test_exceptions.py b/litellm/tests/test_exceptions.py index 998e3eb9b..d4a73c867 100644 --- a/litellm/tests/test_exceptions.py +++ b/litellm/tests/test_exceptions.py @@ -2,7 +2,7 @@ from openai import AuthenticationError, BadRequestError, RateLimitError, OpenAIE import os import sys import traceback -import subprocess +import subprocess, asyncio sys.path.insert( 0, os.path.abspath("../..") @@ -35,17 +35,21 @@ litellm.num_retries = 0 # Approach: Run each model through the test -> assert if the correct error (always the same one) is triggered -models = ["command-nightly"] +exception_models = [ + "sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + "bedrock/anthropic.claude-instant-v1", +] # Test 1: Context Window Errors -@pytest.mark.parametrize("model", models) +@pytest.mark.parametrize("model", exception_models) def test_context_window(model): print("Testing context window error") sample_text = "Say error 50 times" * 1000000 messages = [{"content": sample_text, "role": "user"}] try: - litellm.set_verbose = True + litellm.set_verbose = False + print("Testing model=", model) response = completion(model=model, messages=messages) print(f"response: {response}") print("FAILED!") @@ -59,6 +63,9 @@ def test_context_window(model): pytest.fail(f"An error occcurred - {e}") +models = ["command-nightly"] + + @pytest.mark.parametrize("model", models) def test_context_window_with_fallbacks(model): ctx_window_fallback_dict = { @@ -371,6 +378,158 @@ def test_content_policy_exceptionimage_generation_openai(): # test_content_policy_exceptionimage_generation_openai() +def test_content_policy_violation_error_streaming(): + """ + Production Test. + """ + litellm.set_verbose = False + print("test_async_completion with stream") + + async def test_get_response(): + try: + response = await litellm.acompletion( + model="azure/chatgpt-v-2", + messages=[{"role": "user", "content": "say 1"}], + temperature=0, + top_p=1, + stream=True, + max_tokens=512, + presence_penalty=0, + frequency_penalty=0, + ) + print(f"response: {response}") + + num_finish_reason = 0 + async for chunk in response: + print(chunk) + if chunk["choices"][0].get("finish_reason") is not None: + num_finish_reason += 1 + print("finish_reason", chunk["choices"][0].get("finish_reason")) + + assert ( + num_finish_reason == 1 + ), f"expected only one finish reason. Got {num_finish_reason}" + except Exception as e: + pytest.fail(f"GOT exception for gpt-3.5 instruct In streaming{e}") + + asyncio.run(test_get_response()) + + async def test_get_error(): + try: + response = await litellm.acompletion( + model="azure/chatgpt-v-2", + messages=[ + {"role": "user", "content": "where do i buy lethal drugs from"} + ], + temperature=0, + top_p=1, + stream=True, + max_tokens=512, + presence_penalty=0, + frequency_penalty=0, + ) + print(f"response: {response}") + + num_finish_reason = 0 + async for chunk in response: + print(chunk) + if chunk["choices"][0].get("finish_reason") is not None: + num_finish_reason += 1 + print("finish_reason", chunk["choices"][0].get("finish_reason")) + + pytest.fail(f"Expected to return 400 error In streaming{e}") + except Exception as e: + pass + + asyncio.run(test_get_error()) + + +def test_completion_perplexity_exception_on_openai_client(): + try: + import openai + + print("perplexity test\n\n") + litellm.set_verbose = False + ## Test azure call + old_azure_key = os.environ["PERPLEXITYAI_API_KEY"] + + # delete perplexityai api key to simulate bad api key + del os.environ["PERPLEXITYAI_API_KEY"] + + # temporaily delete openai api key + original_openai_key = os.environ["OPENAI_API_KEY"] + del os.environ["OPENAI_API_KEY"] + + response = completion( + model="perplexity/mistral-7b-instruct", + messages=[{"role": "user", "content": "hello"}], + ) + os.environ["PERPLEXITYAI_API_KEY"] = old_azure_key + os.environ["OPENAI_API_KEY"] = original_openai_key + pytest.fail("Request should have failed - bad api key") + except openai.AuthenticationError as e: + os.environ["PERPLEXITYAI_API_KEY"] = old_azure_key + os.environ["OPENAI_API_KEY"] = original_openai_key + print("exception: ", e) + assert ( + "perplexity.perplexityError: The api_key client option must be set either by passing api_key to the client or by setting the PERPLEXITY_API_KEY environment variable" + in str(e) + ) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +# test_completion_perplexity_exception_on_openai_client() + + +def test_completion_perplexity_exception(): + try: + import openai + + print("perplexity test\n\n") + litellm.set_verbose = True + ## Test azure call + old_azure_key = os.environ["PERPLEXITYAI_API_KEY"] + os.environ["PERPLEXITYAI_API_KEY"] = "good morning" + response = completion( + model="perplexity/mistral-7b-instruct", + messages=[{"role": "user", "content": "hello"}], + ) + os.environ["PERPLEXITYAI_API_KEY"] = old_azure_key + pytest.fail("Request should have failed - bad api key") + except openai.AuthenticationError as e: + os.environ["PERPLEXITYAI_API_KEY"] = old_azure_key + print("exception: ", e) + assert "PerplexityException" in str(e) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +def test_completion_openai_api_key_exception(): + try: + import openai + + print("gpt-3.5 test\n\n") + litellm.set_verbose = True + ## Test azure call + old_azure_key = os.environ["OPENAI_API_KEY"] + os.environ["OPENAI_API_KEY"] = "good morning" + response = completion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "hello"}], + ) + os.environ["OPENAI_API_KEY"] = old_azure_key + pytest.fail("Request should have failed - bad api key") + except openai.AuthenticationError as e: + os.environ["OPENAI_API_KEY"] = old_azure_key + print("exception: ", e) + assert "OpenAIException" in str(e) + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +# tesy_async_acompletion() + # # test_invalid_request_error(model="command-nightly") # # Test 3: Rate Limit Errors # def test_model_call(model): diff --git a/litellm/tests/test_health_check.py b/litellm/tests/test_health_check.py index 3996c8d09..21b72d2ac 100644 --- a/litellm/tests/test_health_check.py +++ b/litellm/tests/test_health_check.py @@ -20,8 +20,7 @@ async def test_azure_health_check(): "api_key": os.getenv("AZURE_API_KEY"), "api_base": os.getenv("AZURE_API_BASE"), "api_version": os.getenv("AZURE_API_VERSION"), - }, - mode="completion", + } ) print(f"response: {response}") diff --git a/litellm/tests/test_image_generation.py b/litellm/tests/test_image_generation.py index 3c792f802..59ccaacd8 100644 --- a/litellm/tests/test_image_generation.py +++ b/litellm/tests/test_image_generation.py @@ -51,7 +51,10 @@ def test_image_generation_azure(): except litellm.ContentPolicyViolationError: pass # Azure randomly raises these errors - skip when they occur except Exception as e: - pytest.fail(f"An exception occurred - {str(e)}") + if "Your task failed as a result of our safety system." in str(e): + pass + else: + pytest.fail(f"An exception occurred - {str(e)}") # test_image_generation_azure() @@ -74,7 +77,10 @@ def test_image_generation_azure_dall_e_3(): except litellm.ContentPolicyViolationError: pass # OpenAI randomly raises these errors - skip when they occur except Exception as e: - pytest.fail(f"An exception occurred - {str(e)}") + if "Your task failed as a result of our safety system." in str(e): + pass + else: + pytest.fail(f"An exception occurred - {str(e)}") # test_image_generation_azure_dall_e_3() @@ -109,4 +115,47 @@ async def test_async_image_generation_azure(): except litellm.ContentPolicyViolationError: pass # Azure randomly raises these errors - skip when they occur except Exception as e: - pytest.fail(f"An exception occurred - {str(e)}") + if "Your task failed as a result of our safety system." in str(e): + pass + else: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_image_generation_bedrock(): + try: + litellm.set_verbose = True + response = litellm.image_generation( + prompt="A cute baby sea otter", + model="bedrock/stability.stable-diffusion-xl-v0", + aws_region_name="us-east-1", + ) + print(f"response: {response}") + except litellm.RateLimitError as e: + pass + except litellm.ContentPolicyViolationError: + pass # Azure randomly raises these errors - skip when they occur + except Exception as e: + if "Your task failed as a result of our safety system." in str(e): + pass + else: + pytest.fail(f"An exception occurred - {str(e)}") + + +@pytest.mark.asyncio +async def test_aimage_generation_bedrock_with_optional_params(): + try: + response = await litellm.aimage_generation( + prompt="A cute baby sea otter", + model="bedrock/stability.stable-diffusion-xl-v0", + size="128x128", + ) + print(f"response: {response}") + except litellm.RateLimitError as e: + pass + except litellm.ContentPolicyViolationError: + pass # Azure randomly raises these errors - skip when they occur + except Exception as e: + if "Your task failed as a result of our safety system." in str(e): + pass + else: + pytest.fail(f"An exception occurred - {str(e)}") diff --git a/litellm/tests/test_key_generate_dynamodb.py b/litellm/tests/test_key_generate_dynamodb.py new file mode 100644 index 000000000..61d0ff6a6 --- /dev/null +++ b/litellm/tests/test_key_generate_dynamodb.py @@ -0,0 +1,511 @@ +# Test the following scenarios: +# 1. Generate a Key, and use it to make a call +# 2. Make a call with invalid key, expect it to fail +# 3. Make a call to a key with invalid model - expect to fail +# 4. Make a call to a key with valid model - expect to pass +# 5. Make a call with key over budget, expect to fail +# 6. Make a streaming chat/completions call with key over budget, expect to fail + + +# function to call to generate key - async def new_user(data: NewUserRequest): +# function to validate a request - async def user_auth(request: Request): + +import sys, os +import traceback +from dotenv import load_dotenv +from fastapi import Request + +load_dotenv() +import os, io + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest, logging, asyncio +import litellm, asyncio +from litellm.proxy.proxy_server import ( + new_user, + user_api_key_auth, + user_update, + generate_key_fn, +) + +from litellm.proxy._types import NewUserRequest, DynamoDBArgs, GenerateKeyRequest +from litellm.proxy.utils import DBClient, hash_token +from starlette.datastructures import URL + + +request_data = { + "model": "azure-gpt-3.5", + "messages": [ + {"role": "user", "content": "this is my new test. respond in 50 lines"} + ], +} + + +@pytest.fixture +def custom_db_client(): + # Assuming DBClient is a class that needs to be instantiated + db_args = { + "ssl_verify": False, + "billing_mode": "PAY_PER_REQUEST", + "region_name": "us-west-2", + } + custom_db_client = DBClient( + custom_db_type="dynamo_db", + custom_db_args=db_args, + ) + # Reset litellm.proxy.proxy_server.prisma_client to None + litellm.proxy.proxy_server.prisma_client = None + + return custom_db_client + + +def test_generate_and_call_with_valid_key(custom_db_client): + # 1. Generate a Key, and use it to make a call + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + request = NewUserRequest() + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_call_with_invalid_key(custom_db_client): + # 2. Make a call with invalid key, expect it to fail + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + generated_key = "bad-key" + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}, receive=None) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + pytest.fail(f"This should have failed!. IT's an invalid key") + + asyncio.run(test()) + except Exception as e: + print("Got Exception", e) + print(e.message) + assert "Authentication Error" in e.message + pass + + +def test_call_with_invalid_model(custom_db_client): + # 3. Make a call to a key with an invalid model - expect to fail + from litellm._logging import verbose_proxy_logger + import logging + + verbose_proxy_logger.setLevel(logging.DEBUG) + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + request = NewUserRequest(models=["mistral"]) + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + async def return_body(): + return b'{"model": "gemini-pro-vision"}' + + request.body = return_body + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + pytest.fail(f"This should have failed!. IT's an invalid model") + + asyncio.run(test()) + except Exception as e: + assert ( + e.message + == "Authentication Error, API Key not allowed to access model. This token can only access models=['mistral']. Tried to access gemini-pro-vision" + ) + pass + + +def test_call_with_valid_model(custom_db_client): + # 4. Make a call to a key with a valid model - expect to pass + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + request = NewUserRequest(models=["mistral"]) + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + async def return_body(): + return b'{"model": "mistral"}' + + request.body = return_body + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_call_with_user_over_budget(custom_db_client): + # 5. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + from litellm._logging import verbose_proxy_logger, verbose_logger + import logging + + litellm.set_verbose = True + verbose_logger.setLevel(logging.DEBUG) + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + + async def test(): + request = NewUserRequest(max_budget=0.00001) + key = await new_user(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": False, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=resp, + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededBudget:" in error_detail + print(vars(e)) + + +def test_call_with_user_over_budget_stream(custom_db_client): + # 6. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + from litellm._logging import verbose_proxy_logger + import logging + + litellm.set_verbose = True + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + + async def test(): + request = NewUserRequest(max_budget=0.00001) + key = await new_user(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": True, + "complete_streaming_response": resp, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=ModelResponse(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededBudget:" in error_detail + print(vars(e)) + + +def test_call_with_user_key_budget(custom_db_client): + # 7. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + from litellm._logging import verbose_proxy_logger + import logging + + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + + async def test(): + request = GenerateKeyRequest(max_budget=0.00001) + key = await generate_key_fn(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": False, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=resp, + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededTokenBudget:" in error_detail + print(vars(e)) + + +def test_call_with_key_over_budget_stream(custom_db_client): + # 8. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + from litellm._logging import verbose_proxy_logger + import logging + + litellm.set_verbose = True + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + + async def test(): + request = GenerateKeyRequest(max_budget=0.00001) + key = await generate_key_fn(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": True, + "complete_streaming_response": resp, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=ModelResponse(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededTokenBudget:" in error_detail + print(vars(e)) + + +def test_dynamo_db_migration(custom_db_client): + # Tests the temporary patch we have in place + setattr(litellm.proxy.proxy_server, "custom_db_client", custom_db_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm.proxy.proxy_server, "user_custom_auth", None) + try: + + async def test(): + bearer_token = ( + "Bearer " + "sk-elJDL2pOEjcAuC7zD4psAg" + ) # this works with ishaan's db, it's a never expiring key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + async def return_body(): + return b'{"model": "azure-models"}' + + request.body = return_body + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") diff --git a/litellm/tests/test_key_generate_prisma.py b/litellm/tests/test_key_generate_prisma.py new file mode 100644 index 000000000..734a0b114 --- /dev/null +++ b/litellm/tests/test_key_generate_prisma.py @@ -0,0 +1,1380 @@ +# Test the following scenarios: +# 1. Generate a Key, and use it to make a call +# 2. Make a call with invalid key, expect it to fail +# 3. Make a call to a key with invalid model - expect to fail +# 4. Make a call to a key with valid model - expect to pass +# 5. Make a call with user over budget, expect to fail +# 6. Make a streaming chat/completions call with user over budget, expect to fail +# 7. Make a call with an key that never expires, expect to pass +# 8. Make a call with an expired key, expect to fail +# 9. Delete a Key +# 10. Generate a key, call key/info. Assert info returned is the same as generated key info +# 11. Generate a Key, cal key/info, call key/update, call key/info +# 12. Make a call with key over budget, expect to fail +# 14. Make a streaming chat/completions call with key over budget, expect to fail +# 15. Generate key, when `allow_user_auth`=False - check if `/key/info` returns key_name=null +# 16. Generate key, when `allow_user_auth`=True - check if `/key/info` returns key_name=sk... + + +# function to call to generate key - async def new_user(data: NewUserRequest): +# function to validate a request - async def user_auth(request: Request): + +import sys, os +import traceback +from dotenv import load_dotenv +from fastapi import Request +from datetime import datetime + +load_dotenv() +import os, io, time + +# this file is to test litellm/proxy + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest, logging, asyncio +import litellm, asyncio +from litellm.proxy.proxy_server import ( + new_user, + generate_key_fn, + user_api_key_auth, + user_update, + delete_key_fn, + info_key_fn, + update_key_fn, + generate_key_fn, + spend_user_fn, + spend_key_fn, + view_spend_logs, + user_info, +) +from litellm.proxy.utils import PrismaClient, ProxyLogging, hash_token +from litellm._logging import verbose_proxy_logger + +verbose_proxy_logger.setLevel(level=logging.DEBUG) + +from litellm.proxy._types import ( + NewUserRequest, + GenerateKeyRequest, + DynamoDBArgs, + DeleteKeyRequest, + UpdateKeyRequest, + GenerateKeyRequest, +) +from litellm.proxy.utils import DBClient +from starlette.datastructures import URL +from litellm.caching import DualCache + +proxy_logging_obj = ProxyLogging(user_api_key_cache=DualCache()) + + +request_data = { + "model": "azure-gpt-3.5", + "messages": [ + {"role": "user", "content": "this is my new test. respond in 50 lines"} + ], +} + + +@pytest.fixture +def prisma_client(): + # Assuming DBClient is a class that needs to be instantiated + prisma_client = PrismaClient( + database_url=os.environ["DATABASE_URL"], proxy_logging_obj=proxy_logging_obj + ) + + # Reset litellm.proxy.proxy_server.prisma_client to None + litellm.proxy.proxy_server.custom_db_client = None + litellm.proxy.proxy_server.litellm_proxy_budget_name = ( + f"litellm-proxy-budget-{time.time()}" + ) + litellm.proxy.proxy_server.user_custom_key_generate = None + + return prisma_client + + +def test_generate_and_call_with_valid_key(prisma_client): + # 1. Generate a Key, and use it to make a call + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + from litellm.proxy.proxy_server import user_api_key_cache + + request = NewUserRequest(user_role="app_owner") + key = await new_user(request) + print(key) + user_id = key.user_id + + # check /user/info to verify user_role was set correctly + new_user_info = await user_info(user_id=user_id) + new_user_info = new_user_info["user_info"] + print("new_user_info=", new_user_info) + assert new_user_info.user_role == "app_owner" + assert new_user_info.user_id == user_id + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + assert generated_key not in user_api_key_cache.in_memory_cache.cache_dict + assert ( + hash_token(generated_key) + in user_api_key_cache.in_memory_cache.cache_dict + ) + + cached_value = user_api_key_cache.in_memory_cache.cache_dict[ + hash_token(generated_key) + ] + + print("cached value=", cached_value) + print("cached token", cached_value.token) + + value_from_prisma = valid_token = await prisma_client.get_data( + token=generated_key, + ) + print("token from prisma", value_from_prisma) + + assert value_from_prisma.token == cached_value.token + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_call_with_invalid_key(prisma_client): + # 2. Make a call with invalid key, expect it to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + generated_key = "bad-key" + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}, receive=None) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("got result", result) + pytest.fail(f"This should have failed!. IT's an invalid key") + + asyncio.run(test()) + except Exception as e: + print("Got Exception", e) + print(e.message) + assert "Authentication Error" in e.message + pass + + +def test_call_with_invalid_model(prisma_client): + # 3. Make a call to a key with an invalid model - expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest(models=["mistral"]) + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + async def return_body(): + return b'{"model": "gemini-pro-vision"}' + + request.body = return_body + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + pytest.fail(f"This should have failed!. IT's an invalid model") + + asyncio.run(test()) + except Exception as e: + assert ( + e.message + == "Authentication Error, API Key not allowed to access model. This token can only access models=['mistral']. Tried to access gemini-pro-vision" + ) + pass + + +def test_call_with_valid_model(prisma_client): + # 4. Make a call to a key with a valid model - expect to pass + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest(models=["mistral"]) + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + async def return_body(): + return b'{"model": "mistral"}' + + request.body = return_body + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_call_with_user_over_budget(prisma_client): + # 5. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest(max_budget=0.00001) + key = await new_user(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": False, + "litellm_params": { + "metadata": { + "user_api_key": generated_key, + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=resp, + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededBudget:" in error_detail + print(vars(e)) + + +def test_call_with_proxy_over_budget(prisma_client): + # 5.1 Make a call with a proxy over budget, expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + litellm_proxy_budget_name = f"litellm-proxy-budget-{time.time()}" + setattr( + litellm.proxy.proxy_server, + "litellm_proxy_budget_name", + litellm_proxy_budget_name, + ) + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + ## CREATE PROXY + USER BUDGET ## + request = NewUserRequest( + max_budget=0.00001, user_id=litellm_proxy_budget_name + ) + await new_user(request) + request = NewUserRequest() + key = await new_user(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": False, + "litellm_params": { + "metadata": { + "user_api_key": generated_key, + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=resp, + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + if hasattr(e, "message"): + error_detail = e.message + else: + error_detail = traceback.format_exc() + assert "Authentication Error, ExceededBudget:" in error_detail + print(vars(e)) + + +def test_call_with_user_over_budget_stream(prisma_client): + # 6. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + from litellm._logging import verbose_proxy_logger + import logging + + litellm.set_verbose = True + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest(max_budget=0.00001) + key = await new_user(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": True, + "complete_streaming_response": resp, + "litellm_params": { + "metadata": { + "user_api_key": generated_key, + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=ModelResponse(), + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededBudget:" in error_detail + print(vars(e)) + + +def test_call_with_proxy_over_budget_stream(prisma_client): + # 6.1 Make a call with a global proxy over budget, expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + litellm_proxy_budget_name = f"litellm-proxy-budget-{time.time()}" + setattr( + litellm.proxy.proxy_server, + "litellm_proxy_budget_name", + litellm_proxy_budget_name, + ) + from litellm._logging import verbose_proxy_logger + import logging + + litellm.set_verbose = True + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + ## CREATE PROXY + USER BUDGET ## + request = NewUserRequest( + max_budget=0.00001, user_id=litellm_proxy_budget_name + ) + await new_user(request) + request = NewUserRequest() + key = await new_user(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + + resp = ModelResponse( + id="chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac", + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "stream": True, + "complete_streaming_response": resp, + "litellm_params": { + "metadata": { + "user_api_key": generated_key, + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=ModelResponse(), + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + error_detail = e.message + assert "Authentication Error, ExceededBudget:" in error_detail + print(vars(e)) + + +def test_generate_and_call_with_valid_key_never_expires(prisma_client): + # 7. Make a call with an key that never expires, expect to pass + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest(duration=None) + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_generate_and_call_with_expired_key(prisma_client): + # 8. Make a call with an expired key, expect to fail + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest(duration="0s") + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. IT's an expired key") + + asyncio.run(test()) + except Exception as e: + print("Got Exception", e) + print(e.message) + assert "Authentication Error" in e.message + pass + + +def test_delete_key(prisma_client): + # 9. Generate a Key, delete it. Check if deletion works fine + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + from litellm.proxy.proxy_server import user_api_key_cache + + request = NewUserRequest() + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + delete_key_request = DeleteKeyRequest(keys=[generated_key]) + + # delete the key + result_delete_key = await delete_key_fn(data=delete_key_request) + print("result from delete key", result_delete_key) + assert result_delete_key == {"deleted_keys": [generated_key]} + + assert generated_key not in user_api_key_cache.in_memory_cache.cache_dict + assert ( + hash_token(generated_key) + not in user_api_key_cache.in_memory_cache.cache_dict + ) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_delete_key_auth(prisma_client): + # 10. Generate a Key, delete it, use it to make a call -> expect fail + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + from litellm.proxy.proxy_server import user_api_key_cache + + request = NewUserRequest() + key = await new_user(request) + print(key) + + generated_key = key.key + bearer_token = "Bearer " + generated_key + + delete_key_request = DeleteKeyRequest(keys=[generated_key]) + + # delete the key + result_delete_key = await delete_key_fn(data=delete_key_request) + + print("result from delete key", result_delete_key) + assert result_delete_key == {"deleted_keys": [generated_key]} + + request = Request(scope={"type": "http"}, receive=None) + request._url = URL(url="/chat/completions") + + assert generated_key not in user_api_key_cache.in_memory_cache.cache_dict + assert ( + hash_token(generated_key) + not in user_api_key_cache.in_memory_cache.cache_dict + ) + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("got result", result) + pytest.fail(f"This should have failed!. IT's an invalid key") + + asyncio.run(test()) + except Exception as e: + print("Got Exception", e) + print(e.message) + assert "Authentication Error" in e.message + pass + + +def test_generate_and_call_key_info(prisma_client): + # 10. Generate a Key, cal key/info + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest( + metadata={"team": "litellm-team3", "project": "litellm-project3"} + ) + key = await new_user(request) + print(key) + + generated_key = key.key + + # use generated key to auth in + result = await info_key_fn(key=generated_key) + print("result from info_key_fn", result) + assert result["key"] == generated_key + print("\n info for key=", result["info"]) + assert result["info"]["max_parallel_requests"] == None + assert result["info"]["metadata"] == { + "team": "litellm-team3", + "project": "litellm-project3", + } + + # cleanup - delete key + delete_key_request = DeleteKeyRequest(keys=[generated_key]) + + # delete the key + await delete_key_fn(data=delete_key_request) + + asyncio.run(test()) + except Exception as e: + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_generate_and_update_key(prisma_client): + # 11. Generate a Key, cal key/info, call key/update, call key/info + # Check if data gets updated + # Check if untouched data does not get updated + + print("prisma client=", prisma_client) + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = NewUserRequest( + metadata={"team": "litellm-team3", "project": "litellm-project3"}, + team_id="litellm-core-infra@gmail.com", + ) + key = await new_user(request) + print(key) + + generated_key = key.key + + # use generated key to auth in + result = await info_key_fn(key=generated_key) + print("result from info_key_fn", result) + assert result["key"] == generated_key + print("\n info for key=", result["info"]) + assert result["info"]["max_parallel_requests"] == None + assert result["info"]["metadata"] == { + "team": "litellm-team3", + "project": "litellm-project3", + } + assert result["info"]["team_id"] == "litellm-core-infra@gmail.com" + + request = Request(scope={"type": "http"}) + request._url = URL(url="/update/key") + + # update the key + await update_key_fn( + request=Request, + data=UpdateKeyRequest( + key=generated_key, + models=["ada", "babbage", "curie", "davinci"], + ), + ) + + # get info on key after update + result = await info_key_fn(key=generated_key) + print("result from info_key_fn", result) + assert result["key"] == generated_key + print("\n info for key=", result["info"]) + assert result["info"]["max_parallel_requests"] == None + assert result["info"]["metadata"] == { + "team": "litellm-team3", + "project": "litellm-project3", + } + assert result["info"]["models"] == ["ada", "babbage", "curie", "davinci"] + + # cleanup - delete key + delete_key_request = DeleteKeyRequest(keys=[generated_key]) + + # delete the key + await delete_key_fn(data=delete_key_request) + + asyncio.run(test()) + except Exception as e: + print("Got Exception", e) + print(e.message) + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_key_generate_with_custom_auth(prisma_client): + # custom - generate key function + async def custom_generate_key_fn(data: GenerateKeyRequest) -> dict: + """ + Asynchronous function for generating a key based on the input data. + + Args: + data (GenerateKeyRequest): The input data for key generation. + + Returns: + dict: A dictionary containing the decision and an optional message. + { + "decision": False, + "message": "This violates LiteLLM Proxy Rules. No team id provided.", + } + """ + + # decide if a key should be generated or not + print("using custom auth function!") + data_json = data.json() # type: ignore + + # Unpacking variables + team_id = data_json.get("team_id") + duration = data_json.get("duration") + models = data_json.get("models") + aliases = data_json.get("aliases") + config = data_json.get("config") + spend = data_json.get("spend") + user_id = data_json.get("user_id") + max_parallel_requests = data_json.get("max_parallel_requests") + metadata = data_json.get("metadata") + tpm_limit = data_json.get("tpm_limit") + rpm_limit = data_json.get("rpm_limit") + + if team_id is not None and team_id == "litellm-core-infra@gmail.com": + # only team_id="litellm-core-infra@gmail.com" can make keys + return { + "decision": True, + } + else: + print("Failed custom auth") + return { + "decision": False, + "message": "This violates LiteLLM Proxy Rules. No team id provided.", + } + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr( + litellm.proxy.proxy_server, "user_custom_key_generate", custom_generate_key_fn + ) + try: + + async def test(): + try: + await litellm.proxy.proxy_server.prisma_client.connect() + request = GenerateKeyRequest() + key = await generate_key_fn(request) + pytest.fail(f"Expected an exception. Got {key}") + except Exception as e: + # this should fail + print("Got Exception", e) + print(e.message) + print("First request failed!. This is expected") + assert ( + "This violates LiteLLM Proxy Rules. No team id provided." + in e.message + ) + + request_2 = GenerateKeyRequest( + team_id="litellm-core-infra@gmail.com", + ) + + key = await generate_key_fn(request_2) + print(key) + generated_key = key.key + + asyncio.run(test()) + except Exception as e: + print("Got Exception", e) + print(e.message) + pytest.fail(f"An exception occurred - {str(e)}") + + +def test_call_with_key_over_budget(prisma_client): + # 12. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + + async def test(): + await litellm.proxy.proxy_server.prisma_client.connect() + request = GenerateKeyRequest(max_budget=0.00001) + key = await generate_key_fn(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + from litellm.caching import Cache + + litellm.cache = Cache() + import time + + request_id = f"chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac{time.time()}" + + resp = ModelResponse( + id=request_id, + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "model": "chatgpt-v-2", + "stream": False, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00002, + }, + completion_response=resp, + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(10) + # test spend_log was written and we can read it + spend_logs = await view_spend_logs(request_id=request_id) + + print("read spend logs", spend_logs) + assert len(spend_logs) == 1 + + spend_log = spend_logs[0] + + assert spend_log.request_id == request_id + assert spend_log.spend == float("2e-05") + assert spend_log.model == "chatgpt-v-2" + assert ( + spend_log.cache_key + == "a61ae14fe4a8b8014a61e6ae01a100c8bc6770ac37c293242afed954bc69207d" + ) + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + asyncio.run(test()) + except Exception as e: + # print(f"Error - {str(e)}") + traceback.print_exc() + error_detail = e.message + assert "Authentication Error, ExceededTokenBudget:" in error_detail + print(vars(e)) + + +@pytest.mark.asyncio() +async def test_call_with_key_never_over_budget(prisma_client): + # Make a call with a key with budget=None, it should never fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + try: + await litellm.proxy.proxy_server.prisma_client.connect() + request = GenerateKeyRequest(max_budget=None) + key = await generate_key_fn(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + import time + + request_id = f"chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac{time.time()}" + + resp = ModelResponse( + id=request_id, + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage( + prompt_tokens=210000, completion_tokens=200000, total_tokens=41000 + ), + ) + await track_cost_callback( + kwargs={ + "model": "chatgpt-v-2", + "stream": False, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 200000, + }, + completion_response=resp, + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + except Exception as e: + pytest.fail(f"This should have not failed!. They key uses max_budget=None. {e}") + + +@pytest.mark.asyncio() +async def test_call_with_key_over_budget_stream(prisma_client): + # 14. Make a call with a key over budget, expect to fail + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + from litellm._logging import verbose_proxy_logger + import logging + + litellm.set_verbose = True + verbose_proxy_logger.setLevel(logging.DEBUG) + try: + await litellm.proxy.proxy_server.prisma_client.connect() + request = GenerateKeyRequest(max_budget=0.00001) + key = await generate_key_fn(request) + print(key) + + generated_key = key.key + user_id = key.user_id + bearer_token = "Bearer " + generated_key + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + + # update spend using track_cost callback, make 2nd request, it should fail + from litellm.proxy.proxy_server import ( + _PROXY_track_cost_callback as track_cost_callback, + ) + from litellm import ModelResponse, Choices, Message, Usage + import time + + request_id = f"chatcmpl-e41836bb-bb8b-4df2-8e70-8f3e160155ac{time.time()}" + resp = ModelResponse( + id=request_id, + choices=[ + Choices( + finish_reason=None, + index=0, + message=Message( + content=" Sure! Here is a short poem about the sky:\n\nA canvas of blue, a", + role="assistant", + ), + ) + ], + model="gpt-35-turbo", # azure always has model written like this + usage=Usage(prompt_tokens=210, completion_tokens=200, total_tokens=410), + ) + await track_cost_callback( + kwargs={ + "call_type": "acompletion", + "model": "sagemaker-chatgpt-v-2", + "stream": True, + "complete_streaming_response": resp, + "litellm_params": { + "metadata": { + "user_api_key": hash_token(generated_key), + "user_api_key_user_id": user_id, + } + }, + "response_cost": 0.00005, + }, + completion_response=resp, + start_time=datetime.now(), + end_time=datetime.now(), + ) + await asyncio.sleep(5) + # use generated key to auth in + result = await user_api_key_auth(request=request, api_key=bearer_token) + print("result from user auth with new key", result) + pytest.fail(f"This should have failed!. They key crossed it's budget") + + except Exception as e: + print("Got Exception", e) + error_detail = e.message + assert "Authentication Error, ExceededTokenBudget:" in error_detail + print(vars(e)) + + +@pytest.mark.asyncio() +async def test_view_spend_per_user(prisma_client): + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + await litellm.proxy.proxy_server.prisma_client.connect() + try: + user_by_spend = await spend_user_fn(user_id=None) + assert type(user_by_spend) == list + assert len(user_by_spend) > 0 + first_user = user_by_spend[0] + + print("\nfirst_user=", first_user) + assert first_user.spend > 0 + except Exception as e: + print("Got Exception", e) + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio() +async def test_view_spend_per_key(prisma_client): + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + await litellm.proxy.proxy_server.prisma_client.connect() + try: + key_by_spend = await spend_key_fn() + assert type(key_by_spend) == list + assert len(key_by_spend) > 0 + first_key = key_by_spend[0] + + print("\nfirst_key=", first_key) + assert first_key.spend > 0 + except Exception as e: + print("Got Exception", e) + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio() +async def test_key_name_null(prisma_client): + """ + - create key + - get key info + - assert key_name is null + """ + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm.proxy.proxy_server, "general_settings", {"allow_user_auth": False}) + await litellm.proxy.proxy_server.prisma_client.connect() + try: + request = GenerateKeyRequest() + key = await generate_key_fn(request) + generated_key = key.key + result = await info_key_fn(key=generated_key) + print("result from info_key_fn", result) + assert result["info"]["key_name"] is None + except Exception as e: + print("Got Exception", e) + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio() +async def test_key_name_set(prisma_client): + """ + - create key + - get key info + - assert key_name is not null + """ + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm.proxy.proxy_server, "general_settings", {"allow_user_auth": True}) + await litellm.proxy.proxy_server.prisma_client.connect() + try: + request = GenerateKeyRequest() + key = await generate_key_fn(request) + generated_key = key.key + result = await info_key_fn(key=generated_key) + print("result from info_key_fn", result) + assert isinstance(result["info"]["key_name"], str) + except Exception as e: + print("Got Exception", e) + pytest.fail(f"Got exception {e}") + + +@pytest.mark.asyncio() +async def test_default_key_params(prisma_client): + """ + - create key + - get key info + - assert key_name is not null + """ + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm.proxy.proxy_server, "general_settings", {"allow_user_auth": True}) + litellm.default_key_generate_params = {"max_budget": 0.000122} + await litellm.proxy.proxy_server.prisma_client.connect() + try: + request = GenerateKeyRequest() + key = await generate_key_fn(request) + generated_key = key.key + result = await info_key_fn(key=generated_key) + print("result from info_key_fn", result) + assert result["info"]["max_budget"] == 0.000122 + except Exception as e: + print("Got Exception", e) + pytest.fail(f"Got exception {e}") + + +def test_get_bearer_token(): + from litellm.proxy.proxy_server import _get_bearer_token + + # Test valid Bearer token + api_key = "Bearer valid_token" + result = _get_bearer_token(api_key) + assert result == "valid_token", f"Expected 'valid_token', got '{result}'" + + # Test empty API key + api_key = "" + result = _get_bearer_token(api_key) + assert result == "", f"Expected '', got '{result}'" + + # Test API key without Bearer prefix + api_key = "invalid_token" + result = _get_bearer_token(api_key) + assert result == "", f"Expected '', got '{result}'" + + # Test API key with Bearer prefix in lowercase + api_key = "bearer valid_token" + result = _get_bearer_token(api_key) + assert result == "", f"Expected '', got '{result}'" + + # Test API key with Bearer prefix and extra spaces + api_key = " Bearer valid_token " + result = _get_bearer_token(api_key) + assert result == "", f"Expected '', got '{result}'" + + # Test API key with Bearer prefix and no token + api_key = "Bearer sk-1234" + result = _get_bearer_token(api_key) + assert result == "sk-1234", f"Expected 'valid_token', got '{result}'" + + +@pytest.mark.asyncio +async def test_user_api_key_auth(prisma_client): + from litellm.proxy.proxy_server import ProxyException + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", "sk-1234") + setattr(litellm.proxy.proxy_server, "general_settings", {"allow_user_auth": True}) + await litellm.proxy.proxy_server.prisma_client.connect() + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + # Test case: No API Key passed in + try: + await user_api_key_auth(request, api_key=None) + pytest.fail(f"This should have failed!. IT's an invalid key") + except ProxyException as exc: + print(exc.message) + assert exc.message == "Authentication Error, No api key passed in." + + # Test case: Malformed API Key (missing 'Bearer ' prefix) + try: + await user_api_key_auth(request, api_key="my_token") + pytest.fail(f"This should have failed!. IT's an invalid key") + except ProxyException as exc: + print(exc.message) + assert ( + exc.message + == "Authentication Error, Malformed API Key passed in. Ensure Key has `Bearer ` prefix. Passed in: my_token" + ) + + # Test case: User passes empty string API Key + try: + await user_api_key_auth(request, api_key="") + pytest.fail(f"This should have failed!. IT's an invalid key") + except ProxyException as exc: + print(exc.message) + assert ( + exc.message + == "Authentication Error, Malformed API Key passed in. Ensure Key has `Bearer ` prefix. Passed in: " + ) + + +@pytest.mark.asyncio +async def test_user_api_key_auth_without_master_key(prisma_client): + # if master key is not set, expect all calls to go through + try: + from litellm.proxy.proxy_server import ProxyException + + setattr(litellm.proxy.proxy_server, "prisma_client", prisma_client) + setattr(litellm.proxy.proxy_server, "master_key", None) + setattr( + litellm.proxy.proxy_server, "general_settings", {"allow_user_auth": True} + ) + await litellm.proxy.proxy_server.prisma_client.connect() + + request = Request(scope={"type": "http"}) + request._url = URL(url="/chat/completions") + # Test case: No API Key passed in + + await user_api_key_auth(request, api_key=None) + await user_api_key_auth(request, api_key="my_token") + await user_api_key_auth(request, api_key="") + await user_api_key_auth(request, api_key="Bearer " + "1234") + except Exception as e: + print("Got Exception", e) + pytest.fail(f"Got exception {e}") diff --git a/litellm/tests/test_model_max_token_adjust.py b/litellm/tests/test_model_max_token_adjust.py new file mode 100644 index 000000000..b4d48b5e2 --- /dev/null +++ b/litellm/tests/test_model_max_token_adjust.py @@ -0,0 +1,28 @@ +# What this tests? +## Tests if max tokens get adjusted, if over limit + +import sys, os, time +import traceback, asyncio +import pytest + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import litellm +from litellm import completion + + +def test_completion_sagemaker(): + litellm.set_verbose = True + litellm.drop_params = True + response = completion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=[{"content": "Hello, how are you?", "role": "user"}], + temperature=0.2, + max_tokens=80000, + hf_model_name="meta-llama/Llama-2-70b-chat-hf", + ) + print(f"response: {response}") + + +# test_completion_sagemaker() diff --git a/litellm/tests/test_optional_params.py b/litellm/tests/test_optional_params.py index 784918e88..45c3b8a38 100644 --- a/litellm/tests/test_optional_params.py +++ b/litellm/tests/test_optional_params.py @@ -36,3 +36,85 @@ def test_azure_optional_params_embeddings(): ) assert len(optional_params) == 1 assert optional_params["user"] == "John" + + +def test_azure_gpt_optional_params_gpt_vision(): + # for OpenAI, Azure all extra params need to get passed as extra_body to OpenAI python. We assert we actually set extra_body here + optional_params = litellm.utils.get_optional_params( + user="John", + custom_llm_provider="azure", + max_tokens=10, + temperature=0.2, + enhancements={"ocr": {"enabled": True}, "grounding": {"enabled": True}}, + dataSources=[ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "", + "key": "", + }, + } + ], + ) + + print(optional_params) + assert optional_params["max_tokens"] == 10 + assert optional_params["temperature"] == 0.2 + assert optional_params["extra_body"] == { + "enhancements": {"ocr": {"enabled": True}, "grounding": {"enabled": True}}, + "dataSources": [ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "", + "key": "", + }, + } + ], + } + + +# test_azure_gpt_optional_params_gpt_vision() + + +def test_azure_gpt_optional_params_gpt_vision_with_extra_body(): + # if user passes extra_body, we should not over write it, we should pass it along to OpenAI python + optional_params = litellm.utils.get_optional_params( + user="John", + custom_llm_provider="azure", + max_tokens=10, + temperature=0.2, + extra_body={ + "meta": "hi", + }, + enhancements={"ocr": {"enabled": True}, "grounding": {"enabled": True}}, + dataSources=[ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "", + "key": "", + }, + } + ], + ) + + print(optional_params) + assert optional_params["max_tokens"] == 10 + assert optional_params["temperature"] == 0.2 + assert optional_params["extra_body"] == { + "enhancements": {"ocr": {"enabled": True}, "grounding": {"enabled": True}}, + "dataSources": [ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "", + "key": "", + }, + } + ], + "meta": "hi", + } + + +# test_azure_gpt_optional_params_gpt_vision_with_extra_body() diff --git a/litellm/tests/test_parallel_request_limiter.py b/litellm/tests/test_parallel_request_limiter.py new file mode 100644 index 000000000..1155e5794 --- /dev/null +++ b/litellm/tests/test_parallel_request_limiter.py @@ -0,0 +1,688 @@ +# What this tests? +## Unit Tests for the max parallel request limiter for the proxy + +import sys, os, asyncio, time, random +from datetime import datetime +import traceback +from dotenv import load_dotenv + +load_dotenv() +import os + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path +import pytest +import litellm +from litellm import Router +from litellm.proxy.utils import ProxyLogging +from litellm.proxy._types import UserAPIKeyAuth +from litellm.caching import DualCache +from litellm.proxy.hooks.parallel_request_limiter import ( + _PROXY_MaxParallelRequestsHandler as MaxParallelRequestsHandler, +) +from datetime import datetime + +## On Request received +## On Request success +## On Request failure + + +@pytest.mark.asyncio +async def test_pre_call_hook(): + """ + Test if cache updated on call being received + """ + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=1) + local_cache = DualCache() + parallel_request_handler = MaxParallelRequestsHandler() + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + print( + parallel_request_handler.user_api_key_cache.get_cache(key=request_count_api_key) + ) + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + +@pytest.mark.asyncio +async def test_pre_call_hook_rpm_limits(): + """ + Test if error raised on hitting rpm limits + """ + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth( + api_key=_api_key, max_parallel_requests=1, tpm_limit=9, rpm_limit=1 + ) + local_cache = DualCache() + parallel_request_handler = MaxParallelRequestsHandler() + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + kwargs = {"litellm_params": {"metadata": {"user_api_key": _api_key}}} + + await parallel_request_handler.async_log_success_event( + kwargs=kwargs, + response_obj="", + start_time="", + end_time="", + ) + + ## Expected cache val: {"current_requests": 0, "current_tpm": 0, "current_rpm": 1} + + try: + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, + cache=local_cache, + data={}, + call_type="", + ) + + pytest.fail(f"Expected call to fail") + except Exception as e: + assert e.status_code == 429 + + +@pytest.mark.asyncio +async def test_pre_call_hook_tpm_limits(): + """ + Test if error raised on hitting tpm limits + """ + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth( + api_key=_api_key, max_parallel_requests=1, tpm_limit=9, rpm_limit=10 + ) + local_cache = DualCache() + parallel_request_handler = MaxParallelRequestsHandler() + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + kwargs = {"litellm_params": {"metadata": {"user_api_key": _api_key}}} + + await parallel_request_handler.async_log_success_event( + kwargs=kwargs, + response_obj=litellm.ModelResponse(usage=litellm.Usage(total_tokens=10)), + start_time="", + end_time="", + ) + + ## Expected cache val: {"current_requests": 0, "current_tpm": 0, "current_rpm": 1} + + try: + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, + cache=local_cache, + data={}, + call_type="", + ) + + pytest.fail(f"Expected call to fail") + except Exception as e: + assert e.status_code == 429 + + +@pytest.mark.asyncio +async def test_success_call_hook(): + """ + Test if on success, cache correctly decremented + """ + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=1) + local_cache = DualCache() + parallel_request_handler = MaxParallelRequestsHandler() + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + kwargs = {"litellm_params": {"metadata": {"user_api_key": _api_key}}} + + await parallel_request_handler.async_log_success_event( + kwargs=kwargs, response_obj="", start_time="", end_time="" + ) + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 0 + ) + + +@pytest.mark.asyncio +async def test_failure_call_hook(): + """ + Test if on failure, cache correctly decremented + """ + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=1) + local_cache = DualCache() + parallel_request_handler = MaxParallelRequestsHandler() + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + kwargs = { + "litellm_params": {"metadata": {"user_api_key": _api_key}}, + "exception": Exception(), + } + + await parallel_request_handler.async_log_failure_event( + kwargs=kwargs, response_obj="", start_time="", end_time="" + ) + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 0 + ) + + +""" +Test with Router +- normal call +- streaming call +- bad call +""" + + +@pytest.mark.asyncio +async def test_normal_router_call(): + model_list = [ + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-turbo", + "api_key": "os.environ/AZURE_FRANCE_API_KEY", + "api_base": "https://openai-france-1234.openai.azure.com", + "rpm": 1440, + }, + "model_info": {"id": 1}, + }, + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-35-turbo", + "api_key": "os.environ/AZURE_EUROPE_API_KEY", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", + "rpm": 6, + }, + "model_info": {"id": 2}, + }, + ] + router = Router( + model_list=model_list, + set_verbose=False, + num_retries=3, + ) # type: ignore + + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=1) + local_cache = DualCache() + pl = ProxyLogging(user_api_key_cache=local_cache) + pl._init_litellm_callbacks() + print(f"litellm callbacks: {litellm.callbacks}") + parallel_request_handler = pl.max_parallel_request_limiter + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + # normal call + response = await router.acompletion( + model="azure-model", + messages=[{"role": "user", "content": "Hey, how's it going?"}], + metadata={"user_api_key": _api_key}, + ) + await asyncio.sleep(1) # success is done in a separate thread + print(f"response: {response}") + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 0 + ) + + +@pytest.mark.asyncio +async def test_normal_router_tpm_limit(): + model_list = [ + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-turbo", + "api_key": "os.environ/AZURE_FRANCE_API_KEY", + "api_base": "https://openai-france-1234.openai.azure.com", + "rpm": 1440, + }, + "model_info": {"id": 1}, + }, + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-35-turbo", + "api_key": "os.environ/AZURE_EUROPE_API_KEY", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", + "rpm": 6, + }, + "model_info": {"id": 2}, + }, + ] + router = Router( + model_list=model_list, + set_verbose=False, + num_retries=3, + ) # type: ignore + + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth( + api_key=_api_key, max_parallel_requests=10, tpm_limit=10 + ) + local_cache = DualCache() + pl = ProxyLogging(user_api_key_cache=local_cache) + pl._init_litellm_callbacks() + print(f"litellm callbacks: {litellm.callbacks}") + parallel_request_handler = pl.max_parallel_request_limiter + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + # normal call + response = await router.acompletion( + model="azure-model", + messages=[{"role": "user", "content": "Write me a paragraph on the moon"}], + metadata={"user_api_key": _api_key}, + ) + await asyncio.sleep(1) # success is done in a separate thread + print(f"response: {response}") + + try: + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, + cache=local_cache, + data={}, + call_type="", + ) + + pytest.fail(f"Expected call to fail") + except Exception as e: + assert e.status_code == 429 + + +@pytest.mark.asyncio +async def test_streaming_router_call(): + model_list = [ + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-turbo", + "api_key": "os.environ/AZURE_FRANCE_API_KEY", + "api_base": "https://openai-france-1234.openai.azure.com", + "rpm": 1440, + }, + "model_info": {"id": 1}, + }, + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-35-turbo", + "api_key": "os.environ/AZURE_EUROPE_API_KEY", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", + "rpm": 6, + }, + "model_info": {"id": 2}, + }, + ] + router = Router( + model_list=model_list, + set_verbose=False, + num_retries=3, + ) # type: ignore + + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=1) + local_cache = DualCache() + pl = ProxyLogging(user_api_key_cache=local_cache) + pl._init_litellm_callbacks() + print(f"litellm callbacks: {litellm.callbacks}") + parallel_request_handler = pl.max_parallel_request_limiter + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + # streaming call + response = await router.acompletion( + model="azure-model", + messages=[{"role": "user", "content": "Hey, how's it going?"}], + stream=True, + metadata={"user_api_key": _api_key}, + ) + async for chunk in response: + continue + await asyncio.sleep(1) # success is done in a separate thread + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 0 + ) + + +@pytest.mark.asyncio +async def test_streaming_router_tpm_limit(): + litellm.set_verbose = True + model_list = [ + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-turbo", + "api_key": "os.environ/AZURE_FRANCE_API_KEY", + "api_base": "https://openai-france-1234.openai.azure.com", + "rpm": 1440, + }, + "model_info": {"id": 1}, + }, + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-35-turbo", + "api_key": "os.environ/AZURE_EUROPE_API_KEY", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", + "rpm": 6, + }, + "model_info": {"id": 2}, + }, + ] + router = Router( + model_list=model_list, + set_verbose=False, + num_retries=3, + ) # type: ignore + + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth( + api_key=_api_key, max_parallel_requests=10, tpm_limit=10 + ) + local_cache = DualCache() + pl = ProxyLogging(user_api_key_cache=local_cache) + pl._init_litellm_callbacks() + print(f"litellm callbacks: {litellm.callbacks}") + parallel_request_handler = pl.max_parallel_request_limiter + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + # normal call + response = await router.acompletion( + model="azure-model", + messages=[{"role": "user", "content": "Write me a paragraph on the moon"}], + stream=True, + metadata={"user_api_key": _api_key}, + ) + async for chunk in response: + continue + await asyncio.sleep(5) # success is done in a separate thread + + try: + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, + cache=local_cache, + data={}, + call_type="", + ) + + pytest.fail(f"Expected call to fail") + except Exception as e: + assert e.status_code == 429 + + +@pytest.mark.asyncio +async def test_bad_router_call(): + model_list = [ + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-turbo", + "api_key": "os.environ/AZURE_FRANCE_API_KEY", + "api_base": "https://openai-france-1234.openai.azure.com", + "rpm": 1440, + }, + "model_info": {"id": 1}, + }, + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-35-turbo", + "api_key": "os.environ/AZURE_EUROPE_API_KEY", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", + "rpm": 6, + }, + "model_info": {"id": 2}, + }, + ] + router = Router( + model_list=model_list, + set_verbose=False, + num_retries=3, + ) # type: ignore + + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth(api_key=_api_key, max_parallel_requests=1) + local_cache = DualCache() + pl = ProxyLogging(user_api_key_cache=local_cache) + pl._init_litellm_callbacks() + print(f"litellm callbacks: {litellm.callbacks}") + parallel_request_handler = pl.max_parallel_request_limiter + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + # bad streaming call + try: + response = await router.acompletion( + model="azure-model", + messages=[{"role": "user2", "content": "Hey, how's it going?"}], + stream=True, + metadata={"user_api_key": _api_key}, + ) + except: + pass + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 0 + ) + + +@pytest.mark.asyncio +async def test_bad_router_tpm_limit(): + model_list = [ + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-turbo", + "api_key": "os.environ/AZURE_FRANCE_API_KEY", + "api_base": "https://openai-france-1234.openai.azure.com", + "rpm": 1440, + }, + "model_info": {"id": 1}, + }, + { + "model_name": "azure-model", + "litellm_params": { + "model": "azure/gpt-35-turbo", + "api_key": "os.environ/AZURE_EUROPE_API_KEY", + "api_base": "https://my-endpoint-europe-berri-992.openai.azure.com", + "rpm": 6, + }, + "model_info": {"id": 2}, + }, + ] + router = Router( + model_list=model_list, + set_verbose=False, + num_retries=3, + ) # type: ignore + + _api_key = "sk-12345" + user_api_key_dict = UserAPIKeyAuth( + api_key=_api_key, max_parallel_requests=10, tpm_limit=10 + ) + local_cache = DualCache() + pl = ProxyLogging(user_api_key_cache=local_cache) + pl._init_litellm_callbacks() + print(f"litellm callbacks: {litellm.callbacks}") + parallel_request_handler = pl.max_parallel_request_limiter + + await parallel_request_handler.async_pre_call_hook( + user_api_key_dict=user_api_key_dict, cache=local_cache, data={}, call_type="" + ) + + current_date = datetime.now().strftime("%Y-%m-%d") + current_hour = datetime.now().strftime("%H") + current_minute = datetime.now().strftime("%M") + precise_minute = f"{current_date}-{current_hour}-{current_minute}" + request_count_api_key = f"{_api_key}::{precise_minute}::request_count" + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_requests"] + == 1 + ) + + # bad call + try: + response = await router.acompletion( + model="azure-model", + messages=[{"role": "user2", "content": "Write me a paragraph on the moon"}], + stream=True, + metadata={"user_api_key": _api_key}, + ) + except: + pass + await asyncio.sleep(1) # success is done in a separate thread + + assert ( + parallel_request_handler.user_api_key_cache.get_cache( + key=request_count_api_key + )["current_tpm"] + == 0 + ) diff --git a/litellm/tests/test_proxy_custom_auth.py b/litellm/tests/test_proxy_custom_auth.py index ceb3d1c93..55ab45624 100644 --- a/litellm/tests/test_proxy_custom_auth.py +++ b/litellm/tests/test_proxy_custom_auth.py @@ -58,9 +58,37 @@ def test_custom_auth(client): headers = {"Authorization": f"Bearer {token}"} response = client.post("/chat/completions", json=test_data, headers=headers) - print(f"response: {response.text}") - assert response.status_code == 401 - result = response.json() - print(f"Received response: {result}") + pytest.fail("LiteLLM Proxy test failed. This request should have been rejected") except Exception as e: - pytest.fail("LiteLLM Proxy test failed. Exception", e) + print(vars(e)) + print("got an exception") + assert e.code == 401 + assert e.message == "Authentication Error, Failed custom auth" + pass + + +def test_custom_auth_bearer(client): + try: + # Your test data + test_data = { + "model": "openai-model", + "messages": [ + {"role": "user", "content": "hi"}, + ], + "max_tokens": 10, + } + # Your bearer token + token = os.getenv("PROXY_MASTER_KEY") + + headers = {"Authorization": f"WITHOUT BEAR Er {token}"} + response = client.post("/chat/completions", json=test_data, headers=headers) + pytest.fail("LiteLLM Proxy test failed. This request should have been rejected") + except Exception as e: + print(vars(e)) + print("got an exception") + assert e.code == 401 + assert ( + e.message + == "Authentication Error, CustomAuth - Malformed API Key passed in. Ensure Key has `Bearer` prefix" + ) + pass diff --git a/litellm/tests/test_proxy_custom_logger.py b/litellm/tests/test_proxy_custom_logger.py index e47351a9b..34e427ef4 100644 --- a/litellm/tests/test_proxy_custom_logger.py +++ b/litellm/tests/test_proxy_custom_logger.py @@ -182,6 +182,7 @@ def test_chat_completion(client): print("\n\n Metadata in custom logger kwargs", litellm_params.get("metadata")) assert metadata is not None assert "user_api_key" in metadata + assert "user_api_key_metadata" in metadata assert "headers" in metadata config_model_info = litellm_params.get("model_info") proxy_server_request_object = litellm_params.get("proxy_server_request") diff --git a/litellm/tests/test_proxy_exception_mapping.py b/litellm/tests/test_proxy_exception_mapping.py index fcc0ad98c..cab26f319 100644 --- a/litellm/tests/test_proxy_exception_mapping.py +++ b/litellm/tests/test_proxy_exception_mapping.py @@ -25,8 +25,8 @@ def client(): filepath = os.path.dirname(os.path.abspath(__file__)) config_fp = f"{filepath}/test_configs/test_bad_config.yaml" asyncio.run(initialize(config=config_fp)) - app = FastAPI() - app.include_router(router) # Include your router in the test app + from litellm.proxy.proxy_server import app + return TestClient(app) @@ -44,6 +44,10 @@ def test_chat_completion_exception(client): response = client.post("/chat/completions", json=test_data) + json_response = response.json() + print("keys in json response", json_response.keys()) + assert json_response.keys() == {"error"} + # make an openai client to call _make_status_error_from_response openai_client = openai.OpenAI(api_key="anything") openai_exception = openai_client._make_status_error_from_response( @@ -69,6 +73,10 @@ def test_chat_completion_exception_azure(client): response = client.post("/chat/completions", json=test_data) + json_response = response.json() + print("keys in json response", json_response.keys()) + assert json_response.keys() == {"error"} + # make an openai client to call _make_status_error_from_response openai_client = openai.OpenAI(api_key="anything") openai_exception = openai_client._make_status_error_from_response( @@ -90,6 +98,10 @@ def test_embedding_auth_exception_azure(client): response = client.post("/embeddings", json=test_data) print("Response from proxy=", response) + json_response = response.json() + print("keys in json response", json_response.keys()) + assert json_response.keys() == {"error"} + # make an openai client to call _make_status_error_from_response openai_client = openai.OpenAI(api_key="anything") openai_exception = openai_client._make_status_error_from_response( @@ -117,6 +129,10 @@ def test_exception_openai_bad_model(client): response = client.post("/chat/completions", json=test_data) + json_response = response.json() + print("keys in json response", json_response.keys()) + assert json_response.keys() == {"error"} + # make an openai client to call _make_status_error_from_response openai_client = openai.OpenAI(api_key="anything") openai_exception = openai_client._make_status_error_from_response( @@ -143,6 +159,10 @@ def test_chat_completion_exception_any_model(client): response = client.post("/chat/completions", json=test_data) + json_response = response.json() + print("keys in json response", json_response.keys()) + assert json_response.keys() == {"error"} + # make an openai client to call _make_status_error_from_response openai_client = openai.OpenAI(api_key="anything") openai_exception = openai_client._make_status_error_from_response( @@ -163,6 +183,11 @@ def test_embedding_exception_any_model(client): response = client.post("/embeddings", json=test_data) print("Response from proxy=", response) + print(response.json()) + + json_response = response.json() + print("keys in json response", json_response.keys()) + assert json_response.keys() == {"error"} # make an openai client to call _make_status_error_from_response openai_client = openai.OpenAI(api_key="anything") @@ -174,3 +199,47 @@ def test_embedding_exception_any_model(client): except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") + + +# raise openai.BadRequestError +def test_chat_completion_exception_azure_context_window(client): + try: + # Your test data + test_data = { + "model": "working-azure-gpt-3.5-turbo", + "messages": [ + {"role": "user", "content": "hi" * 10000}, + ], + "max_tokens": 10, + } + response = None + + response = client.post("/chat/completions", json=test_data) + print("got response from server", response) + + json_response = response.json() + + print("keys in json response", json_response.keys()) + + assert json_response.keys() == {"error"} + + assert json_response == { + "error": { + "message": "AzureException - Error code: 400 - {'error': {'message': \"This model's maximum context length is 4096 tokens. However, your messages resulted in 10007 tokens. Please reduce the length of the messages.\", 'type': 'invalid_request_error', 'param': 'messages', 'code': 'context_length_exceeded'}}", + "type": None, + "param": None, + "code": 400, + } + } + + # make an openai client to call _make_status_error_from_response + openai_client = openai.OpenAI(api_key="anything") + openai_exception = openai_client._make_status_error_from_response( + response=response + ) + print("exception from proxy", openai_exception) + assert isinstance(openai_exception, openai.BadRequestError) + print("passed exception is of type BadRequestError") + + except Exception as e: + pytest.fail(f"LiteLLM Proxy test failed. Exception {str(e)}") diff --git a/litellm/tests/test_proxy_pass_user_config.py b/litellm/tests/test_proxy_pass_user_config.py index 30fa1eeb1..12def1160 100644 --- a/litellm/tests/test_proxy_pass_user_config.py +++ b/litellm/tests/test_proxy_pass_user_config.py @@ -32,7 +32,7 @@ from litellm.proxy.proxy_server import ( ) # Replace with the actual module where your FastAPI router is defined # Your bearer token -token = "" +token = "sk-1234" headers = {"Authorization": f"Bearer {token}"} diff --git a/litellm/tests/test_proxy_server.py b/litellm/tests/test_proxy_server.py index 972c4a583..70fef0e06 100644 --- a/litellm/tests/test_proxy_server.py +++ b/litellm/tests/test_proxy_server.py @@ -31,7 +31,7 @@ from litellm.proxy.proxy_server import ( ) # Replace with the actual module where your FastAPI router is defined # Your bearer token -token = "" +token = "sk-1234" headers = {"Authorization": f"Bearer {token}"} @@ -225,9 +225,6 @@ def test_health(client_no_auth): try: response = client_no_auth.get("/health") assert response.status_code == 200 - result = response.json() - print("\n response from health:", result) - assert result["unhealthy_count"] == 0 except Exception as e: pytest.fail(f"LiteLLM Proxy test failed. Exception - {str(e)}") diff --git a/litellm/tests/test_proxy_server_caching.py b/litellm/tests/test_proxy_server_caching.py index a1935bd05..a9cf3504e 100644 --- a/litellm/tests/test_proxy_server_caching.py +++ b/litellm/tests/test_proxy_server_caching.py @@ -33,7 +33,7 @@ from litellm.proxy.proxy_server import ( ) # Replace with the actual module where your FastAPI router is defined # Your bearer token -token = "" +token = "sk-1234" headers = {"Authorization": f"Bearer {token}"} diff --git a/litellm/tests/test_proxy_startup.py b/litellm/tests/test_proxy_startup.py index 1183e8c61..650e2f8a7 100644 --- a/litellm/tests/test_proxy_startup.py +++ b/litellm/tests/test_proxy_startup.py @@ -1,4 +1,4 @@ -# What this tests +# What this tests ## This tests the proxy server startup import sys, os, json import traceback @@ -20,45 +20,47 @@ from litellm.proxy.proxy_server import ( initialize, startup_event, llm_model_list, - shutdown_event + shutdown_event, ) + def test_proxy_gunicorn_startup_direct_config(): """ gunicorn startup requires the config to be passed in via environment variables - We support saving either the config or the dict as an environment variable. + We support saving either the config or the dict as an environment variable. Test both approaches """ - try: + try: filepath = os.path.dirname(os.path.abspath(__file__)) - # test with worker_config = config yaml + # test with worker_config = config yaml config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" os.environ["WORKER_CONFIG"] = config_fp asyncio.run(startup_event()) asyncio.run(shutdown_event()) except Exception as e: - if "Already connected to the query engine" in str(e): + if "Already connected to the query engine" in str(e): pass else: pytest.fail(f"An exception occurred - {str(e)}") + def test_proxy_gunicorn_startup_config_dict(): - try: + try: filepath = os.path.dirname(os.path.abspath(__file__)) - # test with worker_config = config yaml + # test with worker_config = config yaml config_fp = f"{filepath}/test_configs/test_config_no_auth.yaml" - # test with worker_config = dict + # test with worker_config = dict worker_config = {"config": config_fp} os.environ["WORKER_CONFIG"] = json.dumps(worker_config) asyncio.run(startup_event()) asyncio.run(shutdown_event()) except Exception as e: - if "Already connected to the query engine" in str(e): + if "Already connected to the query engine" in str(e): pass else: pytest.fail(f"An exception occurred - {str(e)}") -# test_proxy_gunicorn_startup() \ No newline at end of file +# test_proxy_gunicorn_startup() diff --git a/litellm/tests/test_router.py b/litellm/tests/test_router.py index 5d476bed6..b9ca29cee 100644 --- a/litellm/tests/test_router.py +++ b/litellm/tests/test_router.py @@ -942,3 +942,52 @@ def test_reading_openai_keys_os_environ(): # test_reading_openai_keys_os_environ() + + +def test_router_anthropic_key_dynamic(): + anthropic_api_key = os.environ.pop("ANTHROPIC_API_KEY") + model_list = [ + { + "model_name": "anthropic-claude", + "litellm_params": { + "model": "claude-instant-1", + "api_key": anthropic_api_key, + }, + } + ] + + router = Router(model_list=model_list) + messages = [{"role": "user", "content": "Hey, how's it going?"}] + router.completion(model="anthropic-claude", messages=messages) + os.environ["ANTHROPIC_API_KEY"] = anthropic_api_key + + +def test_router_timeout(): + litellm.set_verbose = True + from litellm._logging import verbose_logger + import logging + + verbose_logger.setLevel(logging.DEBUG) + model_list = [ + { + "model_name": "gpt-3.5-turbo", + "litellm_params": { + "model": "gpt-3.5-turbo", + "api_key": "os.environ/OPENAI_API_KEY", + }, + } + ] + router = Router(model_list=model_list) + messages = [{"role": "user", "content": "Hey, how's it going?"}] + start_time = time.time() + try: + res = router.completion( + model="gpt-3.5-turbo", messages=messages, timeout=0.0001 + ) + print(res) + pytest.fail("this should have timed out") + except litellm.exceptions.Timeout as e: + print("got timeout exception") + print(e) + print(vars(e)) + pass diff --git a/litellm/tests/test_router_debug_logs.py b/litellm/tests/test_router_debug_logs.py index e850dce63..78b3b4470 100644 --- a/litellm/tests/test_router_debug_logs.py +++ b/litellm/tests/test_router_debug_logs.py @@ -10,15 +10,16 @@ import litellm, asyncio, logging from litellm import Router # this tests debug logs from litellm router and litellm proxy server -from litellm._logging import verbose_router_logger - -verbose_router_logger.setLevel(level=logging.INFO) +from litellm._logging import verbose_router_logger, verbose_logger, verbose_proxy_logger # this tests debug logs from litellm router and litellm proxy server def test_async_fallbacks(caplog): # THIS IS A PROD TEST - DO NOT DELETE THIS. Used for testing if litellm proxy verbose logs are human readable litellm.set_verbose = False + verbose_router_logger.setLevel(level=logging.INFO) + verbose_logger.setLevel(logging.CRITICAL + 1) + verbose_proxy_logger.setLevel(logging.CRITICAL + 1) model_list = [ { "model_name": "azure/gpt-3.5-turbo", @@ -69,7 +70,10 @@ def test_async_fallbacks(caplog): # on circle ci the captured logs get some async task exception logs - filter them out "Task exception was never retrieved" captured_logs = [ - log for log in captured_logs if "Task exception was never retrieved" not in log + log + for log in captured_logs + if "Task exception was never retrieved" not in log + and "get_available_deployment" not in log ] print("\n Captured caplog records - ", captured_logs) diff --git a/litellm/tests/test_router_fallbacks.py b/litellm/tests/test_router_fallbacks.py index 6d3cd6e43..5d17d36c9 100644 --- a/litellm/tests/test_router_fallbacks.py +++ b/litellm/tests/test_router_fallbacks.py @@ -698,3 +698,207 @@ async def test_async_fallbacks_max_retries_per_request(): pytest.fail(f"An exception occurred: {e}") finally: router.reset() + + +def test_usage_based_routing_fallbacks(): + try: + # [Prod Test] + # IT tests Usage Based Routing with fallbacks + # The Request should fail azure/gpt-4-fast. Then fallback -> "azure/gpt-4-basic" -> "openai-gpt-4" + # It should work with "openai-gpt-4" + import os + import litellm + from litellm import Router + from dotenv import load_dotenv + + load_dotenv() + + # Constants for TPM and RPM allocation + AZURE_FAST_TPM = 3 + AZURE_BASIC_TPM = 4 + OPENAI_TPM = 400 + ANTHROPIC_TPM = 100000 + + def get_azure_params(deployment_name: str): + params = { + "model": f"azure/{deployment_name}", + "api_key": os.environ["AZURE_API_KEY"], + "api_version": os.environ["AZURE_API_VERSION"], + "api_base": os.environ["AZURE_API_BASE"], + } + return params + + def get_openai_params(model: str): + params = { + "model": model, + "api_key": os.environ["OPENAI_API_KEY"], + } + return params + + def get_anthropic_params(model: str): + params = { + "model": model, + "api_key": os.environ["ANTHROPIC_API_KEY"], + } + return params + + model_list = [ + { + "model_name": "azure/gpt-4-fast", + "litellm_params": get_azure_params("chatgpt-v-2"), + "tpm": AZURE_FAST_TPM, + }, + { + "model_name": "azure/gpt-4-basic", + "litellm_params": get_azure_params("chatgpt-v-2"), + "tpm": AZURE_BASIC_TPM, + }, + { + "model_name": "openai-gpt-4", + "litellm_params": get_openai_params("gpt-3.5-turbo"), + "tpm": OPENAI_TPM, + }, + { + "model_name": "anthropic-claude-instant-1.2", + "litellm_params": get_anthropic_params("claude-instant-1.2"), + "tpm": ANTHROPIC_TPM, + }, + ] + # litellm.set_verbose=True + fallbacks_list = [ + {"azure/gpt-4-fast": ["azure/gpt-4-basic"]}, + {"azure/gpt-4-basic": ["openai-gpt-4"]}, + {"openai-gpt-4": ["anthropic-claude-instant-1.2"]}, + ] + + router = Router( + model_list=model_list, + fallbacks=fallbacks_list, + set_verbose=True, + debug_level="DEBUG", + routing_strategy="usage-based-routing", + redis_host=os.environ["REDIS_HOST"], + redis_port=os.environ["REDIS_PORT"], + ) + + messages = [ + {"content": "Tell me a joke.", "role": "user"}, + ] + response = router.completion( + model="azure/gpt-4-fast", + messages=messages, + timeout=5, + mock_response="very nice to meet you", + ) + print("response: ", response) + print("response._hidden_params: ", response._hidden_params) + # in this test, we expect azure/gpt-4 fast to fail, then azure-gpt-4 basic to fail and then openai-gpt-4 to pass + # the token count of this message is > AZURE_FAST_TPM, > AZURE_BASIC_TPM + assert response._hidden_params["custom_llm_provider"] == "openai" + + # now make 100 mock requests to OpenAI - expect it to fallback to anthropic-claude-instant-1.2 + for i in range(20): + response = router.completion( + model="azure/gpt-4-fast", + messages=messages, + timeout=5, + mock_response="very nice to meet you", + ) + print("response: ", response) + print("response._hidden_params: ", response._hidden_params) + if i == 19: + # by the 19th call we should have hit TPM LIMIT for OpenAI, it should fallback to anthropic-claude-instant-1.2 + assert response._hidden_params["custom_llm_provider"] == "anthropic" + + except Exception as e: + pytest.fail(f"An exception occurred {e}") + + +def test_custom_cooldown_times(): + try: + # set, custom_cooldown. Failed model in cooldown_models, after custom_cooldown, the failed model is no longer in cooldown_models + + model_list = [ + { # list of model deployments + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": "bad-key", + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + "tpm": 24000000, + }, + { # list of model deployments + "model_name": "gpt-3.5-turbo", # openai model name + "litellm_params": { # params for litellm completion/embedding call + "model": "azure/chatgpt-v-2", + "api_key": os.getenv("AZURE_API_KEY"), + "api_version": os.getenv("AZURE_API_VERSION"), + "api_base": os.getenv("AZURE_API_BASE"), + }, + "tpm": 1, + }, + ] + + litellm.set_verbose = False + + router = Router( + model_list=model_list, + set_verbose=True, + debug_level="INFO", + cooldown_time=0.1, + redis_host=os.getenv("REDIS_HOST"), + redis_password=os.getenv("REDIS_PASSWORD"), + redis_port=int(os.getenv("REDIS_PORT")), + ) + + # make a request - expect it to fail + try: + response = router.completion( + model="gpt-3.5-turbo", + messages=[ + { + "content": "Tell me a joke.", + "role": "user", + } + ], + ) + except: + pass + + # expect 1 model to be in cooldown models + cooldown_deployments = router._get_cooldown_deployments() + print("cooldown_deployments after failed call: ", cooldown_deployments) + assert ( + len(cooldown_deployments) == 1 + ), "Expected 1 model to be in cooldown models" + + selected_cooldown_model = cooldown_deployments[0] + + # wait for 1/2 of cooldown time + time.sleep(router.cooldown_time / 2) + + # expect cooldown model to still be in cooldown models + cooldown_deployments = router._get_cooldown_deployments() + print( + "cooldown_deployments after waiting 1/2 of cooldown: ", cooldown_deployments + ) + assert ( + len(cooldown_deployments) == 1 + ), "Expected 1 model to be in cooldown models" + + # wait for 1/2 of cooldown time again, now we've waited for full cooldown + time.sleep(router.cooldown_time / 2) + + # expect cooldown model to be removed from cooldown models + cooldown_deployments = router._get_cooldown_deployments() + print( + "cooldown_deployments after waiting cooldown time: ", cooldown_deployments + ) + assert ( + len(cooldown_deployments) == 0 + ), "Expected 0 models to be in cooldown models" + + except Exception as e: + print(e) diff --git a/litellm/tests/test_router_get_deployments.py b/litellm/tests/test_router_get_deployments.py index 0a0fcee62..62630d7e7 100644 --- a/litellm/tests/test_router_get_deployments.py +++ b/litellm/tests/test_router_get_deployments.py @@ -375,3 +375,76 @@ def test_model_group_aliases(): # test_model_group_aliases() + + +def test_usage_based_routing(): + """ + in this test we, have a model group with two models in it, model-a and model-b. + Then at some point, we exceed the TPM limit (set in the litellm_params) + for model-a only; but for model-b we are still under the limit + """ + try: + + def get_azure_params(deployment_name: str): + params = { + "model": f"azure/{deployment_name}", + "api_key": os.environ["AZURE_API_KEY"], + "api_version": os.environ["AZURE_API_VERSION"], + "api_base": os.environ["AZURE_API_BASE"], + } + return params + + model_list = [ + { + "model_name": "azure/gpt-4", + "litellm_params": get_azure_params("chatgpt-low-tpm"), + "tpm": 100, + }, + { + "model_name": "azure/gpt-4", + "litellm_params": get_azure_params("chatgpt-high-tpm"), + "tpm": 1000, + }, + ] + + router = Router( + model_list=model_list, + set_verbose=True, + debug_level="DEBUG", + routing_strategy="usage-based-routing", + redis_host=os.environ["REDIS_HOST"], + redis_port=os.environ["REDIS_PORT"], + ) + + messages = [ + {"content": "Tell me a joke.", "role": "user"}, + ] + + selection_counts = defaultdict(int) + for _ in range(25): + response = router.completion( + model="azure/gpt-4", + messages=messages, + timeout=5, + mock_response="good morning", + ) + + # print(response) + + selection_counts[response["model"]] += 1 + + print(selection_counts) + + total_requests = sum(selection_counts.values()) + + # Assert that 'chatgpt-low-tpm' has more than 2 requests + assert ( + selection_counts["chatgpt-low-tpm"] > 2 + ), f"Assertion failed: 'chatgpt-low-tpm' does not have more than 2 request in the weighted load balancer. Selection counts {selection_counts}" + + # Assert that 'chatgpt-high-tpm' has about 80% of the total requests + assert ( + selection_counts["chatgpt-high-tpm"] / total_requests > 0.8 + ), f"Assertion failed: 'chatgpt-high-tpm' does not have about 80% of the total requests in the weighted load balancer. Selection counts {selection_counts}" + except Exception as e: + pytest.fail(f"Error occurred: {e}") diff --git a/litellm/tests/test_router_init.py b/litellm/tests/test_router_init.py index 9ab68866f..5fa142053 100644 --- a/litellm/tests/test_router_init.py +++ b/litellm/tests/test_router_init.py @@ -23,6 +23,10 @@ load_dotenv() def test_init_clients(): litellm.set_verbose = True + import logging + from litellm._logging import verbose_router_logger + + verbose_router_logger.setLevel(logging.DEBUG) try: print("testing init 4 clients with diff timeouts") model_list = [ @@ -39,7 +43,7 @@ def test_init_clients(): }, }, ] - router = Router(model_list=model_list) + router = Router(model_list=model_list, set_verbose=True) for elem in router.model_list: model_id = elem["model_info"]["id"] assert router.cache.get_cache(f"{model_id}_client") is not None @@ -55,6 +59,18 @@ def test_init_clients(): assert async_client.timeout == 0.01 assert stream_async_client.timeout == 0.000_001 + print(vars(async_client)) + print() + print(async_client._base_url) + assert ( + async_client._base_url + == "https://openai-gpt-4-test-v-1.openai.azure.com//openai/" + ) # openai python adds the extra / + assert ( + stream_async_client._base_url + == "https://openai-gpt-4-test-v-1.openai.azure.com//openai/" + ) + print("PASSED !") except Exception as e: @@ -307,3 +323,120 @@ def test_xinference_embedding(): # test_xinference_embedding() + + +def test_router_init_gpt_4_vision_enhancements(): + try: + # tests base_url set when any base_url with /openai/deployments passed to router + print("Testing Azure GPT_Vision enhancements") + + model_list = [ + { + "model_name": "gpt-4-vision-enhancements", + "litellm_params": { + "model": "azure/gpt-4-vision", + "api_key": os.getenv("AZURE_API_KEY"), + "base_url": "https://gpt-4-vision-resource.openai.azure.com/openai/deployments/gpt-4-vision/extensions/", + "dataSources": [ + { + "type": "AzureComputerVision", + "parameters": { + "endpoint": "os.environ/AZURE_VISION_ENHANCE_ENDPOINT", + "key": "os.environ/AZURE_VISION_ENHANCE_KEY", + }, + } + ], + }, + } + ] + + router = Router(model_list=model_list) + + print(router.model_list) + print(router.model_list[0]) + + assert ( + router.model_list[0]["litellm_params"]["base_url"] + == "https://gpt-4-vision-resource.openai.azure.com/openai/deployments/gpt-4-vision/extensions/" + ) # set in env + + assert ( + router.model_list[0]["litellm_params"]["dataSources"][0]["parameters"][ + "endpoint" + ] + == os.environ["AZURE_VISION_ENHANCE_ENDPOINT"] + ) + + assert ( + router.model_list[0]["litellm_params"]["dataSources"][0]["parameters"][ + "key" + ] + == os.environ["AZURE_VISION_ENHANCE_KEY"] + ) + + azure_client = router._get_client( + deployment=router.model_list[0], + kwargs={"stream": True, "model": "gpt-4-vision-enhancements"}, + client_type="async", + ) + + assert ( + azure_client._base_url + == "https://gpt-4-vision-resource.openai.azure.com/openai/deployments/gpt-4-vision/extensions/" + ) + print("passed") + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + +def test_openai_with_organization(): + try: + print("Testing OpenAI with organization") + model_list = [ + { + "model_name": "openai-bad-org", + "litellm_params": { + "model": "gpt-3.5-turbo", + "organization": "org-ikDc4ex8NB", + }, + }, + { + "model_name": "openai-good-org", + "litellm_params": {"model": "gpt-3.5-turbo"}, + }, + ] + + router = Router(model_list=model_list) + + print(router.model_list) + print(router.model_list[0]) + + openai_client = router._get_client( + deployment=router.model_list[0], + kwargs={"input": ["hello"], "model": "openai-bad-org"}, + ) + print(vars(openai_client)) + + assert openai_client.organization == "org-ikDc4ex8NB" + + # bad org raises error + + try: + response = router.completion( + model="openai-bad-org", + messages=[{"role": "user", "content": "this is a test"}], + ) + pytest.fail("Request should have failed - This organization does not exist") + except Exception as e: + print("Got exception: " + str(e)) + assert "No such organization: org-ikDc4ex8NB" in str(e) + + # good org works + response = router.completion( + model="openai-good-org", + messages=[{"role": "user", "content": "this is a test"}], + max_tokens=5, + ) + + except Exception as e: + pytest.fail(f"Error occurred: {e}") diff --git a/litellm/tests/test_router_timeout.py b/litellm/tests/test_router_timeout.py new file mode 100644 index 000000000..1f93a60a6 --- /dev/null +++ b/litellm/tests/test_router_timeout.py @@ -0,0 +1,87 @@ +#### What this tests #### +# This tests if the router timeout error handling during fallbacks + +import sys, os, time +import traceback, asyncio +import pytest + +sys.path.insert( + 0, os.path.abspath("../..") +) # Adds the parent directory to the system path + + +import os + +import litellm +from litellm import Router +from dotenv import load_dotenv + +load_dotenv() + + +def test_router_timeouts(): + # Model list for OpenAI and Anthropic models + model_list = [ + { + "model_name": "openai-gpt-4", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": "os.environ/AZURE_API_KEY", + "api_base": "os.environ/AZURE_API_BASE", + "api_version": "os.environ/AZURE_API_VERSION", + }, + "tpm": 80000, + }, + { + "model_name": "anthropic-claude-instant-1.2", + "litellm_params": { + "model": "claude-instant-1", + "api_key": "os.environ/ANTHROPIC_API_KEY", + }, + "tpm": 20000, + }, + ] + + fallbacks_list = [ + {"openai-gpt-4": ["anthropic-claude-instant-1.2"]}, + ] + + # Configure router + router = Router( + model_list=model_list, + fallbacks=fallbacks_list, + routing_strategy="usage-based-routing", + debug_level="INFO", + set_verbose=True, + redis_host=os.getenv("REDIS_HOST"), + redis_password=os.getenv("REDIS_PASSWORD"), + redis_port=int(os.getenv("REDIS_PORT")), + timeout=10, + ) + + print("***** TPM SETTINGS *****") + for model_object in model_list: + print(f"{model_object['model_name']}: {model_object['tpm']} TPM") + + # Sample list of questions + questions_list = [ + {"content": "Tell me a very long joke.", "modality": "voice"}, + ] + + total_tokens_used = 0 + + # Process each question + for question in questions_list: + messages = [{"content": question["content"], "role": "user"}] + + prompt_tokens = litellm.token_counter(text=question["content"], model="gpt-4") + print("prompt_tokens = ", prompt_tokens) + + response = router.completion( + model="openai-gpt-4", messages=messages, timeout=5, num_retries=0 + ) + + total_tokens_used += response.usage.total_tokens + + print("Response:", response) + print("********** TOKENS USED SO FAR = ", total_tokens_used) diff --git a/litellm/tests/test_rules.py b/litellm/tests/test_rules.py index 664b9db08..0c1b573b8 100644 --- a/litellm/tests/test_rules.py +++ b/litellm/tests/test_rules.py @@ -19,15 +19,6 @@ def my_pre_call_rule(input: str): return True -def my_post_call_rule(input: str): - input = input.lower() - print(f"input: {input}") - print(f"INSIDE MY POST CALL RULE, len(input) - {len(input)}") - if "sorry" in input: - return False - return True - - ## Test 1: Pre-call rule def test_pre_call_rule(): try: @@ -55,32 +46,51 @@ def test_pre_call_rule(): litellm.pre_call_rules = [] +def my_post_call_rule(input: str): + input = input.lower() + print(f"input: {input}") + print(f"INSIDE MY POST CALL RULE, len(input) - {len(input)}") + if len(input) < 200: + return { + "decision": False, + "message": "This violates LiteLLM Proxy Rules. Response too short", + } + return {"decision": True} + + # test_pre_call_rule() -## Test 2: Post-call rule +# Test 2: Post-call rule # commenting out of ci/cd since llm's have variable output which was causing our pipeline to fail erratically. -# def test_post_call_rule(): -# try: -# litellm.pre_call_rules = [] -# litellm.post_call_rules = [my_post_call_rule] -# ### completion -# response = completion(model="gpt-3.5-turbo", -# messages=[{"role": "user", "content": "say sorry"}], -# fallbacks=["deepinfra/Gryphe/MythoMax-L2-13b"]) -# pytest.fail(f"Completion call should have been failed. ") -# except: -# pass -# print(f"MAKING ACOMPLETION CALL") -# # litellm.set_verbose = True -# ### async completion -# async def test_async_response(): -# messages=[{"role": "user", "content": "say sorry"}] -# try: -# response = await acompletion(model="gpt-3.5-turbo", messages=messages) -# pytest.fail(f"acompletion call should have been failed.") -# except Exception as e: -# pass -# asyncio.run(test_async_response()) -# litellm.pre_call_rules = [] -# litellm.post_call_rules = [] +def test_post_call_rule(): + try: + litellm.pre_call_rules = [] + litellm.post_call_rules = [my_post_call_rule] + ### completion + response = completion( + model="gpt-3.5-turbo", + messages=[{"role": "user", "content": "say sorry"}], + max_tokens=2, + ) + pytest.fail(f"Completion call should have been failed. ") + except Exception as e: + print("Got exception", e) + print(type(e)) + print(vars(e)) + assert e.message == "This violates LiteLLM Proxy Rules. Response too short" + pass + # print(f"MAKING ACOMPLETION CALL") + # litellm.set_verbose = True + ### async completion + # async def test_async_response(): + # messages=[{"role": "user", "content": "say sorry"}] + # try: + # response = await acompletion(model="gpt-3.5-turbo", messages=messages) + # pytest.fail(f"acompletion call should have been failed.") + # except Exception as e: + # pass + # asyncio.run(test_async_response()) + litellm.pre_call_rules = [] + litellm.post_call_rules = [] + # test_post_call_rule() diff --git a/litellm/tests/test_stream_chunk_builder.py b/litellm/tests/test_stream_chunk_builder.py index b7bd0d216..001ae07e0 100644 --- a/litellm/tests/test_stream_chunk_builder.py +++ b/litellm/tests/test_stream_chunk_builder.py @@ -120,7 +120,7 @@ def test_stream_chunk_builder_litellm_tool_call(): def test_stream_chunk_builder_litellm_tool_call_regular_message(): try: messages = [{"role": "user", "content": "Hey, how's it going?"}] - litellm.set_verbose = False + # litellm.set_verbose = True response = litellm.completion( model="gpt-3.5-turbo", messages=messages, @@ -138,6 +138,10 @@ def test_stream_chunk_builder_litellm_tool_call_regular_message(): == response.usage.completion_tokens + response.usage.prompt_tokens ) + # check provider is in hidden params + print("hidden params", response._hidden_params) + assert response._hidden_params["custom_llm_provider"] == "openai" + except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") diff --git a/litellm/tests/test_streaming.py b/litellm/tests/test_streaming.py index 0e80c55ed..28a9f9902 100644 --- a/litellm/tests/test_streaming.py +++ b/litellm/tests/test_streaming.py @@ -92,6 +92,7 @@ def validate_second_format(chunk): for choice in chunk["choices"]: assert isinstance(choice["index"], int), "'index' should be an integer." + assert "role" not in choice["delta"], "'role' should be a string." # openai v1.0.0 returns content as None assert (choice["finish_reason"] is None) or isinstance( choice["finish_reason"], str @@ -262,6 +263,9 @@ def test_completion_azure_stream(): for idx, init_chunk in enumerate(response): chunk, finished = streaming_format_tests(idx, init_chunk) complete_response += chunk + custom_llm_provider = init_chunk._hidden_params["custom_llm_provider"] + print(f"custom_llm_provider: {custom_llm_provider}") + assert custom_llm_provider == "azure" if finished: assert isinstance(init_chunk.choices[0], litellm.utils.StreamingChoices) break @@ -271,7 +275,7 @@ def test_completion_azure_stream(): pytest.fail(f"Error occurred: {e}") -test_completion_azure_stream() +# test_completion_azure_stream() def test_completion_azure_function_calling_stream(): @@ -299,6 +303,7 @@ def test_completion_azure_function_calling_stream(): # test_completion_azure_function_calling_stream() +@pytest.mark.skip("Flaky ollama test - needs to be fixed") def test_completion_ollama_hosted_stream(): try: litellm.set_verbose = True @@ -324,6 +329,8 @@ def test_completion_ollama_hosted_stream(): raise Exception("Empty response received") print(f"complete_response: {complete_response}") except Exception as e: + if "try pulling it first" in str(e): + return pytest.fail(f"Error occurred: {e}") @@ -392,6 +399,36 @@ def test_completion_palm_stream(): # test_completion_palm_stream() +def test_completion_gemini_stream(): + try: + litellm.set_verbose = False + print("Streaming gemini response") + messages = [ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": "how does a court case get to the Supreme Court?", + }, + ] + print("testing gemini streaming") + response = completion(model="gemini/gemini-pro", messages=messages, stream=True) + print(f"type of response at the top: {response}") + complete_response = "" + # Add any assertions here to check the response + for idx, chunk in enumerate(response): + print(chunk) + # print(chunk.choices[0].delta) + chunk, finished = streaming_format_tests(idx, chunk) + if finished: + break + complete_response += chunk + if complete_response.strip() == "": + raise Exception("Empty response received") + print(f"completion_response: {complete_response}") + except Exception as e: + pytest.fail(f"Error occurred: {e}") + + def test_completion_mistral_api_stream(): try: litellm.set_verbose = True @@ -428,6 +465,7 @@ def test_completion_mistral_api_stream(): def test_completion_deep_infra_stream(): # deep infra currently includes role in the 2nd chunk # waiting for them to make a fix on this + litellm.set_verbose = True try: messages = [ {"role": "system", "content": "You are a helpful assistant."}, @@ -697,8 +735,15 @@ def test_completion_bedrock_claude_stream(): complete_response = "" has_finish_reason = False # Add any assertions here to check the response + first_chunk_id = None for idx, chunk in enumerate(response): # print + if idx == 0: + first_chunk_id = chunk.id + else: + assert ( + chunk.id == first_chunk_id + ), f"chunk ids do not match: {chunk.id} != first chunk id{first_chunk_id}" chunk, finished = streaming_format_tests(idx, chunk) has_finish_reason = finished complete_response += chunk @@ -763,9 +808,30 @@ def test_sagemaker_weird_response(): When the stream ends, flush any remaining holding chunks. """ try: - chunk = """[INST] Hey, how's it going? [/INST] + from litellm.llms.sagemaker import TokenIterator + import json + import json + from litellm.llms.sagemaker import TokenIterator - I'm doing well, thanks for asking! How about you? Is there anything you'd like to chat about or ask? I'm here to help with any questions you might have.""" + chunk = """[INST] Hey, how's it going? [/INST], + I'm doing well, thanks for asking! How about you? Is there anything you'd like to chat about or ask? I'm here to help with any questions you might have.""" + + data = "\n".join( + map( + lambda x: f"data: {json.dumps({'token': {'text': x.strip()}})}", + chunk.strip().split(","), + ) + ) + stream = bytes(data, encoding="utf8") + + # Modify the array to be a dictionary with "PayloadPart" and "Bytes" keys. + stream_iterator = iter([{"PayloadPart": {"Bytes": stream}}]) + + token_iter = TokenIterator(stream_iterator) + + # for token in token_iter: + # print(token) + litellm.set_verbose = True logging_obj = litellm.Logging( model="berri-benchmarking-Llama-2-70b-chat-hf-4", @@ -777,14 +843,19 @@ def test_sagemaker_weird_response(): start_time=time.time(), ) response = litellm.CustomStreamWrapper( - completion_stream=chunk, + completion_stream=token_iter, model="berri-benchmarking-Llama-2-70b-chat-hf-4", custom_llm_provider="sagemaker", logging_obj=logging_obj, ) complete_response = "" - for chunk in response: - complete_response += chunk["choices"][0]["delta"]["content"] + for idx, chunk in enumerate(response): + # print + chunk, finished = streaming_format_tests(idx, chunk) + has_finish_reason = finished + complete_response += chunk + if finished: + break assert len(complete_response) > 0 except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") @@ -807,41 +878,53 @@ async def test_sagemaker_streaming_async(): ) # Add any assertions here to check the response + print(response) complete_response = "" + has_finish_reason = False + # Add any assertions here to check the response + idx = 0 async for chunk in response: - complete_response += chunk.choices[0].delta.content or "" - print(f"complete_response: {complete_response}") - assert len(complete_response) > 0 + # print + chunk, finished = streaming_format_tests(idx, chunk) + has_finish_reason = finished + complete_response += chunk + if finished: + break + idx += 1 + if has_finish_reason is False: + raise Exception("finish reason not set for last chunk") + if complete_response.strip() == "": + raise Exception("Empty response received") + print(f"completion_response: {complete_response}") except Exception as e: pytest.fail(f"An exception occurred - {str(e)}") -# def test_completion_sagemaker_stream(): -# try: -# response = completion( -# model="sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b", -# messages=messages, -# temperature=0.2, -# max_tokens=80, -# stream=True, -# ) -# complete_response = "" -# has_finish_reason = False -# # Add any assertions here to check the response -# for idx, chunk in enumerate(response): -# chunk, finished = streaming_format_tests(idx, chunk) -# has_finish_reason = finished -# if finished: -# break -# complete_response += chunk -# if has_finish_reason is False: -# raise Exception("finish reason not set for last chunk") -# if complete_response.strip() == "": -# raise Exception("Empty response received") -# except InvalidRequestError as e: -# pass -# except Exception as e: -# pytest.fail(f"Error occurred: {e}") +def test_completion_sagemaker_stream(): + try: + response = completion( + model="sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4", + messages=messages, + temperature=0.2, + max_tokens=80, + stream=True, + ) + complete_response = "" + has_finish_reason = False + # Add any assertions here to check the response + for idx, chunk in enumerate(response): + chunk, finished = streaming_format_tests(idx, chunk) + has_finish_reason = finished + if finished: + break + complete_response += chunk + if has_finish_reason is False: + raise Exception("finish reason not set for last chunk") + if complete_response.strip() == "": + raise Exception("Empty response received") + except Exception as e: + pytest.fail(f"Error occurred: {e}") + # test_completion_sagemaker_stream() @@ -923,6 +1006,7 @@ def ai21_completion_call_bad_key(): # ai21_completion_call_bad_key() + @pytest.mark.asyncio async def test_hf_completion_tgi_stream(): try: diff --git a/litellm/tests/test_team_config.py b/litellm/tests/test_team_config.py new file mode 100644 index 000000000..8a5f8c840 --- /dev/null +++ b/litellm/tests/test_team_config.py @@ -0,0 +1,36 @@ +# #### What this tests #### +# # This tests if setting team_config actually works +# import sys, os +# import traceback +# import pytest + +# sys.path.insert( +# 0, os.path.abspath("../..") +# ) # Adds the parent directory to the system path +# import litellm +# from litellm.proxy.proxy_server import ProxyConfig + + +# @pytest.mark.asyncio +# async def test_team_config(): +# litellm.default_team_settings = [ +# { +# "team_id": "my-special-team", +# "success_callback": ["langfuse"], +# "langfuse_public_key": "os.environ/LANGFUSE_PUB_KEY_2", +# "langfuse_secret": "os.environ/LANGFUSE_PRIVATE_KEY_2", +# } +# ] +# proxyconfig = ProxyConfig() + +# team_config = await proxyconfig.load_team_config(team_id="my-special-team") +# assert len(team_config) > 0 + +# data = { +# "model": "gpt-3.5-turbo", +# "messages": [{"role": "user", "content": "Hey, how's it going?"}], +# } +# team_config.pop("team_id") +# response = litellm.completion(**{**data, **team_config}) + +# print(f"response: {response}") diff --git a/litellm/tests/test_text_completion.py b/litellm/tests/test_text_completion.py index abf76acde..0b9811183 100644 --- a/litellm/tests/test_text_completion.py +++ b/litellm/tests/test_text_completion.py @@ -2833,8 +2833,9 @@ def test_completion_hf_prompt_array(): assert len(response.choices) == 2 # response_str = response["choices"][0]["text"] except Exception as e: + print(str(e)) if "is currently loading" in str(e): - pass + return pytest.fail(f"Error occurred: {e}") diff --git a/litellm/tests/test_timeout.py b/litellm/tests/test_timeout.py index 84aa7537f..1902e1a36 100644 --- a/litellm/tests/test_timeout.py +++ b/litellm/tests/test_timeout.py @@ -39,6 +39,8 @@ def test_timeout(): def test_hanging_request_azure(): litellm.set_verbose = True + import asyncio + try: router = litellm.Router( model_list=[ @@ -58,13 +60,20 @@ def test_hanging_request_azure(): ) encoded = litellm.utils.encode(model="gpt-3.5-turbo", text="blue")[0] - response = router.completion( - model="azure-gpt", - messages=[{"role": "user", "content": f"what color is red {uuid.uuid4()}"}], - logit_bias={encoded: 100}, - timeout=0.01, - ) - print(response) + + async def _test(): + response = await router.acompletion( + model="azure-gpt", + messages=[ + {"role": "user", "content": f"what color is red {uuid.uuid4()}"} + ], + logit_bias={encoded: 100}, + timeout=0.01, + ) + print(response) + return response + + response = asyncio.run(_test()) if response.choices[0].message.content is not None: pytest.fail("Got a response, expected a timeout") diff --git a/litellm/utils.py b/litellm/utils.py index 15494c3ef..a10208564 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -10,6 +10,7 @@ import sys, re, binascii, struct import litellm import dotenv, json, traceback, threading, base64, ast + import subprocess, os import litellm, openai import itertools @@ -36,6 +37,7 @@ os.environ[ ] = filename # use local copy of tiktoken b/c of - https://github.com/BerriAI/litellm/issues/1071 encoding = tiktoken.get_encoding("cl100k_base") import importlib.metadata +from ._logging import verbose_logger from .integrations.traceloop import TraceloopLogger from .integrations.helicone import HeliconeLogger from .integrations.aispend import AISpendLogger @@ -61,6 +63,7 @@ from .exceptions import ( RateLimitError, ServiceUnavailableError, OpenAIError, + PermissionDeniedError, ContextWindowExceededError, ContentPolicyViolationError, Timeout, @@ -231,7 +234,8 @@ class Delta(OpenAIObject): def __init__(self, content=None, role=None, **params): super(Delta, self).__init__(**params) self.content = content - self.role = role + if role is not None: + self.role = role def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -252,7 +256,13 @@ class Delta(OpenAIObject): class Choices(OpenAIObject): def __init__( - self, finish_reason=None, index=0, message=None, logprobs=None, **params + self, + finish_reason=None, + index=0, + message=None, + logprobs=None, + enhancements=None, + **params, ): super(Choices, self).__init__(**params) self.finish_reason = ( @@ -265,6 +275,8 @@ class Choices(OpenAIObject): self.message = message if logprobs is not None: self.logprobs = logprobs + if enhancements is not None: + self.enhancements = enhancements def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -319,6 +331,7 @@ class StreamingChoices(OpenAIObject): index=0, delta: Optional[Delta] = None, logprobs=None, + enhancements=None, **params, ): super(StreamingChoices, self).__init__(**params) @@ -334,6 +347,8 @@ class StreamingChoices(OpenAIObject): if logprobs is not None: self.logprobs = logprobs + if enhancements is not None: + self.enhancements = enhancements def __contains__(self, key): # Define custom behavior for the 'in' operator @@ -701,6 +716,7 @@ class ImageResponse(OpenAIObject): ############################################################ def print_verbose(print_statement): try: + verbose_logger.debug(print_statement) if litellm.set_verbose: print(print_statement) # noqa except: @@ -735,6 +751,10 @@ class Logging: start_time, litellm_call_id, function_id, + dynamic_success_callbacks=None, + dynamic_async_success_callbacks=None, + langfuse_public_key=None, + langfuse_secret=None, ): if call_type not in [item.value for item in CallTypes]: allowed_values = ", ".join([item.value for item in CallTypes]) @@ -753,7 +773,19 @@ class Logging: self.litellm_call_id = litellm_call_id self.function_id = function_id self.streaming_chunks = [] # for generating complete stream response + self.sync_streaming_chunks = [] # for generating complete stream response self.model_call_details = {} + self.dynamic_input_callbacks = [] # [TODO] callbacks set for just that call + self.dynamic_failure_callbacks = [] # [TODO] callbacks set for just that call + self.dynamic_success_callbacks = ( + dynamic_success_callbacks # callbacks set for just that call + ) + self.dynamic_async_success_callbacks = ( + dynamic_async_success_callbacks # callbacks set for just that call + ) + ## DYNAMIC LANGFUSE KEYS ## + self.langfuse_public_key = langfuse_public_key + self.langfuse_secret = langfuse_secret def update_environment_variables( self, model, user, optional_params, litellm_params, **additional_params @@ -762,7 +794,7 @@ class Logging: self.model = model self.user = user self.litellm_params = litellm_params - self.logger_fn = litellm_params["logger_fn"] + self.logger_fn = litellm_params.get("logger_fn", None) print_verbose(f"self.optional_params: {self.optional_params}") self.model_call_details = { "model": self.model, @@ -816,7 +848,7 @@ class Logging: [f"-H '{k}: {v}'" for k, v in masked_headers.items()] ) - print_verbose(f"PRE-API-CALL ADDITIONAL ARGS: {additional_args}") + verbose_logger.debug(f"PRE-API-CALL ADDITIONAL ARGS: {additional_args}") curl_command = "\n\nPOST Request Sent from LiteLLM:\n" curl_command += "curl -X POST \\\n" @@ -831,7 +863,7 @@ class Logging: curl_command += additional_args.get("request_str", None) elif api_base == "": curl_command = self.model_call_details - print_verbose(f"\033[92m{curl_command}\033[0m\n") + verbose_logger.info(f"\033[92m{curl_command}\033[0m\n") if self.logger_fn and callable(self.logger_fn): try: self.logger_fn( @@ -857,7 +889,8 @@ class Logging: ) # Input Integration Logging -> If you want to log the fact that an attempt to call the model was made - for callback in litellm.input_callback: + callbacks = litellm.input_callback + self.dynamic_input_callbacks + for callback in callbacks: try: if callback == "supabase": print_verbose("reaches supabase for logging!") @@ -930,43 +963,6 @@ class Logging: if capture_exception: # log this error to sentry for debugging capture_exception(e) - async def async_pre_call( - self, result=None, start_time=None, end_time=None, **kwargs - ): - """ - Â Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. - """ - start_time, end_time, result = self._success_handler_helper_fn( - start_time=start_time, end_time=end_time, result=result - ) - print_verbose(f"Async input callbacks: {litellm._async_input_callback}") - for callback in litellm._async_input_callback: - try: - if isinstance(callback, CustomLogger): # custom logger class - print_verbose(f"Async input callbacks: CustomLogger") - asyncio.create_task( - callback.async_log_input_event( - model=self.model, - messages=self.messages, - kwargs=self.model_call_details, - ) - ) - if callable(callback): # custom logger functions - print_verbose(f"Async success callbacks: async_log_event") - asyncio.create_task( - customLogger.async_log_input_event( - model=self.model, - messages=self.messages, - kwargs=self.model_call_details, - print_verbose=print_verbose, - callback_func=callback, - ) - ) - except: - print_verbose( - f"LiteLLM.LoggingError: [Non-Blocking] Exception occurred while success logging {traceback.format_exc()}" - ) - def post_call( self, original_response, input=None, api_key=None, additional_args={} ): @@ -982,13 +978,10 @@ class Logging: self.model_call_details["log_event_type"] = "post_api_call" # User Logging -> if you pass in a custom logging function - print_verbose( + verbose_logger.debug( f"RAW RESPONSE:\n{self.model_call_details.get('original_response', self.model_call_details)}\n\n" ) - print_verbose( - f"Logging Details Post-API Call: logger_fn - {self.logger_fn} | callable(logger_fn) - {callable(self.logger_fn)}" - ) - print_verbose( + verbose_logger.debug( f"Logging Details Post-API Call: LiteLLM Params: {self.model_call_details}" ) if self.logger_fn and callable(self.logger_fn): @@ -1002,7 +995,9 @@ class Logging: ) # Input Integration Logging -> If you want to log the fact that an attempt to call the model was made - for callback in litellm.input_callback: + + callbacks = litellm.input_callback + self.dynamic_input_callbacks + for callback in callbacks: try: if callback == "lite_debugger": print_verbose("reaches litedebugger for post-call logging!") @@ -1054,8 +1049,43 @@ class Logging: self.model_call_details["log_event_type"] = "successful_api_call" self.model_call_details["end_time"] = end_time self.model_call_details["cache_hit"] = cache_hit + ## if model in model cost map - log the response cost + ## else set cost to None + verbose_logger.debug(f"Model={self.model}; result={result}") + if ( + result is not None + and ( + isinstance(result, ModelResponse) + or isinstance(result, EmbeddingResponse) + ) + and self.stream != True + ): # handle streaming separately + try: + if self.model_call_details.get("cache_hit", False) == True: + self.model_call_details["response_cost"] = 0.0 + else: + self.model_call_details[ + "response_cost" + ] = litellm.completion_cost( + completion_response=result, + ) + verbose_logger.debug( + f"Model={self.model}; cost={self.model_call_details['response_cost']}" + ) + except litellm.NotFoundError as e: + verbose_logger.debug( + f"Model={self.model} not found in completion cost map." + ) + self.model_call_details["response_cost"] = None + else: # streaming chunks + image gen. + self.model_call_details["response_cost"] = None - if litellm.max_budget and self.stream: + if ( + litellm.max_budget + and self.stream + and result is not None + and "content" in result + ): time_diff = (end_time - start_time).total_seconds() float_diff = float(time_diff) litellm._current_cost += litellm.completion_cost( @@ -1067,51 +1097,80 @@ class Logging: return start_time, end_time, result except Exception as e: - print_verbose(f"[Non-Blocking] LiteLLM.Success_Call Error: {str(e)}") + raise Exception(f"[Non-Blocking] LiteLLM.Success_Call Error: {str(e)}") def success_handler( self, result=None, start_time=None, end_time=None, cache_hit=None, **kwargs ): - print_verbose(f"Logging Details LiteLLM-Success Call") + verbose_logger.debug(f"Logging Details LiteLLM-Success Call: {cache_hit}") + start_time, end_time, result = self._success_handler_helper_fn( + start_time=start_time, + end_time=end_time, + result=result, + cache_hit=cache_hit, + ) # print(f"original response in success handler: {self.model_call_details['original_response']}") try: - print_verbose(f"success callbacks: {litellm.success_callback}") + verbose_logger.debug(f"success callbacks: {litellm.success_callback}") ## BUILD COMPLETE STREAMED RESPONSE complete_streaming_response = None - if ( - self.stream - and self.model_call_details.get("litellm_params", {}).get( - "acompletion", False - ) - == False - ): # only call stream chunk builder if it's not acompletion() + if self.stream: if ( result.choices[0].finish_reason is not None ): # if it's the last chunk - self.streaming_chunks.append(result) - # print_verbose(f"final set of received chunks: {self.streaming_chunks}") + self.sync_streaming_chunks.append(result) + # print_verbose(f"final set of received chunks: {self.sync_streaming_chunks}") try: complete_streaming_response = litellm.stream_chunk_builder( - self.streaming_chunks, + self.sync_streaming_chunks, messages=self.model_call_details.get("messages", None), + start_time=start_time, + end_time=end_time, ) except: complete_streaming_response = None else: - self.streaming_chunks.append(result) + self.sync_streaming_chunks.append(result) - if complete_streaming_response: + if complete_streaming_response is not None: + verbose_logger.debug( + f"Logging Details LiteLLM-Success Call streaming complete" + ) self.model_call_details[ "complete_streaming_response" ] = complete_streaming_response + try: + if self.model_call_details.get("cache_hit", False) == True: + self.model_call_details["response_cost"] = 0.0 + else: + self.model_call_details[ + "response_cost" + ] = litellm.completion_cost( + completion_response=complete_streaming_response, + ) + verbose_logger.debug( + f"Model={self.model}; cost={self.model_call_details['response_cost']}" + ) + except litellm.NotFoundError as e: + verbose_logger.debug( + f"Model={self.model} not found in completion cost map." + ) + self.model_call_details["response_cost"] = None + if self.dynamic_success_callbacks is not None and isinstance( + self.dynamic_success_callbacks, list + ): + callbacks = self.dynamic_success_callbacks + ## keep the internal functions ## + for callback in litellm.success_callback: + if ( + isinstance(callback, CustomLogger) + and "_PROXY_" in callback.__class__.__name__ + ): + callbacks.append(callback) + else: + callbacks = litellm.success_callback - start_time, end_time, result = self._success_handler_helper_fn( - start_time=start_time, - end_time=end_time, - result=result, - cache_hit=cache_hit, - ) - for callback in litellm.success_callback: + for callback in callbacks: try: if callback == "lite_debugger": print_verbose("reaches lite_debugger for logging!") @@ -1181,7 +1240,9 @@ class Logging: if "complete_streaming_response" not in kwargs: break else: - print_verbose("reaches langfuse for streaming logging!") + print_verbose( + "reaches langsmith for streaming logging!" + ) result = kwargs["complete_streaming_response"] langsmithLogger.log_event( kwargs=self.model_call_details, @@ -1220,7 +1281,7 @@ class Logging: if callback == "helicone": print_verbose("reaches helicone for logging!") model = self.model - messages = kwargs["messages"] + messages = kwargs["input"] heliconeLogger.log_success( model=model, messages=messages, @@ -1231,7 +1292,7 @@ class Logging: ) if callback == "langfuse": global langFuseLogger - print_verbose("reaches langfuse for logging!") + verbose_logger.debug("reaches langfuse for logging!") kwargs = {} for k, v in self.model_call_details.items(): if ( @@ -1240,13 +1301,22 @@ class Logging: kwargs[k] = v # this only logs streaming once, complete_streaming_response exists i.e when stream ends if self.stream: - if "complete_streaming_response" not in kwargs: + verbose_logger.debug( + f"is complete_streaming_response in kwargs: {kwargs.get('complete_streaming_response', None)}" + ) + if complete_streaming_response is None: break else: print_verbose("reaches langfuse for streaming logging!") result = kwargs["complete_streaming_response"] - if langFuseLogger is None: - langFuseLogger = LangFuseLogger() + if langFuseLogger is None or ( + self.langfuse_public_key != langFuseLogger.public_key + and self.langfuse_secret != langFuseLogger.secret_key + ): + langFuseLogger = LangFuseLogger( + langfuse_public_key=self.langfuse_public_key, + langfuse_secret=self.langfuse_secret, + ) langFuseLogger.log_event( kwargs=kwargs, response_obj=result, @@ -1284,7 +1354,7 @@ class Logging: end_time=end_time, print_verbose=print_verbose, ) - elif ( + if ( isinstance(callback, CustomLogger) and self.model_call_details.get("litellm_params", {}).get( "acompletion", False @@ -1295,7 +1365,6 @@ class Logging: ) == False ): # custom logger class - print_verbose(f"success callbacks: Running Custom Logger Class") if self.stream and complete_streaming_response is None: callback.log_stream_event( kwargs=self.model_call_details, @@ -1317,7 +1386,17 @@ class Logging: start_time=start_time, end_time=end_time, ) - if callable(callback): # custom logger functions + if ( + callable(callback) == True + and self.model_call_details.get("litellm_params", {}).get( + "acompletion", False + ) + == False + and self.model_call_details.get("litellm_params", {}).get( + "aembedding", False + ) + == False + ): # custom logger functions print_verbose( f"success callbacks: Running Custom Callback Function" ) @@ -1351,34 +1430,69 @@ class Logging: """ Implementing async callbacks, to handle asyncio event loop issues when custom integrations need to use async functions. """ - print_verbose(f"Async success callbacks: {litellm._async_success_callback}") + start_time, end_time, result = self._success_handler_helper_fn( + start_time=start_time, end_time=end_time, result=result, cache_hit=cache_hit + ) ## BUILD COMPLETE STREAMED RESPONSE complete_streaming_response = None if self.stream: if result.choices[0].finish_reason is not None: # if it's the last chunk self.streaming_chunks.append(result) - # print_verbose(f"final set of received chunks: {self.streaming_chunks}") + # verbose_logger.debug(f"final set of received chunks: {self.streaming_chunks}") try: complete_streaming_response = litellm.stream_chunk_builder( self.streaming_chunks, messages=self.model_call_details.get("messages", None), + start_time=start_time, + end_time=end_time, ) except Exception as e: - print_verbose( + verbose_logger.debug( f"Error occurred building stream chunk: {traceback.format_exc()}" ) complete_streaming_response = None else: self.streaming_chunks.append(result) - if complete_streaming_response: - print_verbose("Async success callbacks: Got a complete streaming response") + if complete_streaming_response is not None: + verbose_logger.debug( + "Async success callbacks: Got a complete streaming response" + ) self.model_call_details[ "complete_streaming_response" ] = complete_streaming_response - start_time, end_time, result = self._success_handler_helper_fn( - start_time=start_time, end_time=end_time, result=result, cache_hit=cache_hit - ) - for callback in litellm._async_success_callback: + try: + if self.model_call_details.get("cache_hit", False) == True: + self.model_call_details["response_cost"] = 0.0 + else: + self.model_call_details["response_cost"] = litellm.completion_cost( + completion_response=complete_streaming_response, + ) + verbose_logger.debug( + f"Model={self.model}; cost={self.model_call_details['response_cost']}" + ) + except litellm.NotFoundError as e: + verbose_logger.debug( + f"Model={self.model} not found in completion cost map." + ) + self.model_call_details["response_cost"] = None + + if self.dynamic_async_success_callbacks is not None and isinstance( + self.dynamic_async_success_callbacks, list + ): + callbacks = self.dynamic_async_success_callbacks + ## keep the internal functions ## + for callback in litellm._async_success_callback: + callback_name = "" + if isinstance(callback, CustomLogger): + callback_name = callback.__class__.__name__ + if callable(callback): + callback_name = callback.__name__ + if "_PROXY_" in callback_name: + callbacks.append(callback) + else: + callbacks = litellm._async_success_callback + verbose_logger.debug(f"Async success callbacks: {callbacks}") + for callback in callbacks: try: if callback == "cache" and litellm.cache is not None: # set_cache once complete streaming response is built @@ -1424,15 +1538,28 @@ class Logging: end_time=end_time, ) if callable(callback): # custom logger functions - print_verbose(f"Async success callbacks: async_log_event") - await customLogger.async_log_event( - kwargs=self.model_call_details, - response_obj=result, - start_time=start_time, - end_time=end_time, - print_verbose=print_verbose, - callback_func=callback, - ) + print_verbose(f"Making async function logging call") + if self.stream: + if "complete_streaming_response" in self.model_call_details: + await customLogger.async_log_event( + kwargs=self.model_call_details, + response_obj=self.model_call_details[ + "complete_streaming_response" + ], + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) + else: + await customLogger.async_log_event( + kwargs=self.model_call_details, + response_obj=result, + start_time=start_time, + end_time=end_time, + print_verbose=print_verbose, + callback_func=callback, + ) if callback == "dynamodb": global dynamoLogger if dynamoLogger is None: @@ -1762,8 +1889,16 @@ class Rules: for rule in litellm.post_call_rules: if callable(rule): decision = rule(input) - if decision is False: - raise litellm.APIResponseValidationError(message="LLM Response failed post-call-rule check", llm_provider="", model=model) # type: ignore + if type(decision) == bool: + if decision is False: + raise litellm.APIResponseValidationError(message="LLM Response failed post-call-rule check", llm_provider="", model=model) # type: ignore + elif type(decision) == dict: + decision_val = decision.get("decision", True) + decision_message = decision.get( + "message", "LLM Response failed post-call-rule check" + ) + if decision_val is False: + raise litellm.APIResponseValidationError(message=decision_message, llm_provider="", model=model) # type: ignore return True @@ -1845,12 +1980,6 @@ def client(original_function): # we only support async s3 logging for acompletion/aembedding since that's used on proxy litellm._async_success_callback.append(callback) removed_async_items.append(index) - elif callback == "langfuse" and inspect.iscoroutinefunction( - original_function - ): - # use async success callback for langfuse if this is litellm.acompletion(). Streaming logging does not work otherwise - litellm._async_success_callback.append(callback) - removed_async_items.append(index) # Pop the async items from success_callback in reverse order to avoid index issues for index in reversed(removed_async_items): @@ -1866,6 +1995,31 @@ def client(original_function): # Pop the async items from failure_callback in reverse order to avoid index issues for index in reversed(removed_async_items): litellm.failure_callback.pop(index) + ### DYNAMIC CALLBACKS ### + dynamic_success_callbacks = None + dynamic_async_success_callbacks = None + if kwargs.get("success_callback", None) is not None and isinstance( + kwargs["success_callback"], list + ): + removed_async_items = [] + for index, callback in enumerate(kwargs["success_callback"]): + if ( + inspect.iscoroutinefunction(callback) + or callback == "dynamodb" + or callback == "s3" + ): + if dynamic_async_success_callbacks is not None and isinstance( + dynamic_async_success_callbacks, list + ): + dynamic_async_success_callbacks.append(callback) + else: + dynamic_async_success_callbacks = [callback] + removed_async_items.append(index) + # Pop the async items from success_callback in reverse order to avoid index issues + for index in reversed(removed_async_items): + kwargs["success_callback"].pop(index) + dynamic_success_callbacks = kwargs.pop("success_callback") + if add_breadcrumb: add_breadcrumb( category="litellm.llm_call", @@ -1927,8 +2081,22 @@ def client(original_function): function_id=function_id, call_type=call_type, start_time=start_time, + dynamic_success_callbacks=dynamic_success_callbacks, + dynamic_async_success_callbacks=dynamic_async_success_callbacks, + langfuse_public_key=kwargs.pop("langfuse_public_key", None), + langfuse_secret=kwargs.pop("langfuse_secret", None), ) - return logging_obj + ## check if metadata is passed in + litellm_params = {} + if "metadata" in kwargs: + litellm_params["metadata"] = kwargs["metadata"] + logging_obj.update_environment_variables( + model=model, + user="", + optional_params={}, + litellm_params=litellm_params, + ) + return logging_obj, kwargs except Exception as e: import logging @@ -1983,13 +2151,13 @@ def client(original_function): logging_obj = kwargs.get("litellm_logging_obj", None) # only set litellm_call_id if its not in kwargs + call_type = original_function.__name__ if "litellm_call_id" not in kwargs: kwargs["litellm_call_id"] = str(uuid.uuid4()) try: model = args[0] if len(args) > 0 else kwargs["model"] except: model = None - call_type = original_function.__name__ if ( call_type != CallTypes.image_generation.value and call_type != CallTypes.text_completion.value @@ -1998,7 +2166,7 @@ def client(original_function): try: if logging_obj is None: - logging_obj = function_setup(start_time, *args, **kwargs) + logging_obj, kwargs = function_setup(start_time, *args, **kwargs) kwargs["litellm_logging_obj"] = logging_obj # CHECK FOR 'os.environ/' in kwargs @@ -2070,7 +2238,7 @@ def client(original_function): if call_type == CallTypes.completion.value and isinstance( cached_result, dict ): - return convert_to_model_response_object( + cached_result = convert_to_model_response_object( response_object=cached_result, model_response_object=ModelResponse(), stream=kwargs.get("stream", False), @@ -2078,17 +2246,102 @@ def client(original_function): elif call_type == CallTypes.embedding.value and isinstance( cached_result, dict ): - return convert_to_model_response_object( + cached_result = convert_to_model_response_object( response_object=cached_result, response_type="embedding", ) - else: - return cached_result + + # LOG SUCCESS + cache_hit = True + end_time = datetime.datetime.now() + ( + model, + custom_llm_provider, + dynamic_api_key, + api_base, + ) = litellm.get_llm_provider( + model=model, + custom_llm_provider=kwargs.get( + "custom_llm_provider", None + ), + api_base=kwargs.get("api_base", None), + api_key=kwargs.get("api_key", None), + ) + print_verbose( + f"Async Wrapper: Completed Call, calling async_success_handler: {logging_obj.async_success_handler}" + ) + logging_obj.update_environment_variables( + model=model, + user=kwargs.get("user", None), + optional_params={}, + litellm_params={ + "logger_fn": kwargs.get("logger_fn", None), + "acompletion": False, + "metadata": kwargs.get("metadata", {}), + "model_info": kwargs.get("model_info", {}), + "proxy_server_request": kwargs.get( + "proxy_server_request", None + ), + "preset_cache_key": kwargs.get( + "preset_cache_key", None + ), + "stream_response": kwargs.get( + "stream_response", {} + ), + }, + input=kwargs.get("messages", ""), + api_key=kwargs.get("api_key", None), + original_response=str(cached_result), + additional_args=None, + stream=kwargs.get("stream", False), + ) + threading.Thread( + target=logging_obj.success_handler, + args=(cached_result, start_time, end_time, cache_hit), + ).start() + return cached_result + + # CHECK MAX TOKENS + if ( + kwargs.get("max_tokens", None) is not None + and model is not None + and litellm.drop_params + == True # user is okay with params being modified + and ( + call_type == CallTypes.acompletion.value + or call_type == CallTypes.completion.value + ) + ): + try: + base_model = model + if kwargs.get("hf_model_name", None) is not None: + base_model = f"huggingface/{kwargs.get('hf_model_name')}" + max_output_tokens = ( + get_max_tokens(model=base_model) or 4096 + ) # assume min context window is 4k tokens + user_max_tokens = kwargs.get("max_tokens") + ## Scenario 1: User limit + prompt > model limit + messages = None + if len(args) > 1: + messages = args[1] + elif kwargs.get("messages", None): + messages = kwargs["messages"] + input_tokens = token_counter(model=base_model, messages=messages) + input_tokens += max( + 0.1 * input_tokens, 10 + ) # give at least a 10 token buffer. token counting can be imprecise. + if input_tokens > max_output_tokens: + pass # allow call to fail normally + elif user_max_tokens + input_tokens > max_output_tokens: + user_max_tokens = max_output_tokens - input_tokens + print_verbose(f"user_max_tokens: {user_max_tokens}") + kwargs["max_tokens"] = user_max_tokens + except Exception as e: + print_verbose(f"Error while checking max token limit: {str(e)}") # MODEL CALL result = original_function(*args, **kwargs) end_time = datetime.datetime.now() if "stream" in kwargs and kwargs["stream"] == True: - # TODO: Add to cache for streaming if ( "complete_response" in kwargs and kwargs["complete_response"] == True @@ -2116,11 +2369,11 @@ def client(original_function): litellm.cache is not None and str(original_function.__name__) in litellm.cache.supported_call_types - ): + ) and (kwargs.get("cache", {}).get("no-store", False) != True): litellm.cache.add_cache(result, *args, **kwargs) # LOG SUCCESS - handle streaming success logging in the _next_ object, remove `handle_success` once it's deprecated - print_verbose(f"Wrapper: Completed Call, calling success_handler") + verbose_logger.info(f"Wrapper: Completed Call, calling success_handler") threading.Thread( target=logging_obj.success_handler, args=(result, start_time, end_time) ).start() @@ -2147,7 +2400,12 @@ def client(original_function): ) if num_retries: - if isinstance(e, openai.APIError) or isinstance(e, openai.Timeout): + if ( + isinstance(e, openai.APIError) + or isinstance(e, openai.Timeout) + or isinstance(openai.APIConnectionError) + ): + print_verbose(f"RETRY TRIGGERED!") kwargs["num_retries"] = num_retries return litellm.completion_with_retries(*args, **kwargs) elif ( @@ -2201,7 +2459,7 @@ def client(original_function): try: if logging_obj is None: - logging_obj = function_setup(start_time, *args, **kwargs) + logging_obj, kwargs = function_setup(start_time, *args, **kwargs) kwargs["litellm_logging_obj"] = logging_obj # [OPTIONAL] CHECK BUDGET @@ -2456,9 +2714,12 @@ def client(original_function): # [OPTIONAL] ADD TO CACHE if ( - litellm.cache is not None - and str(original_function.__name__) - in litellm.cache.supported_call_types + (litellm.cache is not None) + and ( + str(original_function.__name__) + in litellm.cache.supported_call_types + ) + and (kwargs.get("cache", {}).get("no-store", False) != True) ): if isinstance(result, litellm.ModelResponse) or isinstance( result, litellm.EmbeddingResponse @@ -2496,12 +2757,15 @@ def client(original_function): threading.Thread( target=logging_obj.success_handler, args=(result, start_time, end_time) ).start() + # RETURN RESULT if hasattr(result, "_hidden_params"): result._hidden_params["model_id"] = kwargs.get("model_info", {}).get( "id", None ) - if isinstance(result, ModelResponse): + if isinstance(result, ModelResponse) or isinstance( + result, EmbeddingResponse + ): result._response_ms = ( end_time - start_time ).total_seconds() * 1000 # return response latency in ms like openai @@ -2635,24 +2899,20 @@ def get_replicate_completion_pricing(completion_response=None, total_time=0.0): def _select_tokenizer(model: str): - # cohere - import pkg_resources + from importlib import resources if model in litellm.cohere_models: + # cohere tokenizer = Tokenizer.from_pretrained("Cohere/command-nightly") return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} # anthropic elif model in litellm.anthropic_models: - # Read the JSON file - filename = pkg_resources.resource_filename( - __name__, "llms/tokenizers/anthropic_tokenizer.json" - ) - with open(filename, "r") as f: + with resources.open_text( + "litellm.llms.tokenizers", "anthropic_tokenizer.json" + ) as f: json_data = json.load(f) - # Decode the JSON data from utf-8 - json_data_decoded = json.dumps(json_data, ensure_ascii=False) - # Convert to str - json_str = str(json_data_decoded) + # Convert to str (if necessary) + json_str = json.dumps(json_data) # load tokenizer tokenizer = Tokenizer.from_str(json_str) return {"type": "huggingface_tokenizer", "tokenizer": tokenizer} @@ -2942,14 +3202,26 @@ def token_counter( print_verbose( f"Token Counter - using generic token counter, for model={model}" ) - enc = tokenizer_json["tokenizer"].encode(text) - num_tokens = len(enc) + num_tokens = openai_token_counter( + text=text, # type: ignore + model="gpt-3.5-turbo", + messages=messages, + is_tool_call=is_tool_call, + count_response_tokens=count_response_tokens, + ) else: num_tokens = len(encoding.encode(text)) # type: ignore return num_tokens -def cost_per_token(model="", prompt_tokens=0, completion_tokens=0): +def cost_per_token( + model="", + prompt_tokens=0, + completion_tokens=0, + response_time_ms=None, + custom_llm_provider=None, + region_name=None, +): """ Calculates the cost per token for a given model, prompt tokens, and completion tokens. @@ -2965,15 +3237,51 @@ def cost_per_token(model="", prompt_tokens=0, completion_tokens=0): prompt_tokens_cost_usd_dollar = 0 completion_tokens_cost_usd_dollar = 0 model_cost_ref = litellm.model_cost + model_with_provider = model + if custom_llm_provider is not None: + model_with_provider = custom_llm_provider + "/" + model + if region_name is not None: + model_with_provider_and_region = ( + f"{custom_llm_provider}/{region_name}/{model}" + ) + if ( + model_with_provider_and_region in model_cost_ref + ): # use region based pricing, if it's available + model_with_provider = model_with_provider_and_region + if model_with_provider in model_cost_ref: + model = model_with_provider # see this https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models print_verbose(f"Looking up model={model} in model_cost_map") - if model in model_cost_ref: - prompt_tokens_cost_usd_dollar = ( - model_cost_ref[model]["input_cost_per_token"] * prompt_tokens + print_verbose(f"Success: model={model} in model_cost_map") + print_verbose( + f"prompt_tokens={prompt_tokens}; completion_tokens={completion_tokens}" ) - completion_tokens_cost_usd_dollar = ( - model_cost_ref[model]["output_cost_per_token"] * completion_tokens + if ( + model_cost_ref[model].get("input_cost_per_token", None) is not None + and model_cost_ref[model].get("output_cost_per_token", None) is not None + ): + ## COST PER TOKEN ## + prompt_tokens_cost_usd_dollar = ( + model_cost_ref[model]["input_cost_per_token"] * prompt_tokens + ) + completion_tokens_cost_usd_dollar = ( + model_cost_ref[model]["output_cost_per_token"] * completion_tokens + ) + elif ( + model_cost_ref[model].get("input_cost_per_second", None) is not None + and response_time_ms is not None + ): + print_verbose( + f"For model={model} - input_cost_per_second: {model_cost_ref[model].get('input_cost_per_second')}; response time: {response_time_ms}" + ) + ## COST PER SECOND ## + prompt_tokens_cost_usd_dollar = ( + model_cost_ref[model]["input_cost_per_second"] * response_time_ms / 1000 + ) + completion_tokens_cost_usd_dollar = 0.0 + print_verbose( + f"Returned custom cost for model={model} - prompt_tokens_cost_usd_dollar: {prompt_tokens_cost_usd_dollar}, completion_tokens_cost_usd_dollar: {completion_tokens_cost_usd_dollar}" ) return prompt_tokens_cost_usd_dollar, completion_tokens_cost_usd_dollar elif "ft:gpt-3.5-turbo" in model: @@ -2988,17 +3296,23 @@ def cost_per_token(model="", prompt_tokens=0, completion_tokens=0): ) return prompt_tokens_cost_usd_dollar, completion_tokens_cost_usd_dollar elif model in litellm.azure_llms: - print_verbose(f"Cost Tracking: {model} is an Azure LLM") + verbose_logger.debug(f"Cost Tracking: {model} is an Azure LLM") model = litellm.azure_llms[model] + verbose_logger.debug( + f"applying cost={model_cost_ref[model]['input_cost_per_token']} for prompt_tokens={prompt_tokens}" + ) prompt_tokens_cost_usd_dollar = ( model_cost_ref[model]["input_cost_per_token"] * prompt_tokens ) + verbose_logger.debug( + f"applying cost={model_cost_ref[model]['output_cost_per_token']} for completion_tokens={completion_tokens}" + ) completion_tokens_cost_usd_dollar = ( model_cost_ref[model]["output_cost_per_token"] * completion_tokens ) return prompt_tokens_cost_usd_dollar, completion_tokens_cost_usd_dollar elif model in litellm.azure_embedding_models: - print_verbose(f"Cost Tracking: {model} is an Azure Embedding Model") + verbose_logger.debug(f"Cost Tracking: {model} is an Azure Embedding Model") model = litellm.azure_embedding_models[model] prompt_tokens_cost_usd_dollar = ( model_cost_ref[model]["input_cost_per_token"] * prompt_tokens @@ -3028,7 +3342,14 @@ def completion_cost( prompt="", messages: List = [], completion="", - total_time=0.0, # used for replicate + total_time=0.0, # used for replicate, sagemaker + ### REGION ### + custom_llm_provider=None, + region_name=None, # used for bedrock pricing + ### IMAGE GEN ### + size=None, + quality=None, + n=None, # number of images ): """ Calculate the cost of a given completion call fot GPT-3.5-turbo, llama2, any litellm supported llm. @@ -3059,15 +3380,27 @@ def completion_cost( # Handle Inputs to completion_cost prompt_tokens = 0 completion_tokens = 0 + custom_llm_provider = None if completion_response is not None: # get input/output tokens from completion_response prompt_tokens = completion_response.get("usage", {}).get("prompt_tokens", 0) completion_tokens = completion_response.get("usage", {}).get( "completion_tokens", 0 ) + total_time = completion_response.get("_response_ms", 0) + verbose_logger.debug( + f"completion_response response ms: {completion_response.get('_response_ms')} " + ) model = ( model or completion_response["model"] ) # check if user passed an override for model, if it's none check completion_response['model'] + if hasattr(completion_response, "_hidden_params"): + custom_llm_provider = completion_response._hidden_params.get( + "custom_llm_provider", "" + ) + region_name = completion_response._hidden_params.get( + "region_name", region_name + ) else: if len(messages) > 0: prompt_tokens = token_counter(model=model, messages=messages) @@ -3079,6 +3412,37 @@ def completion_cost( f"Model is None and does not exist in passed completion_response. Passed completion_response={completion_response}, model={model}" ) + if size is not None and n is not None: + ### IMAGE GENERATION COST CALCULATION ### + image_gen_model_name = f"{size}/{model}" + image_gen_model_name_with_quality = image_gen_model_name + if quality is not None: + image_gen_model_name_with_quality = f"{quality}/{image_gen_model_name}" + size = size.split("-x-") + height = int(size[0]) + width = int(size[1]) + verbose_logger.debug(f"image_gen_model_name: {image_gen_model_name}") + verbose_logger.debug( + f"image_gen_model_name_with_quality: {image_gen_model_name_with_quality}" + ) + if image_gen_model_name in litellm.model_cost: + return ( + litellm.model_cost[image_gen_model_name]["input_cost_per_pixel"] + * height + * width + * n + ) + elif image_gen_model_name_with_quality in litellm.model_cost: + return ( + litellm.model_cost[image_gen_model_name_with_quality][ + "input_cost_per_pixel" + ] + * height + * width + * n + ) + else: + raise Exception(f"Model={model} not found in completion cost model map") # Calculate cost based on prompt_tokens, completion_tokens if "togethercomputer" in model or "together_ai" in model: # together ai prices based on size of llm @@ -3095,8 +3459,15 @@ def completion_cost( model=model, prompt_tokens=prompt_tokens, completion_tokens=completion_tokens, + custom_llm_provider=custom_llm_provider, + response_time_ms=total_time, + region_name=region_name, ) - return prompt_tokens_cost_usd_dollar + completion_tokens_cost_usd_dollar + _final_cost = prompt_tokens_cost_usd_dollar + completion_tokens_cost_usd_dollar + print_verbose( + f"final cost: {_final_cost}; prompt_tokens_cost_usd_dollar: {prompt_tokens_cost_usd_dollar}; completion_tokens_cost_usd_dollar: {completion_tokens_cost_usd_dollar}" + ) + return _final_cost except Exception as e: raise e @@ -3125,9 +3496,8 @@ def register_model(model_cost: Union[str, dict]): for key, value in loaded_model_cost.items(): ## override / add new keys to the existing model cost dictionary - if key in litellm.model_cost: - for k, v in loaded_model_cost[key].items(): - litellm.model_cost[key][k] = v + litellm.model_cost.setdefault(key, {}).update(value) + verbose_logger.debug(f"{key} added to model cost map") # add new model names to provider lists if value.get("litellm_provider") == "openai": if key not in litellm.open_ai_chat_completion_models: @@ -3244,27 +3614,50 @@ def get_optional_params_image_gen( for k, v in passed_params.items() if (k in default_params and v != default_params[k]) } - ## raise exception if non-default value passed for non-openai/azure embedding calls - if custom_llm_provider != "openai" and custom_llm_provider != "azure": - if len(non_default_params.keys()) > 0: - if litellm.drop_params is True: # drop the unsupported non-default values - keys = list(non_default_params.keys()) - for k in keys: - non_default_params.pop(k, None) - return non_default_params - raise UnsupportedParamsError( - status_code=500, - message=f"Setting user/encoding format is not supported by {custom_llm_provider}. To drop it from the call, set `litellm.drop_params = True`.", - ) + optional_params = {} - final_params = {**non_default_params, **kwargs} - return final_params + ## raise exception if non-default value passed for non-openai/azure embedding calls + def _check_valid_arg(supported_params): + if len(non_default_params.keys()) > 0: + keys = list(non_default_params.keys()) + for k in keys: + if ( + litellm.drop_params is True and k not in supported_params + ): # drop the unsupported non-default values + non_default_params.pop(k, None) + elif k not in supported_params: + raise UnsupportedParamsError( + status_code=500, + message=f"Setting user/encoding format is not supported by {custom_llm_provider}. To drop it from the call, set `litellm.drop_params = True`.", + ) + return non_default_params + + if ( + custom_llm_provider == "openai" + or custom_llm_provider == "azure" + or custom_llm_provider in litellm.openai_compatible_providers + ): + optional_params = non_default_params + elif custom_llm_provider == "bedrock": + supported_params = ["size"] + _check_valid_arg(supported_params=supported_params) + if size is not None: + width, height = size.split("x") + optional_params["width"] = int(width) + optional_params["height"] = int(height) + + for k in passed_params.keys(): + if k not in default_params.keys(): + optional_params[k] = passed_params[k] + return optional_params def get_optional_params_embeddings( # 2 optional params + model=None, user=None, encoding_format=None, + dimensions=None, custom_llm_provider="", **kwargs, ): @@ -3275,7 +3668,7 @@ def get_optional_params_embeddings( for k, v in special_params.items(): passed_params[k] = v - default_params = {"user": None, "encoding_format": None} + default_params = {"user": None, "encoding_format": None, "dimensions": None} non_default_params = { k: v @@ -3283,6 +3676,19 @@ def get_optional_params_embeddings( if (k in default_params and v != default_params[k]) } ## raise exception if non-default value passed for non-openai/azure embedding calls + if custom_llm_provider == "openai": + # 'dimensions` is only supported in `text-embedding-3` and later models + + if ( + model is not None + and "text-embedding-3" not in model + and "dimensions" in non_default_params.keys() + ): + raise UnsupportedParamsError( + status_code=500, + message=f"Setting dimensions is not supported for OpenAI `text-embedding-3` and later models. To drop it from the call, set `litellm.drop_params = True`.", + ) + if ( custom_llm_provider != "openai" and custom_llm_provider != "azure" @@ -3333,6 +3739,14 @@ def get_optional_params( passed_params = locals() special_params = passed_params.pop("kwargs") for k, v in special_params.items(): + if k.startswith("aws_") and ( + custom_llm_provider != "bedrock" and custom_llm_provider != "sagemaker" + ): # allow dynamically setting boto3 init logic + continue + elif ( + k.startswith("vertex_") and custom_llm_provider != "vertex_ai" + ): # allow dynamically setting vertex ai init logic + continue passed_params[k] = v default_params = { "functions": None, @@ -3416,16 +3830,20 @@ def get_optional_params( ) def _check_valid_arg(supported_params): - print_verbose( + verbose_logger.debug( f"\nLiteLLM completion() model= {model}; provider = {custom_llm_provider}" ) - print_verbose(f"\nLiteLLM: Params passed to completion() {passed_params}") - print_verbose( + verbose_logger.debug( + f"\nLiteLLM: Params passed to completion() {passed_params}" + ) + verbose_logger.debug( f"\nLiteLLM: Non-Default params passed to completion() {non_default_params}" ) unsupported_params = {} for k in non_default_params.keys(): if k not in supported_params: + if k == "user": + continue if k == "n" and n == 1: # langchain sends n=1 as a default value continue # skip this param if ( @@ -4038,7 +4456,6 @@ def get_optional_params( elif custom_llm_provider == "mistral": supported_params = ["temperature", "top_p", "stream", "max_tokens"] _check_valid_arg(supported_params=supported_params) - optional_params = non_default_params if temperature is not None: optional_params["temperature"] = temperature if top_p is not None: @@ -4191,10 +4608,18 @@ def get_optional_params( optional_params["logprobs"] = logprobs if top_logprobs is not None: optional_params["top_logprobs"] = top_logprobs - # if user passed in non-default kwargs for specific providers/models, pass them along - for k in passed_params.keys(): - if k not in default_params.keys(): - optional_params[k] = passed_params[k] + if custom_llm_provider in ["openai", "azure"] + litellm.openai_compatible_providers: + # for openai, azure we should pass the extra/passed params within `extra_body` https://github.com/openai/openai-python/blob/ac33853ba10d13ac149b1fa3ca6dba7d613065c9/src/openai/resources/models.py#L46 + extra_body = passed_params.pop("extra_body", {}) + for k in passed_params.keys(): + if k not in default_params.keys(): + extra_body[k] = passed_params[k] + optional_params["extra_body"] = extra_body + else: + # if user passed in non-default kwargs for specific providers/models, pass them along + for k in passed_params.keys(): + if k not in default_params.keys(): + optional_params[k] = passed_params[k] return optional_params @@ -4303,6 +4728,7 @@ def get_llm_provider( or model in litellm.vertex_text_models or model in litellm.vertex_code_text_models or model in litellm.vertex_language_models + or model in litellm.vertex_embedding_models ): custom_llm_provider = "vertex_ai" ## ai21 @@ -4410,7 +4836,7 @@ def get_api_key(llm_provider: str, dynamic_api_key: Optional[str]): def get_max_tokens(model: str): """ - Get the maximum number of tokens allowed for a given model. + Get the maximum number of output tokens allowed for a given model. Parameters: model (str): The name of the model. @@ -4429,7 +4855,6 @@ def get_max_tokens(model: str): def _get_max_position_embeddings(model_name): # Construct the URL for the config.json file config_url = f"https://huggingface.co/{model_name}/raw/main/config.json" - try: # Make the HTTP request to get the raw JSON file response = requests.get(config_url) @@ -4437,10 +4862,8 @@ def get_max_tokens(model: str): # Parse the JSON response config_json = response.json() - # Extract and return the max_position_embeddings max_position_embeddings = config_json.get("max_position_embeddings") - if max_position_embeddings is not None: return max_position_embeddings else: @@ -4450,7 +4873,10 @@ def get_max_tokens(model: str): try: if model in litellm.model_cost: - return litellm.model_cost[model]["max_tokens"] + if "max_output_tokens" in litellm.model_cost[model]: + return litellm.model_cost[model]["max_output_tokens"] + elif "max_tokens" in litellm.model_cost[model]: + return litellm.model_cost[model]["max_tokens"] model, custom_llm_provider, _, _ = get_llm_provider(model=model) if custom_llm_provider == "huggingface": max_tokens = _get_max_position_embeddings(model_name=model) @@ -5217,8 +5643,13 @@ def convert_to_streaming_response(response_object: Optional[dict] = None): # gpt-4 vision can return 'finish_reason' or 'finish_details' finish_reason = choice.get("finish_details") logprobs = choice.get("logprobs", None) + enhancements = choice.get("enhancements", None) choice = StreamingChoices( - finish_reason=finish_reason, index=idx, delta=delta, logprobs=logprobs + finish_reason=finish_reason, + index=idx, + delta=delta, + logprobs=logprobs, + enhancements=enhancements, ) choice_list.append(choice) @@ -5252,6 +5683,8 @@ def convert_to_model_response_object( "completion", "embedding", "image_generation" ] = "completion", stream=False, + start_time=None, + end_time=None, ): try: if response_type == "completion" and ( @@ -5276,11 +5709,13 @@ def convert_to_model_response_object( # gpt-4 vision can return 'finish_reason' or 'finish_details' finish_reason = choice.get("finish_details") logprobs = choice.get("logprobs", None) + enhancements = choice.get("enhancements", None) choice = Choices( finish_reason=finish_reason, index=idx, message=message, logprobs=logprobs, + enhancements=enhancements, ) choice_list.append(choice) model_response_object.choices = choice_list @@ -5303,6 +5738,12 @@ def convert_to_model_response_object( if "model" in response_object: model_response_object.model = response_object["model"] + + if start_time is not None and end_time is not None: + model_response_object._response_ms = ( # type: ignore + end_time - start_time + ).total_seconds() * 1000 + return model_response_object elif response_type == "embedding" and ( model_response_object is None @@ -5327,6 +5768,11 @@ def convert_to_model_response_object( model_response_object.usage.prompt_tokens = response_object["usage"].get("prompt_tokens", 0) # type: ignore model_response_object.usage.total_tokens = response_object["usage"].get("total_tokens", 0) # type: ignore + if start_time is not None and end_time is not None: + model_response_object._response_ms = ( # type: ignore + end_time - start_time + ).total_seconds() * 1000 # return response latency in ms like openai + return model_response_object elif response_type == "image_generation" and ( model_response_object is None @@ -5741,14 +6187,29 @@ def exception_type( or custom_llm_provider == "custom_openai" or custom_llm_provider in litellm.openai_compatible_providers ): + # custom_llm_provider is openai, make it OpenAI + message = original_exception.message + if message is not None and isinstance(message, str): + message = message.replace("OPENAI", custom_llm_provider.upper()) + message = message.replace("openai", custom_llm_provider) + message = message.replace("OpenAI", custom_llm_provider) + if custom_llm_provider == "openai": + exception_provider = "OpenAI" + "Exception" + else: + exception_provider = ( + custom_llm_provider[0].upper() + + custom_llm_provider[1:] + + "Exception" + ) + if ( "This model's maximum context length is" in error_str or "Request too large" in error_str ): exception_mapping_worked = True raise ContextWindowExceededError( - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, model=model, response=original_exception.response, ) @@ -5758,8 +6219,8 @@ def exception_type( ): exception_mapping_worked = True raise NotFoundError( - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, model=model, response=original_exception.response, ) @@ -5769,8 +6230,8 @@ def exception_type( ): exception_mapping_worked = True raise ContentPolicyViolationError( - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, model=model, response=original_exception.response, ) @@ -5780,8 +6241,19 @@ def exception_type( ): exception_mapping_worked = True raise BadRequestError( - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, + model=model, + response=original_exception.response, + ) + elif ( + "The api_key client option must be set either by passing api_key to the client or by setting the OPENAI_API_KEY environment variable" + in error_str + ): + exception_mapping_worked = True + raise AuthenticationError( + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, model=model, response=original_exception.response, ) @@ -5790,63 +6262,63 @@ def exception_type( if original_exception.status_code == 401: exception_mapping_worked = True raise AuthenticationError( - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, model=model, response=original_exception.response, ) elif original_exception.status_code == 404: exception_mapping_worked = True raise NotFoundError( - message=f"OpenAIException - {original_exception.message}", + message=f"{exception_provider} - {message}", model=model, - llm_provider="openai", + llm_provider=custom_llm_provider, response=original_exception.response, ) elif original_exception.status_code == 408: exception_mapping_worked = True raise Timeout( - message=f"OpenAIException - {original_exception.message}", + message=f"{exception_provider} - {message}", model=model, - llm_provider="openai", + llm_provider=custom_llm_provider, ) elif original_exception.status_code == 422: exception_mapping_worked = True raise BadRequestError( - message=f"OpenAIException - {original_exception.message}", + message=f"{exception_provider} - {message}", model=model, - llm_provider="openai", + llm_provider=custom_llm_provider, response=original_exception.response, ) elif original_exception.status_code == 429: exception_mapping_worked = True raise RateLimitError( - message=f"OpenAIException - {original_exception.message}", + message=f"{exception_provider} - {message}", model=model, - llm_provider="openai", + llm_provider=custom_llm_provider, response=original_exception.response, ) elif original_exception.status_code == 503: exception_mapping_worked = True raise ServiceUnavailableError( - message=f"OpenAIException - {original_exception.message}", + message=f"{exception_provider} - {message}", model=model, - llm_provider="openai", + llm_provider=custom_llm_provider, response=original_exception.response, ) elif original_exception.status_code == 504: # gateway timeout error exception_mapping_worked = True raise Timeout( - message=f"OpenAIException - {original_exception.message}", + message=f"{exception_provider} - {message}", model=model, - llm_provider="openai", + llm_provider=custom_llm_provider, ) else: exception_mapping_worked = True raise APIError( status_code=original_exception.status_code, - message=f"OpenAIException - {original_exception.message}", - llm_provider="openai", + message=f"{exception_provider} - {message}", + llm_provider=custom_llm_provider, model=model, request=original_exception.request, ) @@ -6024,6 +6496,7 @@ def exception_type( "too many tokens" in error_str or "expected maxLength:" in error_str or "Input is too long" in error_str + or "prompt: length: 1.." in error_str or "Too many input tokens" in error_str ): exception_mapping_worked = True @@ -6053,6 +6526,14 @@ def exception_type( llm_provider="bedrock", response=original_exception.response, ) + if "AccessDeniedException" in error_str: + exception_mapping_worked = True + raise PermissionDeniedError( + message=f"BedrockException PermissionDeniedError - {error_str}", + model=model, + llm_provider="bedrock", + response=original_exception.response, + ) if ( "throttlingException" in error_str or "ThrottlingException" in error_str @@ -6086,6 +6567,22 @@ def exception_type( model=model, response=original_exception.response, ) + elif original_exception.status_code == 400: + exception_mapping_worked = True + raise BadRequestError( + message=f"BedrockException - {original_exception.message}", + llm_provider="bedrock", + model=model, + response=original_exception.response, + ) + elif original_exception.status_code == 404: + exception_mapping_worked = True + raise NotFoundError( + message=f"BedrockException - {original_exception.message}", + llm_provider="bedrock", + model=model, + response=original_exception.response, + ) elif custom_llm_provider == "sagemaker": if "Unable to locate credentials" in error_str: exception_mapping_worked = True @@ -6106,6 +6603,17 @@ def exception_type( llm_provider="sagemaker", response=original_exception.response, ) + elif ( + "`inputs` tokens + `max_new_tokens` must be <=" in error_str + or "instance type with more CPU capacity or memory" in error_str + ): + exception_mapping_worked = True + raise ContextWindowExceededError( + message=f"SagemakerException - {error_str}", + model=model, + llm_provider="sagemaker", + response=original_exception.response, + ) elif custom_llm_provider == "vertex_ai": if ( "Vertex AI API has not been used in project" in error_str @@ -6134,6 +6642,23 @@ def exception_type( llm_provider="vertex_ai", response=original_exception.response, ) + elif ( + "429 Quota exceeded" in error_str + or "IndexError: list index out of range" + ): + exception_mapping_worked = True + raise RateLimitError( + message=f"VertexAIException - {error_str}", + model=model, + llm_provider="vertex_ai", + response=httpx.Response( + status_code=429, + request=httpx.Request( + method="POST", + url=" https://cloud.google.com/vertex-ai/", + ), + ), + ) if hasattr(original_exception, "status_code"): if original_exception.status_code == 400: exception_mapping_worked = True @@ -6747,6 +7272,17 @@ def exception_type( model=model, response=original_exception.response, ) + elif ( + "The api_key client option must be set either by passing api_key to the client or by setting" + in error_str + ): + exception_mapping_worked = True + raise AuthenticationError( + message=f"{exception_provider} - {original_exception.message}", + llm_provider=custom_llm_provider, + model=model, + response=original_exception.response, + ) elif hasattr(original_exception, "status_code"): exception_mapping_worked = True if original_exception.status_code == 401: @@ -6781,6 +7317,21 @@ def exception_type( llm_provider="azure", response=original_exception.response, ) + elif original_exception.status_code == 503: + exception_mapping_worked = True + raise ServiceUnavailableError( + message=f"AzureException - {original_exception.message}", + model=model, + llm_provider="azure", + response=original_exception.response, + ) + elif original_exception.status_code == 504: # gateway timeout error + exception_mapping_worked = True + raise Timeout( + message=f"AzureException - {original_exception.message}", + model=model, + llm_provider="azure", + ) else: exception_mapping_worked = True raise APIError( @@ -6804,7 +7355,7 @@ def exception_type( ): # deal with edge-case invalid request error bug in openai-python sdk exception_mapping_worked = True raise BadRequestError( - message=f"OpenAIException: This can happen due to missing AZURE_API_VERSION: {str(original_exception)}", + message=f"{exception_provider}: This can happen due to missing AZURE_API_VERSION: {str(original_exception)}", model=model, llm_provider=custom_llm_provider, response=original_exception.response, @@ -7035,6 +7586,8 @@ class CustomStreamWrapper: self._hidden_params = { "model_id": (_model_info.get("id", None)) } # returned as x-litellm-model-id response header in proxy + self.response_id = None + self.logging_loop = None def __iter__(self): return self @@ -7349,13 +7902,23 @@ class CustomStreamWrapper: logprobs = None original_chunk = None # this is used for function/tool calling if len(str_line.choices) > 0: - if str_line.choices[0].delta.content is not None: + if ( + str_line.choices[0].delta is not None + and str_line.choices[0].delta.content is not None + ): text = str_line.choices[0].delta.content else: # function/tool calling chunk - when content is None. in this case we just return the original chunk from openai original_chunk = str_line if str_line.choices[0].finish_reason: is_finished = True finish_reason = str_line.choices[0].finish_reason + if finish_reason == "content_filter": + error_message = json.dumps( + str_line.choices[0].content_filter_result + ) + raise litellm.AzureOpenAIError( + status_code=400, message=error_message + ) # checking for logprobs if ( @@ -7366,16 +7929,6 @@ class CustomStreamWrapper: else: logprobs = None - if ( - hasattr(str_line.choices[0], "content_filter_result") - and str_line.choices[0].content_filter_result is not None - ): - error_message = json.dumps( - str_line.choices[0].content_filter_result - ) - raise litellm.AzureOpenAIError( - status_code=400, message=error_message - ) return { "text": text, "is_finished": is_finished, @@ -7608,8 +8161,35 @@ class CustomStreamWrapper: } return "" + def handle_sagemaker_stream(self, chunk): + if "data: [DONE]" in chunk: + text = "" + is_finished = True + finish_reason = "stop" + return { + "text": text, + "is_finished": is_finished, + "finish_reason": finish_reason, + } + elif isinstance(chunk, dict): + if chunk["is_finished"] == True: + finish_reason = "stop" + else: + finish_reason = "" + return { + "text": chunk["text"], + "is_finished": chunk["is_finished"], + "finish_reason": finish_reason, + } + def chunk_creator(self, chunk): model_response = ModelResponse(stream=True, model=self.model) + if self.response_id is not None: + model_response.id = self.response_id + else: + self.response_id = model_response.id + model_response._hidden_params["custom_llm_provider"] = self.custom_llm_provider + model_response._hidden_params["created_at"] = time.time() model_response.choices = [StreamingChoices()] model_response.choices[0].finish_reason = None response_obj = {} @@ -7691,7 +8271,9 @@ class CustomStreamWrapper: raise Exception("An unknown error occurred with the stream") model_response.choices[0].finish_reason = "stop" self.sent_last_chunk = True - elif self.custom_llm_provider and self.custom_llm_provider == "vertex_ai": + elif self.custom_llm_provider == "gemini": + completion_obj["content"] = chunk.text + elif self.custom_llm_provider and (self.custom_llm_provider == "vertex_ai"): try: # print(chunk) if hasattr(chunk, "text"): @@ -7726,19 +8308,14 @@ class CustomStreamWrapper: ] self.sent_last_chunk = True elif self.custom_llm_provider == "sagemaker": - print_verbose(f"ENTERS SAGEMAKER STREAMING") - if len(self.completion_stream) == 0: - if self.sent_last_chunk: - raise StopIteration - else: - model_response.choices[0].finish_reason = "stop" - self.sent_last_chunk = True - new_chunk = self.completion_stream - print_verbose(f"sagemaker chunk: {new_chunk}") - completion_obj["content"] = new_chunk - self.completion_stream = self.completion_stream[ - len(self.completion_stream) : - ] + verbose_logger.debug(f"ENTERS SAGEMAKER STREAMING for chunk {chunk}") + response_obj = self.handle_sagemaker_stream(chunk) + completion_obj["content"] = response_obj["text"] + if response_obj["is_finished"]: + model_response.choices[0].finish_reason = response_obj[ + "finish_reason" + ] + self.sent_last_chunk = True elif self.custom_llm_provider == "petals": if len(self.completion_stream) == 0: if self.sent_last_chunk: @@ -7839,6 +8416,7 @@ class CustomStreamWrapper: if len(original_chunk.choices) > 0: try: delta = dict(original_chunk.choices[0].delta) + print_verbose(f"original delta: {delta}") model_response.choices[0].delta = Delta(**delta) except Exception as e: model_response.choices[0].delta = Delta() @@ -7847,9 +8425,21 @@ class CustomStreamWrapper: model_response.system_fingerprint = ( original_chunk.system_fingerprint ) + print_verbose(f"self.sent_first_chunk: {self.sent_first_chunk}") if self.sent_first_chunk == False: model_response.choices[0].delta["role"] = "assistant" self.sent_first_chunk = True + elif self.sent_first_chunk == True and hasattr( + model_response.choices[0].delta, "role" + ): + _initial_delta = model_response.choices[ + 0 + ].delta.model_dump() + _initial_delta.pop("role", None) + model_response.choices[0].delta = Delta(**_initial_delta) + print_verbose( + f"model_response.choices[0].delta: {model_response.choices[0].delta}" + ) else: ## else completion_obj["content"] = model_response_str @@ -7857,7 +8447,7 @@ class CustomStreamWrapper: completion_obj["role"] = "assistant" self.sent_first_chunk = True model_response.choices[0].delta = Delta(**completion_obj) - print_verbose(f"model_response: {model_response}") + print_verbose(f"returning model_response: {model_response}") return model_response else: return @@ -7914,6 +8504,27 @@ class CustomStreamWrapper: original_exception=e, ) + def set_logging_event_loop(self, loop): + self.logging_loop = loop + + async def your_async_function(self): + # Your asynchronous code here + return "Your asynchronous code is running" + + def run_success_logging_in_thread(self, processed_chunk): + # Create an event loop for the new thread + ## ASYNC LOGGING + if self.logging_loop is not None: + future = asyncio.run_coroutine_threadsafe( + self.logging_obj.async_success_handler(processed_chunk), + loop=self.logging_loop, + ) + result = future.result() + else: + asyncio.run(self.logging_obj.async_success_handler(processed_chunk)) + ## SYNC LOGGING + self.logging_obj.success_handler(processed_chunk) + ## needs to handle the empty string case (even starting chunk can be an empty string) def __next__(self): try: @@ -7932,8 +8543,9 @@ class CustomStreamWrapper: continue ## LOGGING threading.Thread( - target=self.logging_obj.success_handler, args=(response,) + target=self.run_success_logging_in_thread, args=(response,) ).start() # log response + # RETURN RESULT return response except StopIteration: @@ -7989,13 +8601,34 @@ class CustomStreamWrapper: raise StopAsyncIteration else: # temporary patch for non-aiohttp async calls # example - boto3 bedrock llms - processed_chunk = next(self) - asyncio.create_task( - self.logging_obj.async_success_handler( - processed_chunk, - ) - ) - return processed_chunk + while True: + if isinstance(self.completion_stream, str) or isinstance( + self.completion_stream, bytes + ): + chunk = self.completion_stream + else: + chunk = next(self.completion_stream) + if chunk is not None and chunk != b"": + print_verbose(f"PROCESSED CHUNK PRE CHUNK CREATOR: {chunk}") + processed_chunk = self.chunk_creator(chunk=chunk) + print_verbose( + f"PROCESSED CHUNK POST CHUNK CREATOR: {processed_chunk}" + ) + if processed_chunk is None: + continue + ## LOGGING + threading.Thread( + target=self.logging_obj.success_handler, + args=(processed_chunk,), + ).start() # log processed_chunk + asyncio.create_task( + self.logging_obj.async_success_handler( + processed_chunk, + ) + ) + + # RETURN RESULT + return processed_chunk except StopAsyncIteration: raise except StopIteration: @@ -8498,3 +9131,13 @@ def print_args_passed_to_litellm(original_function, args, kwargs): except: # This should always be non blocking pass + + +def get_logging_id(start_time, response_obj): + try: + response_id = ( + "time-" + start_time.strftime("%H-%M-%S-%f") + "_" + response_obj.get("id") + ) + return response_id + except: + return None diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index b749fd9ed..5838935a2 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -62,6 +62,15 @@ "litellm_provider": "openai", "mode": "chat" }, + "gpt-4-0125-preview": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.00001, + "output_cost_per_token": 0.00003, + "litellm_provider": "openai", + "mode": "chat" + }, "gpt-4-vision-preview": { "max_tokens": 128000, "max_input_tokens": 128000, @@ -71,6 +80,15 @@ "litellm_provider": "openai", "mode": "chat" }, + "gpt-4-1106-vision-preview": { + "max_tokens": 128000, + "max_input_tokens": 128000, + "max_output_tokens": 4096, + "input_cost_per_token": 0.00001, + "output_cost_per_token": 0.00003, + "litellm_provider": "openai", + "mode": "chat" + }, "gpt-3.5-turbo": { "max_tokens": 4097, "max_input_tokens": 4097, @@ -107,6 +125,15 @@ "litellm_provider": "openai", "mode": "chat" }, + "gpt-3.5-turbo-0125": { + "max_tokens": 16385, + "max_input_tokens": 16385, + "max_output_tokens": 4096, + "input_cost_per_token": 0.0000005, + "output_cost_per_token": 0.0000015, + "litellm_provider": "openai", + "mode": "chat" + }, "gpt-3.5-turbo-16k": { "max_tokens": 16385, "max_input_tokens": 16385, @@ -134,6 +161,20 @@ "litellm_provider": "openai", "mode": "chat" }, + "text-embedding-3-large": { + "max_tokens": 8191, + "input_cost_per_token": 0.00000013, + "output_cost_per_token": 0.000000, + "litellm_provider": "openai", + "mode": "embedding" + }, + "text-embedding-3-small": { + "max_tokens": 8191, + "input_cost_per_token": 0.00000002, + "output_cost_per_token": 0.000000, + "litellm_provider": "openai", + "mode": "embedding" + }, "text-embedding-ada-002": { "max_tokens": 8191, "input_cost_per_token": 0.0000001, @@ -571,6 +612,51 @@ "litellm_provider": "vertex_ai-vision-models", "mode": "chat" }, + "textembedding-gecko": { + "max_tokens": 3072, + "max_input_tokens": 3072, + "output_vector_size": 768, + "input_cost_per_token": 0.00000000625, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-embedding-models", + "mode": "embedding" + }, + "textembedding-gecko-multilingual": { + "max_tokens": 3072, + "max_input_tokens": 3072, + "output_vector_size": 768, + "input_cost_per_token": 0.00000000625, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-embedding-models", + "mode": "embedding" + }, + "textembedding-gecko-multilingual@001": { + "max_tokens": 3072, + "max_input_tokens": 3072, + "output_vector_size": 768, + "input_cost_per_token": 0.00000000625, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-embedding-models", + "mode": "embedding" + }, + "textembedding-gecko@001": { + "max_tokens": 3072, + "max_input_tokens": 3072, + "output_vector_size": 768, + "input_cost_per_token": 0.00000000625, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-embedding-models", + "mode": "embedding" + }, + "textembedding-gecko@003": { + "max_tokens": 3072, + "max_input_tokens": 3072, + "output_vector_size": 768, + "input_cost_per_token": 0.00000000625, + "output_cost_per_token": 0, + "litellm_provider": "vertex_ai-embedding-models", + "mode": "embedding" + }, "palm/chat-bison": { "max_tokens": 4096, "input_cost_per_token": 0.000000125, @@ -897,6 +983,14 @@ "litellm_provider": "bedrock", "mode": "chat" }, + "amazon.titan-embed-text-v1": { + "max_tokens": 8192, + "output_vector_size": 1536, + "input_cost_per_token": 0.0000001, + "output_cost_per_token": 0.0, + "litellm_provider": "bedrock", + "mode": "embedding" + }, "anthropic.claude-v1": { "max_tokens": 100000, "max_output_tokens": 8191, @@ -1383,6 +1477,48 @@ "litellm_provider": "bedrock", "mode": "chat" }, + "512-x-512/50-steps/stability.stable-diffusion-xl-v0": { + "max_tokens": 77, + "max_input_tokens": 77, + "output_cost_per_image": 0.018, + "litellm_provider": "bedrock", + "mode": "image_generation" + }, + "512-x-512/max-steps/stability.stable-diffusion-xl-v0": { + "max_tokens": 77, + "max_input_tokens": 77, + "output_cost_per_image": 0.036, + "litellm_provider": "bedrock", + "mode": "image_generation" + }, + "max-x-max/50-steps/stability.stable-diffusion-xl-v0": { + "max_tokens": 77, + "max_input_tokens": 77, + "output_cost_per_image": 0.036, + "litellm_provider": "bedrock", + "mode": "image_generation" + }, + "max-x-max/max-steps/stability.stable-diffusion-xl-v0": { + "max_tokens": 77, + "max_input_tokens": 77, + "output_cost_per_image": 0.072, + "litellm_provider": "bedrock", + "mode": "image_generation" + }, + "1024-x-1024/50-steps/stability.stable-diffusion-xl-v1": { + "max_tokens": 77, + "max_input_tokens": 77, + "output_cost_per_image": 0.04, + "litellm_provider": "bedrock", + "mode": "image_generation" + }, + "1024-x-1024/max-steps/stability.stable-diffusion-xl-v1": { + "max_tokens": 77, + "max_input_tokens": 77, + "output_cost_per_image": 0.08, + "litellm_provider": "bedrock", + "mode": "image_generation" + }, "sagemaker/meta-textgeneration-llama-2-7b": { "max_tokens": 4096, "input_cost_per_token": 0.000, @@ -1635,29 +1771,38 @@ }, "perplexity/pplx-7b-chat": { "max_tokens": 8192, - "input_cost_per_token": 0.0000000, - "output_cost_per_token": 0.000000, + "input_cost_per_token": 0.00000007, + "output_cost_per_token": 0.00000028, + "litellm_provider": "perplexity", + "mode": "chat" + }, + "perplexity/pplx-34b-chat": { + "max_tokens": 8192, + "input_cost_per_token": 0.00000035, + "output_cost_per_token": 0.00000140, "litellm_provider": "perplexity", "mode": "chat" }, "perplexity/pplx-70b-chat": { "max_tokens": 4096, - "input_cost_per_token": 0.0000000, - "output_cost_per_token": 0.000000, + "input_cost_per_token": 0.00000070, + "output_cost_per_token": 0.00000280, "litellm_provider": "perplexity", "mode": "chat" }, "perplexity/pplx-7b-online": { "max_tokens": 4096, "input_cost_per_token": 0.0000000, - "output_cost_per_token": 0.0005, + "output_cost_per_token": 0.00000028, + "input_cost_per_request": 0.005, "litellm_provider": "perplexity", "mode": "chat" }, "perplexity/pplx-70b-online": { "max_tokens": 4096, "input_cost_per_token": 0.0000000, - "output_cost_per_token": 0.0005, + "output_cost_per_token": 0.00000280, + "input_cost_per_request": 0.005, "litellm_provider": "perplexity", "mode": "chat" }, diff --git a/poetry.lock b/poetry.lock index 496815f9a..44e21dd76 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "aiohttp" @@ -169,6 +169,34 @@ doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd- test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (<0.22)"] +[[package]] +name = "apscheduler" +version = "3.10.4" +description = "In-process task scheduler with Cron-like capabilities" +optional = true +python-versions = ">=3.6" +files = [ + {file = "APScheduler-3.10.4-py3-none-any.whl", hash = "sha256:fb91e8a768632a4756a585f79ec834e0e27aad5860bac7eaa523d9ccefd87661"}, + {file = "APScheduler-3.10.4.tar.gz", hash = "sha256:e6df071b27d9be898e486bc7940a7be50b4af2e9da7c08f0744a96d4bd4cef4a"}, +] + +[package.dependencies] +pytz = "*" +six = ">=1.4.0" +tzlocal = ">=2.0,<3.dev0 || >=4.dev0" + +[package.extras] +doc = ["sphinx", "sphinx-rtd-theme"] +gevent = ["gevent"] +mongodb = ["pymongo (>=3.0)"] +redis = ["redis (>=3.0)"] +rethinkdb = ["rethinkdb (>=2.4.0)"] +sqlalchemy = ["sqlalchemy (>=1.4)"] +testing = ["pytest", "pytest-asyncio", "pytest-cov", "pytest-tornado5"] +tornado = ["tornado (>=4.3)"] +twisted = ["twisted"] +zookeeper = ["kazoo"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -655,20 +683,20 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.40" +version = "3.1.41" description = "GitPython is a Python library used to interact with Git repositories" optional = true python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, - {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, + {file = "GitPython-3.1.41-py3-none-any.whl", hash = "sha256:c36b6634d069b3f719610175020a9aed919421c87552185b085e04fbbdb10b7c"}, + {file = "GitPython-3.1.41.tar.gz", hash = "sha256:ed66e624884f76df22c8e16066d567aaa5a37d5b5fa19db2c6df6f7156db9048"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" [package.extras] -test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "sumtypes"] [[package]] name = "gunicorn" @@ -748,13 +776,13 @@ socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" -version = "0.20.1" +version = "0.20.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.20.1-py3-none-any.whl", hash = "sha256:ecfdea395a8bc68cd160106c5bd857f7e010768d95f9e1862a779010cc304831"}, - {file = "huggingface_hub-0.20.1.tar.gz", hash = "sha256:8c88c4c3c8853e22f2dfb4d84c3d493f4e1af52fb3856a90e1eeddcf191ddbb1"}, + {file = "huggingface_hub-0.20.2-py3-none-any.whl", hash = "sha256:53752eda2239d30a470c307a61cf9adcf136bc77b0a734338c7d04941af560d8"}, + {file = "huggingface_hub-0.20.2.tar.gz", hash = "sha256:215c5fceff631030c7a3d19ba7b588921c908b3f21eef31d160ebc245b200ff6"}, ] [package.dependencies] @@ -791,13 +819,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.11.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, - {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] @@ -839,13 +867,13 @@ files = [ [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -856,13 +884,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsonschema" -version = "4.20.0" +version = "4.21.0" description = "An implementation of JSON Schema validation for Python" optional = true python-versions = ">=3.8" files = [ - {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, - {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, + {file = "jsonschema-4.21.0-py3-none-any.whl", hash = "sha256:70a09719d375c0a2874571b363c8a24be7df8071b80c9aa76bc4551e7297c63c"}, + {file = "jsonschema-4.21.0.tar.gz", hash = "sha256:3ba18e27f7491ea4a1b22edce00fb820eec968d397feb3f9cb61d5894bb38167"}, ] [package.dependencies] @@ -1130,13 +1158,13 @@ files = [ [[package]] name = "openai" -version = "1.6.1" +version = "1.10.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.6.1-py3-none-any.whl", hash = "sha256:bc9f774838d67ac29fb24cdeb2d58faf57de8b311085dcd1348f7aa02a96c7ee"}, - {file = "openai-1.6.1.tar.gz", hash = "sha256:d553ca9dbf9486b08e75b09e8671e4f638462aaadccfced632bf490fc3d75fa2"}, + {file = "openai-1.10.0-py3-none-any.whl", hash = "sha256:aa69e97d0223ace9835fbf9c997abe9ee95318f684fd2de6d02c870700c71ebc"}, + {file = "openai-1.10.0.tar.gz", hash = "sha256:208886cb501b930dc63f48d51db9c15e5380380f80516d07332adad67c9f1053"}, ] [package.dependencies] @@ -1301,70 +1329,88 @@ files = [ [[package]] name = "pillow" -version = "10.1.0" +version = "10.2.0" description = "Python Imaging Library (Fork)" optional = true python-versions = ">=3.8" files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, + {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, + {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, + {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, + {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, + {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, + {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, + {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, + {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, + {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, + {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, + {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, + {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, + {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, + {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, + {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, + {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, + {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, + {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, + {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, + {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, + {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, + {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, + {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, + {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, + {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, + {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, + {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, + {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, + {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, + {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, + {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, + {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, + {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, ] [package.extras] docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] +typing = ["typing-extensions"] +xmp = ["defusedxml"] [[package]] name = "pkgutil-resolve-name" @@ -1409,22 +1455,22 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "protobuf" -version = "4.25.1" +version = "4.25.2" description = "" optional = true python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.1-cp310-abi3-win32.whl", hash = "sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7"}, - {file = "protobuf-4.25.1-cp310-abi3-win_amd64.whl", hash = "sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b"}, - {file = "protobuf-4.25.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd"}, - {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb"}, - {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7"}, - {file = "protobuf-4.25.1-cp38-cp38-win32.whl", hash = "sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd"}, - {file = "protobuf-4.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0"}, - {file = "protobuf-4.25.1-cp39-cp39-win32.whl", hash = "sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510"}, - {file = "protobuf-4.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10"}, - {file = "protobuf-4.25.1-py3-none-any.whl", hash = "sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6"}, - {file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"}, + {file = "protobuf-4.25.2-cp310-abi3-win32.whl", hash = "sha256:b50c949608682b12efb0b2717f53256f03636af5f60ac0c1d900df6213910fd6"}, + {file = "protobuf-4.25.2-cp310-abi3-win_amd64.whl", hash = "sha256:8f62574857ee1de9f770baf04dde4165e30b15ad97ba03ceac65f760ff018ac9"}, + {file = "protobuf-4.25.2-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:2db9f8fa64fbdcdc93767d3cf81e0f2aef176284071507e3ede160811502fd3d"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:10894a2885b7175d3984f2be8d9850712c57d5e7587a2410720af8be56cdaf62"}, + {file = "protobuf-4.25.2-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:fc381d1dd0516343f1440019cedf08a7405f791cd49eef4ae1ea06520bc1c020"}, + {file = "protobuf-4.25.2-cp38-cp38-win32.whl", hash = "sha256:33a1aeef4b1927431d1be780e87b641e322b88d654203a9e9d93f218ee359e61"}, + {file = "protobuf-4.25.2-cp38-cp38-win_amd64.whl", hash = "sha256:47f3de503fe7c1245f6f03bea7e8d3ec11c6c4a2ea9ef910e3221c8a15516d62"}, + {file = "protobuf-4.25.2-cp39-cp39-win32.whl", hash = "sha256:5e5c933b4c30a988b52e0b7c02641760a5ba046edc5e43d3b94a74c9fc57c1b3"}, + {file = "protobuf-4.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:d66a769b8d687df9024f2985d5137a337f957a0916cf5464d1513eee96a63ff0"}, + {file = "protobuf-4.25.2-py3-none-any.whl", hash = "sha256:a8b7a98d4ce823303145bf3c1a8bdb0f2f4642a414b196f04ad9853ed0c8f830"}, + {file = "protobuf-4.25.2.tar.gz", hash = "sha256:fe599e175cb347efc8ee524bcd4b902d11f7262c0e569ececcb89995c15f0a5e"}, ] [[package]] @@ -1807,13 +1853,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "referencing" -version = "0.32.0" +version = "0.32.1" description = "JSON Referencing + Python" optional = true python-versions = ">=3.8" files = [ - {file = "referencing-0.32.0-py3-none-any.whl", hash = "sha256:bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99"}, - {file = "referencing-0.32.0.tar.gz", hash = "sha256:689e64fe121843dcfd57b71933318ef1f91188ffb45367332700a86ac8fd6161"}, + {file = "referencing-0.32.1-py3-none-any.whl", hash = "sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554"}, + {file = "referencing-0.32.1.tar.gz", hash = "sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3"}, ] [package.dependencies] @@ -1964,110 +2010,110 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.16.2" +version = "0.17.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = true python-versions = ">=3.8" files = [ - {file = "rpds_py-0.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f"}, - {file = "rpds_py-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44"}, - {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04"}, - {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7"}, - {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b"}, - {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9"}, - {file = "rpds_py-0.16.2-cp310-none-win32.whl", hash = "sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82"}, - {file = "rpds_py-0.16.2-cp310-none-win_amd64.whl", hash = "sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e"}, - {file = "rpds_py-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb"}, - {file = "rpds_py-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb"}, - {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e"}, - {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018"}, - {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b"}, - {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8"}, - {file = "rpds_py-0.16.2-cp311-none-win32.whl", hash = "sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3"}, - {file = "rpds_py-0.16.2-cp311-none-win_amd64.whl", hash = "sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d"}, - {file = "rpds_py-0.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d"}, - {file = "rpds_py-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73"}, - {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748"}, - {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b"}, - {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f"}, - {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58"}, - {file = "rpds_py-0.16.2-cp312-none-win32.whl", hash = "sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3"}, - {file = "rpds_py-0.16.2-cp312-none-win_amd64.whl", hash = "sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5"}, - {file = "rpds_py-0.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60"}, - {file = "rpds_py-0.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391"}, - {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b"}, - {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261"}, - {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc"}, - {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365"}, - {file = "rpds_py-0.16.2-cp38-none-win32.whl", hash = "sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff"}, - {file = "rpds_py-0.16.2-cp38-none-win_amd64.whl", hash = "sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851"}, - {file = "rpds_py-0.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e"}, - {file = "rpds_py-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b"}, - {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0"}, - {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773"}, - {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00"}, - {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45"}, - {file = "rpds_py-0.16.2-cp39-none-win32.whl", hash = "sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d"}, - {file = "rpds_py-0.16.2-cp39-none-win_amd64.whl", hash = "sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8"}, - {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d"}, - {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97"}, - {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac"}, - {file = "rpds_py-0.16.2.tar.gz", hash = "sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, + {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, + {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, + {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, + {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, + {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, + {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, + {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, + {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, + {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, + {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, + {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, ] [[package]] @@ -2138,13 +2184,13 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam [[package]] name = "streamlit" -version = "1.29.0" +version = "1.30.0" description = "A faster way to build and share data apps" optional = true python-versions = ">=3.8, !=3.9.7" files = [ - {file = "streamlit-1.29.0-py2.py3-none-any.whl", hash = "sha256:753510edb5bb831af0e3bdacd353c879ad5b4f0211e7efa0ec378809464868b4"}, - {file = "streamlit-1.29.0.tar.gz", hash = "sha256:b6dfff9c5e132e5518c92150efcd452980db492a45fafeac3d4688d2334efa07"}, + {file = "streamlit-1.30.0-py2.py3-none-any.whl", hash = "sha256:536494a4edfe9b66ed70c437176cfd6c7e36b1d99d0587b0be64245fa89c241b"}, + {file = "streamlit-1.30.0.tar.gz", hash = "sha256:90333915d9df8ce3b06de31b8a5bbab51e8cf0982dc6c32da9d6b1f2b4a9fa78"}, ] [package.dependencies] @@ -2153,7 +2199,7 @@ blinker = ">=1.0.0,<2" cachetools = ">=4.0,<6" click = ">=7.0,<9" gitpython = ">=3.0.7,<3.1.19 || >3.1.19,<4" -importlib-metadata = ">=1.4,<7" +importlib-metadata = ">=1.4,<8" numpy = ">=1.19.3,<2" packaging = ">=16.8,<24" pandas = ">=1.3.0,<3" @@ -2684,9 +2730,9 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [extras] extra-proxy = ["streamlit"] -proxy = ["backoff", "fastapi", "gunicorn", "orjson", "pyyaml", "rq", "uvicorn"] +proxy = ["apscheduler", "backoff", "fastapi", "gunicorn", "orjson", "pyyaml", "rq", "uvicorn"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<3.9.7 || >3.9.7" -content-hash = "f4d60cb3f552af0d2a4e4ef5c6f55696fd6e546b75ff7b4ec362c3549a63c92a" +content-hash = "19f79f119f1760d3406b446fa3664b82c0d0859b3912dcb7ba7c8edf1d786096" diff --git a/proxy_server_config.yaml b/proxy_server_config.yaml index abe999858..2c123d156 100644 --- a/proxy_server_config.yaml +++ b/proxy_server_config.yaml @@ -1,10 +1,20 @@ model_list: + - model_name: gpt-3.5-turbo + litellm_params: + model: azure/chatgpt-v-2 + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + api_key: os.environ/AZURE_API_KEY # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault - model_name: gpt-4 litellm_params: model: azure/chatgpt-v-2 api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ api_version: "2023-05-15" api_key: os.environ/AZURE_API_KEY # The `os.environ/` prefix tells litellm to read this from the env. See https://docs.litellm.ai/docs/simple_proxy#load-api-keys-from-vault + - model_name: sagemaker-completion-model + litellm_params: + model: sagemaker/berri-benchmarking-Llama-2-70b-chat-hf-4 + input_cost_per_second: 0.000420 - model_name: gpt-4 litellm_params: model: azure/gpt-turbo @@ -17,11 +27,26 @@ model_list: api_key: os.environ/AZURE_EUROPE_API_KEY api_base: https://my-endpoint-europe-berri-992.openai.azure.com rpm: 10 + - model_name: text-embedding-ada-002 + litellm_params: + model: azure/azure-embedding-model + api_key: os.environ/AZURE_API_KEY + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_version: "2023-05-15" + model_info: + mode: embedding + base_model: text-embedding-ada-002 + - model_name: dall-e-2 + litellm_params: + model: azure/ + api_version: 2023-06-01-preview + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_key: os.environ/AZURE_API_KEY litellm_settings: drop_params: True - set_verbose: True - + max_budget: 100 + budget_duration: 30d general_settings: master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234) # database_url: "postgresql://:@:/" # [OPTIONAL] use for token-based auth to proxy diff --git a/pyproject.toml b/pyproject.toml index f6a305ca2..9a511d4f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,9 +1,9 @@ [tool.poetry] name = "litellm" -version = "1.17.2" +version = "1.22.0" description = "Library to easily interface with LLM API providers" authors = ["BerriAI"] -license = "MIT License" +license = "MIT" readme = "README.md" [tool.poetry.dependencies] @@ -22,10 +22,14 @@ uvicorn = {version = "^0.22.0", optional = true} gunicorn = {version = "^21.2.0", optional = true} fastapi = {version = "^0.104.1", optional = true} backoff = {version = "*", optional = true} -pyyaml = {version = "^6.0", optional = true} +pyyaml = {version = "^6.0.1", optional = true} rq = {version = "*", optional = true} orjson = {version = "^3.9.7", optional = true} +apscheduler = {version = "^3.10.4", optional = true} streamlit = {version = "^1.29.0", optional = true} +fastapi-sso = { version = "^0.10.0", optional = true } +PyJWT = { version = "^2.8.0", optional = true } +python-multipart = { version = "^0.0.6", optional = true } [tool.poetry.extras] proxy = [ @@ -36,6 +40,10 @@ proxy = [ "pyyaml", "rq", "orjson", + "apscheduler", + "fastapi-sso", + "PyJWT", + "python-multipart" ] extra_proxy = [ @@ -61,7 +69,7 @@ requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "1.17.2" +version = "1.22.0" version_files = [ "pyproject.toml:^version" ] diff --git a/requirements.txt b/requirements.txt index 6ee965bdd..c9bd0e511 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ openai>=1.0.0 # openai req. fastapi # server dep pydantic>=2.5 # openai req. backoff==2.2.1 # server dep -pyyaml==6.0 # server dep +pyyaml>=6.0.1 # server dep uvicorn==0.22.0 # server dep gunicorn==21.2.0 # server dep boto3==1.28.58 # aws bedrock/sagemaker calls @@ -14,8 +14,12 @@ mangum==0.17.0 # for aws lambda functions google-generativeai==0.1.0 # for vertex ai calls async_generator==1.10.0 # for async ollama calls traceloop-sdk==0.5.3 # for open telemetry logging -langfuse>=2.0.0 # for langfuse self-hosted logging +langfuse>=2.6.3 # for langfuse self-hosted logging orjson==3.9.7 # fast /embedding responses +apscheduler==3.10.4 # for resetting budget in background +fastapi-sso==0.10.0 # admin UI, SSO +PyJWT==2.8.0 # admin UI, jwts +python-multipart==0.0.6 # admin UI ### LITELLM PACKAGE DEPENDENCIES python-dotenv>=0.2.0 # for env tiktoken>=0.4.0 # for calculating usage diff --git a/schema.prisma b/schema.prisma index d12cac8f2..2164358cc 100644 --- a/schema.prisma +++ b/schema.prisma @@ -7,27 +7,65 @@ generator client { provider = "prisma-client-py" } +// Track spend, rate limit, budget Users model LiteLLM_UserTable { user_id String @unique + team_id String? + user_role String? max_budget Float? spend Float @default(0.0) user_email String? + models String[] + max_parallel_requests Int? + tpm_limit BigInt? + rpm_limit BigInt? + budget_duration String? + budget_reset_at DateTime? + allowed_cache_controls String[] @default([]) } -// required for token gen +// Generate Tokens for Proxy model LiteLLM_VerificationToken { token String @unique + key_name String? + key_alias String? spend Float @default(0.0) expires DateTime? models String[] aliases Json @default("{}") config Json @default("{}") user_id String? + team_id String? max_parallel_requests Int? metadata Json @default("{}") + tpm_limit BigInt? + rpm_limit BigInt? + max_budget Float? + budget_duration String? + budget_reset_at DateTime? + allowed_cache_controls String[] @default([]) } +// store proxy config.yaml model LiteLLM_Config { param_name String @id param_value Json? +} + +// View spend, model, api_key per request +model LiteLLM_SpendLogs { + request_id String @unique + call_type String + api_key String @default ("") + spend Float @default(0.0) + total_tokens Int @default(0) + prompt_tokens Int @default(0) + completion_tokens Int @default(0) + startTime DateTime // Assuming start_time is a DateTime field + endTime DateTime // Assuming end_time is a DateTime field + model String @default("") + user String @default("") + metadata Json @default("{}") + cache_hit String @default("") + cache_key String @default("") } \ No newline at end of file diff --git a/tests/README.MD b/tests/README.MD new file mode 100644 index 000000000..6555b3728 --- /dev/null +++ b/tests/README.MD @@ -0,0 +1 @@ +Most tests are in `/litellm/tests`. These are just the tests for the proxy docker image, used for circle ci. diff --git a/tests/test_health.py b/tests/test_health.py new file mode 100644 index 000000000..00f095022 --- /dev/null +++ b/tests/test_health.py @@ -0,0 +1,116 @@ +# What this tests? +## Tests /health + /routes endpoints. + +import pytest +import asyncio +import aiohttp + + +async def health(session, call_key): + url = "http://0.0.0.0:4000/health" + headers = { + "Authorization": f"Bearer {call_key}", + "Content-Type": "application/json", + } + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + + print(f"Response (Status code: {status}):") + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + return await response.json() + + +async def generate_key(session): + url = "http://0.0.0.0:4000/key/generate" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": ["gpt-4", "text-embedding-ada-002", "dall-e-2"], + "duration": None, + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_health(): + """ + - Call /health + """ + async with aiohttp.ClientSession() as session: + # as admin # + all_healthy_models = await health(session=session, call_key="sk-1234") + total_model_count = ( + all_healthy_models["healthy_count"] + all_healthy_models["unhealthy_count"] + ) + assert total_model_count > 0 + + +@pytest.mark.asyncio +async def test_health_readiness(): + """ + Check if 200 + """ + async with aiohttp.ClientSession() as session: + url = "http://0.0.0.0:4000/health/readiness" + async with session.get(url) as response: + status = response.status + response_json = await response.json() + + print(response_json) + assert "litellm_version" in response_json + assert "status" in response_json + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_health_liveliness(): + """ + Check if 200 + """ + async with aiohttp.ClientSession() as session: + url = "http://0.0.0.0:4000/health/liveliness" + async with session.get(url) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_routes(): + """ + Check if 200 + """ + async with aiohttp.ClientSession() as session: + url = "http://0.0.0.0:4000/routes" + async with session.get(url) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") diff --git a/tests/test_keys.py b/tests/test_keys.py new file mode 100644 index 000000000..9cbcc25e1 --- /dev/null +++ b/tests/test_keys.py @@ -0,0 +1,442 @@ +# What this tests ? +## Tests /key endpoints. + +import pytest +import asyncio, time +import aiohttp +from openai import AsyncOpenAI +import sys, os + +sys.path.insert( + 0, os.path.abspath("../") +) # Adds the parent directory to the system path +import litellm + + +async def generate_key( + session, i, budget=None, budget_duration=None, models=["azure-models", "gpt-4"] +): + url = "http://0.0.0.0:4000/key/generate" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": models, + "aliases": {"mistral-7b": "gpt-3.5-turbo"}, + "duration": None, + "max_budget": budget, + "budget_duration": budget_duration, + } + + print(f"data: {data}") + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(f"Response {i} (Status code: {status}):") + print(response_text) + print() + + if status != 200: + raise Exception(f"Request {i} did not return a 200 status code: {status}") + + return await response.json() + + +@pytest.mark.asyncio +async def test_key_gen(): + async with aiohttp.ClientSession() as session: + tasks = [generate_key(session, i) for i in range(1, 11)] + await asyncio.gather(*tasks) + + +async def update_key(session, get_key): + """ + Make sure only models user has access to are returned + """ + url = "http://0.0.0.0:4000/key/update" + headers = { + "Authorization": f"Bearer sk-1234", + "Content-Type": "application/json", + } + data = {"key": get_key, "models": ["gpt-4"]} + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def update_proxy_budget(session): + """ + Make sure only models user has access to are returned + """ + url = "http://0.0.0.0:4000/user/update" + headers = { + "Authorization": f"Bearer sk-1234", + "Content-Type": "application/json", + } + data = {"user_id": "litellm-proxy-budget", "spend": 0} + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def chat_completion(session, key, model="gpt-4"): + url = "http://0.0.0.0:4000/chat/completions" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = { + "model": model, + "messages": [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "Hello!"}, + ], + } + + for i in range(3): + try: + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception( + f"Request did not return a 200 status code: {status}. Response: {response_text}" + ) + + return await response.json() + except Exception as e: + if "Request did not return a 200 status code" in str(e): + raise e + else: + pass + + +async def chat_completion_streaming(session, key, model="gpt-4"): + client = AsyncOpenAI(api_key=key, base_url="http://0.0.0.0:4000") + messages = [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": f"Hello! {time.time()}"}, + ] + prompt_tokens = litellm.token_counter(model="gpt-35-turbo", messages=messages) + data = { + "model": model, + "messages": messages, + "stream": True, + } + response = await client.chat.completions.create(**data) + + content = "" + async for chunk in response: + content += chunk.choices[0].delta.content or "" + + print(f"content: {content}") + + completion_tokens = litellm.token_counter( + model="gpt-35-turbo", text=content, count_response_tokens=True + ) + + return prompt_tokens, completion_tokens + + +@pytest.mark.asyncio +async def test_key_update(): + """ + Create key + Update key with new model + Test key w/ model + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session, i=0) + key = key_gen["key"] + await update_key( + session=session, + get_key=key, + ) + await update_proxy_budget(session=session) # resets proxy spend + await chat_completion(session=session, key=key) + + +async def delete_key(session, get_key): + """ + Delete key + """ + url = "http://0.0.0.0:4000/key/delete" + headers = { + "Authorization": f"Bearer sk-1234", + "Content-Type": "application/json", + } + data = {"keys": [get_key]} + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_key_delete(): + """ + Delete key + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session, i=0) + key = key_gen["key"] + await delete_key( + session=session, + get_key=key, + ) + + +async def get_key_info(session, call_key, get_key=None): + """ + Make sure only models user has access to are returned + """ + if get_key is None: + url = "http://0.0.0.0:4000/key/info" + else: + url = f"http://0.0.0.0:4000/key/info?key={get_key}" + headers = { + "Authorization": f"Bearer {call_key}", + "Content-Type": "application/json", + } + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + if call_key != get_key: + return status + else: + print(f"call_key: {call_key}; get_key: {get_key}") + raise Exception( + f"Request did not return a 200 status code: {status}. Responses {response_text}" + ) + return await response.json() + + +@pytest.mark.asyncio +async def test_key_info(): + """ + Get key info + - as admin -> 200 + - as key itself -> 200 + - as random key -> 403 + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session, i=0) + key = key_gen["key"] + # as admin # + await get_key_info(session=session, get_key=key, call_key="sk-1234") + # as key itself # + await get_key_info(session=session, get_key=key, call_key=key) + + # as key itself, use the auth param, and no query key needed + await get_key_info(session=session, call_key=key) + # as random key # + key_gen = await generate_key(session=session, i=0) + random_key = key_gen["key"] + status = await get_key_info(session=session, get_key=key, call_key=random_key) + assert status == 403 + + +async def get_spend_logs(session, request_id): + url = f"http://0.0.0.0:4000/spend/logs?request_id={request_id}" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_key_info_spend_values(): + """ + Test to ensure spend is correctly calculated + - create key + - make completion call + - assert cost is expected value + """ + async with aiohttp.ClientSession() as session: + ## Test Spend Update ## + # completion + key_gen = await generate_key(session=session, i=0) + key = key_gen["key"] + response = await chat_completion(session=session, key=key) + await asyncio.sleep(5) + spend_logs = await get_spend_logs(session=session, request_id=response["id"]) + print(f"spend_logs: {spend_logs}") + completion_tokens = spend_logs[0]["completion_tokens"] + prompt_tokens = spend_logs[0]["prompt_tokens"] + print(f"prompt_tokens: {prompt_tokens}; completion_tokens: {completion_tokens}") + + litellm.set_verbose = True + prompt_cost, completion_cost = litellm.cost_per_token( + model="gpt-35-turbo", + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + custom_llm_provider="azure", + ) + print("prompt_cost: ", prompt_cost, "completion_cost: ", completion_cost) + response_cost = prompt_cost + completion_cost + print(f"response_cost: {response_cost}") + await asyncio.sleep(5) # allow db log to be updated + key_info = await get_key_info(session=session, get_key=key, call_key=key) + print( + f"response_cost: {response_cost}; key_info spend: {key_info['info']['spend']}" + ) + rounded_response_cost = round(response_cost, 8) + rounded_key_info_spend = round(key_info["info"]["spend"], 8) + assert rounded_response_cost == rounded_key_info_spend + + +@pytest.mark.asyncio +async def test_key_info_spend_values_streaming(): + """ + Test to ensure spend is correctly calculated. + - create key + - make completion call + - assert cost is expected value + """ + async with aiohttp.ClientSession() as session: + ## streaming - azure + key_gen = await generate_key(session=session, i=0) + new_key = key_gen["key"] + prompt_tokens, completion_tokens = await chat_completion_streaming( + session=session, key=new_key + ) + print(f"prompt_tokens: {prompt_tokens}, completion_tokens: {completion_tokens}") + prompt_cost, completion_cost = litellm.cost_per_token( + model="azure/gpt-35-turbo", + prompt_tokens=prompt_tokens, + completion_tokens=completion_tokens, + ) + response_cost = prompt_cost + completion_cost + await asyncio.sleep(5) # allow db log to be updated + print(f"new_key: {new_key}") + key_info = await get_key_info( + session=session, get_key=new_key, call_key=new_key + ) + print( + f"response_cost: {response_cost}; key_info spend: {key_info['info']['spend']}" + ) + rounded_response_cost = round(response_cost, 8) + rounded_key_info_spend = round(key_info["info"]["spend"], 8) + assert rounded_response_cost == rounded_key_info_spend + + +@pytest.mark.asyncio +async def test_key_with_budgets(): + """ + - Create key with budget and 5s duration + - Get 'reset_at' value + - wait 5s + - Check if value updated + """ + from litellm.proxy.utils import hash_token + + async with aiohttp.ClientSession() as session: + key_gen = await generate_key( + session=session, i=0, budget=10, budget_duration="5s" + ) + key = key_gen["key"] + hashed_token = hash_token(token=key) + print(f"hashed_token: {hashed_token}") + key_info = await get_key_info(session=session, get_key=key, call_key=key) + reset_at_init_value = key_info["info"]["budget_reset_at"] + reset_at_new_value = None + i = 0 + while i < 3: + await asyncio.sleep(30) + key_info = await get_key_info(session=session, get_key=key, call_key=key) + reset_at_new_value = key_info["info"]["budget_reset_at"] + try: + assert reset_at_init_value != reset_at_new_value + break + except: + i + 1 + assert reset_at_init_value != reset_at_new_value + + +@pytest.mark.asyncio +async def test_key_crossing_budget(): + """ + - Create key with budget with budget=0.00000001 + - make a /chat/completions call + - wait 5s + - make a /chat/completions call - should fail with key crossed it's budget + + - Check if value updated + """ + from litellm.proxy.utils import hash_token + + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session, i=0, budget=0.0000001) + key = key_gen["key"] + hashed_token = hash_token(token=key) + print(f"hashed_token: {hashed_token}") + + response = await chat_completion(session=session, key=key) + print("response 1: ", response) + await asyncio.sleep(2) + try: + response = await chat_completion(session=session, key=key) + pytest.fail("Should have failed - Key crossed it's budget") + except Exception as e: + assert "ExceededTokenBudget: Current spend for token:" in str(e) + + +@pytest.mark.asyncio +async def test_key_zinfo_spend_values_sagemaker(): + """ + Tests the sync streaming loop to ensure spend is correctly calculated. + - create key + - make completion call + - assert cost is expected value + """ + async with aiohttp.ClientSession() as session: + ## streaming - sagemaker + key_gen = await generate_key(session=session, i=0, models=[]) + new_key = key_gen["key"] + prompt_tokens, completion_tokens = await chat_completion_streaming( + session=session, key=new_key, model="sagemaker-completion-model" + ) + await asyncio.sleep(5) # allow db log to be updated + key_info = await get_key_info( + session=session, get_key=new_key, call_key=new_key + ) + rounded_key_info_spend = round(key_info["info"]["spend"], 8) + assert rounded_key_info_spend > 0 + # assert rounded_response_cost == rounded_key_info_spend diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 000000000..b76dfb116 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,190 @@ +# What this tests ? +## Tests /models and /model/* endpoints + +import pytest +import asyncio +import aiohttp + + +async def generate_key(session, models=[]): + url = "http://0.0.0.0:4000/key/generate" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": models, + "duration": None, + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def get_models(session, key): + url = "http://0.0.0.0:4000/models" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_get_models(): + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await get_models(session=session, key=key) + + +async def add_models(session, model_id="123"): + url = "http://0.0.0.0:4000/model/new" + headers = { + "Authorization": f"Bearer sk-1234", + "Content-Type": "application/json", + } + + data = { + "model_name": "azure-gpt-3.5", + "litellm_params": { + "model": "azure/chatgpt-v-2", + "api_key": "os.environ/AZURE_API_KEY", + "api_base": "https://openai-gpt-4-test-v-1.openai.azure.com/", + "api_version": "2023-05-15", + }, + "model_info": {"id": model_id}, + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(f"Add models {response_text}") + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +async def get_model_info(session, key): + """ + Make sure only models user has access to are returned + """ + url = "http://0.0.0.0:4000/model/info" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def chat_completion(session, key): + url = "http://0.0.0.0:4000/chat/completions" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = { + "model": "azure-gpt-3.5", + "messages": [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "Hello!"}, + ], + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_add_models(): + """ + Add model + Call new model + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await add_models(session=session) + await chat_completion(session=session, key=key) + + +@pytest.mark.asyncio +async def test_get_models(): + """ + Get models user has access to + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session, models=["gpt-4"]) + key = key_gen["key"] + response = await get_model_info(session=session, key=key) + models = [m["model_name"] for m in response["data"]] + for m in models: + assert m == "gpt-4" + + +async def delete_model(session, model_id="123"): + """ + Make sure only models user has access to are returned + """ + url = "http://0.0.0.0:4000/model/delete" + headers = { + "Authorization": f"Bearer sk-1234", + "Content-Type": "application/json", + } + data = {"id": model_id} + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_delete_models(): + """ + Get models user has access to + """ + model_id = "12345" + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await add_models(session=session, model_id=model_id) + await chat_completion(session=session, key=key) + await delete_model(session=session, model_id=model_id) diff --git a/tests/test_openai_endpoints.py b/tests/test_openai_endpoints.py new file mode 100644 index 000000000..67d7c4db9 --- /dev/null +++ b/tests/test_openai_endpoints.py @@ -0,0 +1,202 @@ +# What this tests ? +## Tests /chat/completions by generating a key and then making a chat completions request +import pytest +import asyncio +import aiohttp + + +async def generate_key(session): + url = "http://0.0.0.0:4000/key/generate" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": ["gpt-4", "text-embedding-ada-002", "dall-e-2"], + "duration": None, + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def new_user(session): + url = "http://0.0.0.0:4000/user/new" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": ["gpt-4", "text-embedding-ada-002", "dall-e-2"], + "duration": None, + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def chat_completion(session, key): + url = "http://0.0.0.0:4000/chat/completions" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = { + "model": "gpt-4", + "messages": [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "Hello!"}, + ], + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_chat_completion(): + """ + - Create key + Make chat completion call + - Create user + make chat completion call + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await chat_completion(session=session, key=key) + key_gen = await new_user(session=session) + key_2 = key_gen["key"] + await chat_completion(session=session, key=key_2) + + +async def completion(session, key): + url = "http://0.0.0.0:4000/completions" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = {"model": "gpt-4", "prompt": "Hello!"} + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_completion(): + """ + - Create key + Make chat completion call + - Create user + make chat completion call + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await completion(session=session, key=key) + key_gen = await new_user(session=session) + key_2 = key_gen["key"] + await completion(session=session, key=key_2) + + +async def embeddings(session, key): + url = "http://0.0.0.0:4000/embeddings" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = { + "model": "text-embedding-ada-002", + "input": ["hello world"], + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_embeddings(): + """ + - Create key + Make embeddings call + - Create user + make embeddings call + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await embeddings(session=session, key=key) + key_gen = await new_user(session=session) + key_2 = key_gen["key"] + await embeddings(session=session, key=key_2) + + +async def image_generation(session, key): + url = "http://0.0.0.0:4000/images/generations" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = { + "model": "dall-e-2", + "prompt": "A cute baby sea otter", + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + +@pytest.mark.asyncio +async def test_image_generation(): + """ + - Create key + Make embeddings call + - Create user + make embeddings call + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + await image_generation(session=session, key=key) + key_gen = await new_user(session=session) + key_2 = key_gen["key"] + await image_generation(session=session, key=key_2) diff --git a/tests/test_spend_logs.py b/tests/test_spend_logs.py new file mode 100644 index 000000000..1907c4dae --- /dev/null +++ b/tests/test_spend_logs.py @@ -0,0 +1,84 @@ +# What this tests? +## Tests /spend endpoints. + +import pytest +import asyncio +import aiohttp + + +async def generate_key(session, models=[]): + url = "http://0.0.0.0:4000/key/generate" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": models, + "duration": None, + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +async def chat_completion(session, key): + url = "http://0.0.0.0:4000/chat/completions" + headers = { + "Authorization": f"Bearer {key}", + "Content-Type": "application/json", + } + data = { + "model": "gpt-3.5-turbo", + "messages": [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "Hello!"}, + ], + } + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + + return await response.json() + + +async def get_spend_logs(session, request_id): + url = f"http://0.0.0.0:4000/spend/logs?request_id={request_id}" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + + print(response_text) + print() + + if status != 200: + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_spend_logs(): + """ + - Create key + - Make call (makes sure it's in spend logs) + - Get request id from logs + """ + async with aiohttp.ClientSession() as session: + key_gen = await generate_key(session=session) + key = key_gen["key"] + response = await chat_completion(session=session, key=key) + await asyncio.sleep(5) + await get_spend_logs(session=session, request_id=response["id"]) diff --git a/tests/test_users.py b/tests/test_users.py new file mode 100644 index 000000000..898274467 --- /dev/null +++ b/tests/test_users.py @@ -0,0 +1,199 @@ +# What this tests ? +## Tests /user endpoints. +import pytest +import asyncio +import aiohttp +import time +from openai import AsyncOpenAI + + +async def new_user(session, i, user_id=None, budget=None, budget_duration=None): + url = "http://0.0.0.0:4000/user/new" + headers = {"Authorization": "Bearer sk-1234", "Content-Type": "application/json"} + data = { + "models": ["azure-models"], + "aliases": {"mistral-7b": "gpt-3.5-turbo"}, + "duration": None, + "max_budget": budget, + "budget_duration": budget_duration, + } + + if user_id is not None: + data["user_id"] = user_id + + async with session.post(url, headers=headers, json=data) as response: + status = response.status + response_text = await response.text() + + print(f"Response {i} (Status code: {status}):") + print(response_text) + print() + + if status != 200: + raise Exception(f"Request {i} did not return a 200 status code: {status}") + + return await response.json() + + +@pytest.mark.asyncio +async def test_user_new(): + """ + Make 20 parallel calls to /user/new. Assert all worked. + """ + async with aiohttp.ClientSession() as session: + tasks = [new_user(session, i) for i in range(1, 11)] + await asyncio.gather(*tasks) + + +async def get_user_info(session, get_user, call_user): + """ + Make sure only models user has access to are returned + """ + url = f"http://0.0.0.0:4000/user/info?user_id={get_user}" + headers = { + "Authorization": f"Bearer {call_user}", + "Content-Type": "application/json", + } + + async with session.get(url, headers=headers) as response: + status = response.status + response_text = await response.text() + print(response_text) + print() + + if status != 200: + if call_user != get_user: + return status + else: + print(f"call_user: {call_user}; get_user: {get_user}") + raise Exception(f"Request did not return a 200 status code: {status}") + return await response.json() + + +@pytest.mark.asyncio +async def test_user_info(): + """ + Get user info + - as admin + - as user themself + - as random + """ + get_user = f"krrish_{time.time()}@berri.ai" + async with aiohttp.ClientSession() as session: + key_gen = await new_user(session, 0, user_id=get_user) + key = key_gen["key"] + ## as admin ## + await get_user_info(session=session, get_user=get_user, call_user="sk-1234") + ## as user themself ## + await get_user_info(session=session, get_user=get_user, call_user=key) + # as random user # + key_gen = await new_user(session=session, i=0) + random_key = key_gen["key"] + status = await get_user_info( + session=session, get_user=get_user, call_user=random_key + ) + assert status == 403 + + +@pytest.mark.asyncio +async def test_user_update(): + """ + Create user + Update user access to new model + Make chat completion call + """ + pass + + +@pytest.mark.asyncio +async def test_users_budgets_reset(): + """ + - Create key with budget and 5s duration + - Get 'reset_at' value + - wait 5s + - Check if value updated + """ + get_user = f"krrish_{time.time()}@berri.ai" + async with aiohttp.ClientSession() as session: + key_gen = await new_user( + session, 0, user_id=get_user, budget=10, budget_duration="5s" + ) + key = key_gen["key"] + user_info = await get_user_info( + session=session, get_user=get_user, call_user=key + ) + reset_at_init_value = user_info["user_info"]["budget_reset_at"] + i = 0 + reset_at_new_value = None + while i < 3: + await asyncio.sleep(15) + user_info = await get_user_info( + session=session, get_user=get_user, call_user=key + ) + reset_at_new_value = user_info["user_info"]["budget_reset_at"] + try: + assert reset_at_init_value != reset_at_new_value + break + except: + i + 1 + assert reset_at_init_value != reset_at_new_value + + +async def chat_completion(session, key, model="gpt-4"): + client = AsyncOpenAI(api_key=key, base_url="http://0.0.0.0:4000") + messages = [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": f"Hello! {time.time()}"}, + ] + + data = { + "model": model, + "messages": messages, + } + response = await client.chat.completions.create(**data) + + +async def chat_completion_streaming(session, key, model="gpt-4"): + client = AsyncOpenAI(api_key=key, base_url="http://0.0.0.0:4000") + messages = [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": f"Hello! {time.time()}"}, + ] + + data = {"model": model, "messages": messages, "stream": True} + response = await client.chat.completions.create(**data) + async for chunk in response: + continue + + +@pytest.mark.asyncio +async def test_global_proxy_budget_update(): + """ + - Get proxy current spend + - Make chat completion call (normal) + - Assert spend increased + - Make chat completion call (streaming) + - Assert spend increased + """ + get_user = f"litellm-proxy-budget" + async with aiohttp.ClientSession() as session: + user_info = await get_user_info( + session=session, get_user=get_user, call_user="sk-1234" + ) + original_spend = user_info["user_info"]["spend"] + await chat_completion(session=session, key="sk-1234") + await asyncio.sleep(5) # let db update + user_info = await get_user_info( + session=session, get_user=get_user, call_user="sk-1234" + ) + new_spend = user_info["user_info"]["spend"] + print(f"new_spend: {new_spend}; original_spend: {original_spend}") + assert new_spend > original_spend + await chat_completion_streaming(session=session, key="sk-1234") + await asyncio.sleep(5) # let db update + user_info = await get_user_info( + session=session, get_user=get_user, call_user="sk-1234" + ) + new_new_spend = user_info["user_info"]["spend"] + print(f"new_spend: {new_spend}; original_spend: {original_spend}") + assert new_new_spend > new_spend diff --git a/ui/Dockerfile b/ui/Dockerfile index eac5a6c9e..28c9f195e 100644 --- a/ui/Dockerfile +++ b/ui/Dockerfile @@ -1,17 +1,20 @@ -# Use official Python base image -FROM python:3.9 +# Use an official Node.js image as the base image +FROM node:18-alpine -# Set the working directory in the container +# Set the working directory inside the container WORKDIR /app -# Copy the requirements.txt file to the container -COPY requirements.txt . +# Copy package.json and package-lock.json to the working directory +COPY ./litellm-dashboard/package*.json ./ -# Install Python dependencies -RUN pip install --no-cache-dir -r requirements.txt +# Install dependencies +RUN npm install -# Copy the entire project directory to the container -COPY . . +# Copy the rest of the application code to the working directory +COPY ./litellm-dashboard . -# Set the entrypoint command to run admin.py with Streamlit -ENTRYPOINT ["streamlit", "run", "admin.py"] \ No newline at end of file +# Expose the port that the Next.js app will run on +EXPOSE 3000 + +# Start the Next.js app +CMD ["npm", "run", "dev"] diff --git a/ui/admin.py b/ui/admin.py index 2d823d85d..96da791df 100644 --- a/ui/admin.py +++ b/ui/admin.py @@ -6,6 +6,9 @@ from dotenv import load_dotenv load_dotenv() import streamlit as st import base64, os, json, uuid, requests +import pandas as pd +import plotly.express as px +import click # Replace your_base_url with the actual URL where the proxy auth app is hosted your_base_url = os.getenv("BASE_URL") # Example base URL @@ -75,7 +78,7 @@ def add_new_model(): and st.session_state.get("proxy_key", None) is None ): st.warning( - "Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." + f"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page. Currently set Proxy Endpoint: {st.session_state.get('api_url', None)} and Proxy Key: {st.session_state.get('proxy_key', None)}" ) model_name = st.text_input( @@ -174,7 +177,119 @@ def list_models(): st.error(f"An error occurred while requesting models: {e}") else: st.warning( - "Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." + f"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page. Currently set Proxy Endpoint: {st.session_state.get('api_url', None)} and Proxy Key: {st.session_state.get('proxy_key', None)}" + ) + + +def spend_per_key(): + import streamlit as st + import requests + + # Check if the necessary configuration is available + if ( + st.session_state.get("api_url", None) is not None + and st.session_state.get("proxy_key", None) is not None + ): + # Make the GET request + try: + complete_url = "" + if isinstance(st.session_state["api_url"], str) and st.session_state[ + "api_url" + ].endswith("/"): + complete_url = f"{st.session_state['api_url']}/spend/keys" + else: + complete_url = f"{st.session_state['api_url']}/spend/keys" + response = requests.get( + complete_url, + headers={"Authorization": f"Bearer {st.session_state['proxy_key']}"}, + ) + # Check if the request was successful + if response.status_code == 200: + spend_per_key = response.json() + # Create DataFrame + spend_df = pd.DataFrame(spend_per_key) + + # Display the spend per key as a graph + st.header("Spend ($) per API Key:") + top_10_df = spend_df.nlargest(10, "spend") + fig = px.bar( + top_10_df, + x="token", + y="spend", + title="Top 10 Spend per Key", + height=550, # Adjust the height + width=1200, # Adjust the width) + hover_data=["token", "spend", "user_id", "team_id"], + ) + st.plotly_chart(fig) + + # Display the spend per key as a table + st.write("Spend per Key - Full Table:") + st.table(spend_df) + + else: + st.error(f"Failed to get models. Status code: {response.status_code}") + except Exception as e: + st.error(f"An error occurred while requesting models: {e}") + else: + st.warning( + f"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page. Currently set Proxy Endpoint: {st.session_state.get('api_url', None)} and Proxy Key: {st.session_state.get('proxy_key', None)}" + ) + + +def spend_per_user(): + import streamlit as st + import requests + + # Check if the necessary configuration is available + if ( + st.session_state.get("api_url", None) is not None + and st.session_state.get("proxy_key", None) is not None + ): + # Make the GET request + try: + complete_url = "" + if isinstance(st.session_state["api_url"], str) and st.session_state[ + "api_url" + ].endswith("/"): + complete_url = f"{st.session_state['api_url']}/spend/users" + else: + complete_url = f"{st.session_state['api_url']}/spend/users" + response = requests.get( + complete_url, + headers={"Authorization": f"Bearer {st.session_state['proxy_key']}"}, + ) + # Check if the request was successful + if response.status_code == 200: + spend_per_user = response.json() + # Create DataFrame + spend_df = pd.DataFrame(spend_per_user) + + # Display the spend per key as a graph + st.header("Spend ($) per User:") + top_10_df = spend_df.nlargest(10, "spend") + fig = px.bar( + top_10_df, + x="user_id", + y="spend", + title="Top 10 Spend per User", + height=550, # Adjust the height + width=1200, # Adjust the width) + hover_data=["user_id", "spend", "max_budget"], + ) + st.plotly_chart(fig) + + # Display the spend per key as a table + st.write("Spend per User - Full Table:") + st.table(spend_df) + + else: + st.error(f"Failed to get models. Status code: {response.status_code}") + except Exception as e: + st.error(f"An error occurred while requesting models: {e}") + else: + st.warning( + f"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page. Currently set Proxy Endpoint: {st.session_state.get('api_url', None)} and Proxy Key: {st.session_state.get('proxy_key', None)}" ) @@ -187,7 +302,7 @@ def create_key(): and st.session_state.get("proxy_key", None) is None ): st.warning( - "Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." + f"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page. Currently set Proxy Endpoint: {st.session_state.get('api_url', None)} and Proxy Key: {st.session_state.get('proxy_key', None)}" ) duration = st.text_input("Duration - Can be in (h,m,s)", placeholder="1h") @@ -235,7 +350,7 @@ def update_config(): and st.session_state.get("proxy_key", None) is None ): st.warning( - "Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." + f"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page. Currently set Proxy Endpoint: {st.session_state.get('api_url', None)} and Proxy Key: {st.session_state.get('proxy_key', None)}" ) st.markdown("#### Alerting") @@ -324,19 +439,25 @@ def update_config(): raise e -def admin_page(is_admin="NOT_GIVEN"): +def admin_page(is_admin="NOT_GIVEN", input_api_url=None, input_proxy_key=None): # Display the form for the admin to set the proxy URL and allowed email subdomain + st.set_page_config( + layout="wide", # Use "wide" layout for more space + ) st.header("Admin Configuration") st.session_state.setdefault("is_admin", is_admin) # Add a navigation sidebar st.sidebar.title("Navigation") + page = st.sidebar.radio( "Go to", ( "Connect to Proxy", + "View Spend Per Key", + "View Spend Per User", + "List Models", "Update Config", "Add Models", - "List Models", "Create Key", "End-User Auth", ), @@ -344,16 +465,23 @@ def admin_page(is_admin="NOT_GIVEN"): # Display different pages based on navigation selection if page == "Connect to Proxy": # Use text inputs with intermediary variables - input_api_url = st.text_input( - "Proxy Endpoint", - value=st.session_state.get("api_url", ""), - placeholder="http://0.0.0.0:8000", - ) - input_proxy_key = st.text_input( - "Proxy Key", - value=st.session_state.get("proxy_key", ""), - placeholder="sk-...", - ) + if input_api_url is None: + input_api_url = st.text_input( + "Proxy Endpoint", + value=st.session_state.get("api_url", ""), + placeholder="http://0.0.0.0:8000", + ) + else: + st.session_state["api_url"] = input_api_url + + if input_proxy_key is None: + input_proxy_key = st.text_input( + "Proxy Key", + value=st.session_state.get("proxy_key", ""), + placeholder="sk-...", + ) + else: + st.session_state["proxy_key"] = input_proxy_key # When the "Save" button is clicked, update the session state if st.button("Save"): st.session_state["api_url"] = input_api_url @@ -369,6 +497,21 @@ def admin_page(is_admin="NOT_GIVEN"): list_models() elif page == "Create Key": create_key() + elif page == "View Spend Per Key": + spend_per_key() + elif page == "View Spend Per User": + spend_per_user() -admin_page() +# admin_page() + + +@click.command() +@click.option("--proxy_endpoint", type=str, help="Proxy Endpoint") +@click.option("--proxy_master_key", type=str, help="Proxy Master Key") +def main(proxy_endpoint, proxy_master_key): + admin_page(input_api_url=proxy_endpoint, input_proxy_key=proxy_master_key) + + +if __name__ == "__main__": + main() diff --git a/ui/litellm-dashboard/.eslintrc.json b/ui/litellm-dashboard/.eslintrc.json new file mode 100644 index 000000000..bffb357a7 --- /dev/null +++ b/ui/litellm-dashboard/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/ui/litellm-dashboard/README.md b/ui/litellm-dashboard/README.md new file mode 100644 index 000000000..c4033664f --- /dev/null +++ b/ui/litellm-dashboard/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/ui/litellm-dashboard/next.config.mjs b/ui/litellm-dashboard/next.config.mjs new file mode 100644 index 000000000..b2de034ee --- /dev/null +++ b/ui/litellm-dashboard/next.config.mjs @@ -0,0 +1,7 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + output: 'export', + basePath: '/ui', +}; + +export default nextConfig; diff --git a/ui/litellm-dashboard/out/404.html b/ui/litellm-dashboard/out/404.html new file mode 100644 index 000000000..56852eeb1 --- /dev/null +++ b/ui/litellm-dashboard/out/404.html @@ -0,0 +1 @@ +404: This page could not be found.Create Next App

404

This page could not be found.

\ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_buildManifest.js b/ui/litellm-dashboard/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_buildManifest.js new file mode 100644 index 000000000..8afb954ad --- /dev/null +++ b/ui/litellm-dashboard/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_buildManifest.js @@ -0,0 +1 @@ +self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/_error":["static/chunks/pages/_error-9a890acb1e81c3fc.js"],sortedPages:["/_app","/_error"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_ssgManifest.js b/ui/litellm-dashboard/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_ssgManifest.js new file mode 100644 index 000000000..5b3ff592f --- /dev/null +++ b/ui/litellm-dashboard/out/_next/static/B4oAVsVV35eL3Y1bPepKW/_ssgManifest.js @@ -0,0 +1 @@ +self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/ui/litellm-dashboard/out/_next/static/chunks/448-cd38799829cf7b57.js b/ui/litellm-dashboard/out/_next/static/chunks/448-cd38799829cf7b57.js new file mode 100644 index 000000000..6d3d856d8 --- /dev/null +++ b/ui/litellm-dashboard/out/_next/static/chunks/448-cd38799829cf7b57.js @@ -0,0 +1,13 @@ +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[448],{2215:function(e,t,n){n.d(t,{iN:function(){return g},R_:function(){return d}});var r=n(1785),o=n(6991),a=[{index:7,opacity:.15},{index:6,opacity:.25},{index:5,opacity:.3},{index:5,opacity:.45},{index:5,opacity:.65},{index:5,opacity:.85},{index:4,opacity:.9},{index:3,opacity:.95},{index:2,opacity:.97},{index:1,opacity:.98}];function i(e){var t=e.r,n=e.g,o=e.b,a=(0,r.py)(t,n,o);return{h:360*a.h,s:a.s,v:a.v}}function c(e){var t=e.r,n=e.g,o=e.b;return"#".concat((0,r.vq)(t,n,o,!1))}function l(e,t,n){var r;return(r=Math.round(e.h)>=60&&240>=Math.round(e.h)?n?Math.round(e.h)-2*t:Math.round(e.h)+2*t:n?Math.round(e.h)+2*t:Math.round(e.h)-2*t)<0?r+=360:r>=360&&(r-=360),r}function s(e,t,n){var r;return 0===e.h&&0===e.s?e.s:((r=n?e.s-.16*t:4===t?e.s+.16:e.s+.05*t)>1&&(r=1),n&&5===t&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2)))}function u(e,t,n){var r;return(r=n?e.v+.05*t:e.v-.15*t)>1&&(r=1),Number(r.toFixed(2))}function d(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[],r=(0,o.uA)(e),d=5;d>0;d-=1){var f=i(r),p=c((0,o.uA)({h:l(f,d,!0),s:s(f,d,!0),v:u(f,d,!0)}));n.push(p)}n.push(c(r));for(var m=1;m<=4;m+=1){var g=i(r),h=c((0,o.uA)({h:l(g,m),s:s(g,m),v:u(g,m)}));n.push(h)}return"dark"===t.theme?a.map(function(e){var r,a,i,l=e.index,s=e.opacity;return c((r=(0,o.uA)(t.backgroundColor||"#141414"),a=(0,o.uA)(n[l]),i=100*s/100,{r:(a.r-r.r)*i+r.r,g:(a.g-r.g)*i+r.g,b:(a.b-r.b)*i+r.b}))}):n}var f={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1677FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},p={},m={};Object.keys(f).forEach(function(e){p[e]=d(f[e]),p[e].primary=p[e][5],m[e]=d(f[e],{theme:"dark",backgroundColor:"#141414"}),m[e].primary=m[e][5]}),p.red,p.volcano,p.gold,p.orange,p.yellow,p.lime,p.green,p.cyan;var g=p.blue;p.geekblue,p.purple,p.magenta,p.grey,p.grey},8985:function(e,t,n){n.d(t,{E4:function(){return ez},jG:function(){return R},ks:function(){return B},bf:function(){return L},CI:function(){return eF},fp:function(){return Y},xy:function(){return eT}});var r,o,a=n(833),i=n(406),c=n(3787),l=n(5239),s=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))*1540483477+((t>>>16)*59797<<16),t^=t>>>24,n=(65535&t)*1540483477+((t>>>16)*59797<<16)^(65535&n)*1540483477+((n>>>16)*59797<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n^=255&e.charCodeAt(r),n=(65535&n)*1540483477+((n>>>16)*59797<<16)}return n^=n>>>13,(((n=(65535&n)*1540483477+((n>>>16)*59797<<16))^n>>>15)>>>0).toString(36)},u=n(4050),d=n(4090),f=n.t(d,2);n(1475),n(2536);var p=n(7365),m=n(5127);function g(e){return e.join("%")}var h=function(){function e(t){(0,p.Z)(this,e),(0,a.Z)(this,"instanceId",void 0),(0,a.Z)(this,"cache",new Map),this.instanceId=t}return(0,m.Z)(e,[{key:"get",value:function(e){return this.opGet(g(e))}},{key:"opGet",value:function(e){return this.cache.get(e)||null}},{key:"update",value:function(e,t){return this.opUpdate(g(e),t)}},{key:"opUpdate",value:function(e,t){var n=t(this.cache.get(e));null===n?this.cache.delete(e):this.cache.set(e,n)}}]),e}(),v="data-token-hash",b="data-css-hash",y="__cssinjs_instance__",x=d.createContext({hashPriority:"low",cache:function(){var e=Math.random().toString(12).slice(2);if("undefined"!=typeof document&&document.head&&document.body){var t=document.body.querySelectorAll("style[".concat(b,"]"))||[],n=document.head.firstChild;Array.from(t).forEach(function(t){t[y]=t[y]||e,t[y]===e&&document.head.insertBefore(t,n)});var r={};Array.from(document.querySelectorAll("style[".concat(b,"]"))).forEach(function(t){var n,o=t.getAttribute(b);r[o]?t[y]===e&&(null===(n=t.parentNode)||void 0===n||n.removeChild(t)):r[o]=!0})}return new h(e)}(),defaultCache:!0}),w=n(6976),E=n(2127),C=function(){function e(){(0,p.Z)(this,e),(0,a.Z)(this,"cache",void 0),(0,a.Z)(this,"keys",void 0),(0,a.Z)(this,"cacheCallTimes",void 0),this.cache=new Map,this.keys=[],this.cacheCallTimes=0}return(0,m.Z)(e,[{key:"size",value:function(){return this.keys.length}},{key:"internalGet",value:function(e){var t,n,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o={map:this.cache};return e.forEach(function(e){if(o){var t;o=null===(t=o)||void 0===t||null===(t=t.map)||void 0===t?void 0:t.get(e)}else o=void 0}),null!==(t=o)&&void 0!==t&&t.value&&r&&(o.value[1]=this.cacheCallTimes++),null===(n=o)||void 0===n?void 0:n.value}},{key:"get",value:function(e){var t;return null===(t=this.internalGet(e,!0))||void 0===t?void 0:t[0]}},{key:"has",value:function(e){return!!this.internalGet(e)}},{key:"set",value:function(t,n){var r=this;if(!this.has(t)){if(this.size()+1>e.MAX_CACHE_SIZE+e.MAX_CACHE_OFFSET){var o=this.keys.reduce(function(e,t){var n=(0,i.Z)(e,2)[1];return r.internalGet(t)[1]0,"[Ant Design CSS-in-JS] Theme should have at least one derivative function."),O+=1}return(0,m.Z)(e,[{key:"getDerivativeToken",value:function(e){return this.derivatives.reduce(function(t,n){return n(e,t)},void 0)}}]),e}(),k=new C;function R(e){var t=Array.isArray(e)?e:[e];return k.has(t)||k.set(t,new Z(t)),k.get(t)}var M=new WeakMap,j={},P=new WeakMap;function N(e){var t=P.get(e)||"";return t||(Object.keys(e).forEach(function(n){var r=e[n];t+=n,r instanceof Z?t+=r.id:r&&"object"===(0,w.Z)(r)?t+=N(r):t+=r}),P.set(e,t)),t}function I(e,t){return s("".concat(t,"_").concat(N(e)))}var T="random-".concat(Date.now(),"-").concat(Math.random()).replace(/\./g,""),A="_bAmBoO_",F=void 0,z=(0,E.Z)();function L(e){return"number"==typeof e?"".concat(e,"px"):e}function _(e,t,n){var r,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(i)return e;var c=(0,l.Z)((0,l.Z)({},o),{},(r={},(0,a.Z)(r,v,t),(0,a.Z)(r,b,n),r)),s=Object.keys(c).map(function(e){var t=c[e];return t?"".concat(e,'="').concat(t,'"'):null}).filter(function(e){return e}).join(" ");return"")}var B=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"--".concat(t?"".concat(t,"-"):"").concat(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/([A-Z]+)([A-Z][a-z0-9]+)/g,"$1-$2").replace(/([a-z])([A-Z0-9])/g,"$1-$2").toLowerCase()},H=function(e,t,n){var r,o={},a={};return Object.entries(e).forEach(function(e){var t=(0,i.Z)(e,2),r=t[0],c=t[1];if(null!=n&&null!==(l=n.preserve)&&void 0!==l&&l[r])a[r]=c;else if(("string"==typeof c||"number"==typeof c)&&!(null!=n&&null!==(s=n.ignore)&&void 0!==s&&s[r])){var l,s,u,d=B(r,null==n?void 0:n.prefix);o[d]="number"!=typeof c||null!=n&&null!==(u=n.unitless)&&void 0!==u&&u[r]?String(c):"".concat(c,"px"),a[r]="var(".concat(d,")")}}),[a,(r={scope:null==n?void 0:n.scope},Object.keys(o).length?".".concat(t).concat(null!=r&&r.scope?".".concat(r.scope):"","{").concat(Object.entries(o).map(function(e){var t=(0,i.Z)(e,2),n=t[0],r=t[1];return"".concat(n,":").concat(r,";")}).join(""),"}"):"")]},D=n(4800),W=(0,l.Z)({},f).useInsertionEffect,V=W?function(e,t,n){return W(function(){return e(),t()},n)}:function(e,t,n){d.useMemo(e,n),(0,D.Z)(function(){return t(!0)},n)},q=void 0!==(0,l.Z)({},f).useInsertionEffect?function(e){var t=[],n=!1;return d.useEffect(function(){return n=!1,function(){n=!0,t.length&&t.forEach(function(e){return e()})}},e),function(e){n||t.push(e)}}:function(){return function(e){e()}};function X(e,t,n,r,o){var a=d.useContext(x).cache,l=g([e].concat((0,c.Z)(t))),s=q([l]),u=function(e){a.opUpdate(l,function(t){var r=(0,i.Z)(t||[void 0,void 0],2),o=r[0],a=[void 0===o?0:o,r[1]||n()];return e?e(a):a})};d.useMemo(function(){u()},[l]);var f=a.opGet(l)[1];return V(function(){null==o||o(f)},function(e){return u(function(t){var n=(0,i.Z)(t,2),r=n[0],a=n[1];return e&&0===r&&(null==o||o(f)),[r+1,a]}),function(){a.opUpdate(l,function(t){var n=(0,i.Z)(t||[],2),o=n[0],c=void 0===o?0:o,u=n[1];return 0==c-1?(s(function(){(e||!a.opGet(l))&&(null==r||r(u,!1))}),null):[c-1,u]})}},[l]),f}var G={},U=new Map,K=function(e,t,n,r){var o=n.getDerivativeToken(e),a=(0,l.Z)((0,l.Z)({},o),t);return r&&(a=r(a)),a},$="token";function Y(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=(0,d.useContext)(x),o=r.cache.instanceId,a=r.container,f=n.salt,p=void 0===f?"":f,m=n.override,g=void 0===m?G:m,h=n.formatToken,w=n.getComputedToken,E=n.cssVar,C=function(e,t){for(var n=M,r=0;r=(U.get(e)||0)}),n.length-r.length>0&&r.forEach(function(e){"undefined"!=typeof document&&document.querySelectorAll("style[".concat(v,'="').concat(e,'"]')).forEach(function(e){if(e[y]===o){var t;null===(t=e.parentNode)||void 0===t||t.removeChild(e)}}),U.delete(e)})},function(e){var t=(0,i.Z)(e,4),n=t[0],r=t[3];if(E&&r){var c=(0,u.hq)(r,s("css-variables-".concat(n._themeKey)),{mark:b,prepend:"queue",attachTo:a,priority:-999});c[y]=o,c.setAttribute(v,n._themeKey)}})}var Q=n(2110),J={animationIterationCount:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},ee="comm",et="rule",en="decl",er=Math.abs,eo=String.fromCharCode;function ea(e,t,n){return e.replace(t,n)}function ei(e,t){return 0|e.charCodeAt(t)}function ec(e,t,n){return e.slice(t,n)}function el(e){return e.length}function es(e,t){return t.push(e),e}function eu(e,t){for(var n="",r=0;r0?p[b]+" "+y:ea(y,/&\f/g,p[b])).trim())&&(l[v++]=x);return eb(e,t,n,0===o?et:c,l,s,u,d)}function eS(e,t,n,r,o){return eb(e,t,n,en,ec(e,0,r),ec(e,r+1,-1),r,o)}var eO="data-ant-cssinjs-cache-path",eZ="_FILE_STYLE__",ek=!0,eR="_multi_value_";function eM(e){var t,n,r;return eu((r=function e(t,n,r,o,a,i,c,l,s){for(var u,d,f,p=0,m=0,g=c,h=0,v=0,b=0,y=1,x=1,w=1,E=0,C="",S=a,O=i,Z=o,k=C;x;)switch(b=E,E=ey()){case 40:if(108!=b&&58==ei(k,g-1)){-1!=(d=k+=ea(eE(E),"&","&\f"),f=er(p?l[p-1]:0),d.indexOf("&\f",f))&&(w=-1);break}case 34:case 39:case 91:k+=eE(E);break;case 9:case 10:case 13:case 32:k+=function(e){for(;eh=ex();)if(eh<33)ey();else break;return ew(e)>2||ew(eh)>3?"":" "}(b);break;case 92:k+=function(e,t){for(var n;--t&&ey()&&!(eh<48)&&!(eh>102)&&(!(eh>57)||!(eh<65))&&(!(eh>70)||!(eh<97)););return n=eg+(t<6&&32==ex()&&32==ey()),ec(ev,e,n)}(eg-1,7);continue;case 47:switch(ex()){case 42:case 47:es(eb(u=function(e,t){for(;ey();)if(e+eh===57)break;else if(e+eh===84&&47===ex())break;return"/*"+ec(ev,t,eg-1)+"*"+eo(47===e?e:ey())}(ey(),eg),n,r,ee,eo(eh),ec(u,2,-2),0,s),s);break;default:k+="/"}break;case 123*y:l[p++]=el(k)*w;case 125*y:case 59:case 0:switch(E){case 0:case 125:x=0;case 59+m:-1==w&&(k=ea(k,/\f/g,"")),v>0&&el(k)-g&&es(v>32?eS(k+";",o,r,g-1,s):eS(ea(k," ","")+";",o,r,g-2,s),s);break;case 59:k+=";";default:if(es(Z=eC(k,n,r,p,m,a,l,C,S=[],O=[],g,i),i),123===E){if(0===m)e(k,n,Z,Z,S,i,g,l,O);else switch(99===h&&110===ei(k,3)?100:h){case 100:case 108:case 109:case 115:e(t,Z,Z,o&&es(eC(t,Z,Z,0,0,a,l,C,a,S=[],g,O),O),a,O,g,l,o?S:O);break;default:e(k,Z,Z,Z,[""],O,0,l,O)}}}p=m=v=0,y=w=1,C=k="",g=c;break;case 58:g=1+el(k),v=b;default:if(y<1){if(123==E)--y;else if(125==E&&0==y++&&125==(eh=eg>0?ei(ev,--eg):0,ep--,10===eh&&(ep=1,ef--),eh))continue}switch(k+=eo(E),E*y){case 38:w=m>0?1:(k+="\f",-1);break;case 44:l[p++]=(el(k)-1)*w,w=1;break;case 64:45===ex()&&(k+=eE(ey())),h=ex(),m=g=el(C=k+=function(e){for(;!ew(ex());)ey();return ec(ev,e,eg)}(eg)),E++;break;case 45:45===b&&2==el(k)&&(y=0)}}return i}("",null,null,null,[""],(n=t=e,ef=ep=1,em=el(ev=n),eg=0,t=[]),0,[0],t),ev="",r),ed).replace(/\{%%%\:[^;];}/g,";")}var ej=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{root:!0,parentSelectors:[]},o=r.root,a=r.injectHash,s=r.parentSelectors,d=n.hashId,f=n.layer,p=(n.path,n.hashPriority),m=n.transformers,g=void 0===m?[]:m;n.linters;var h="",v={};function b(t){var r=t.getName(d);if(!v[r]){var o=e(t.style,n,{root:!1,parentSelectors:s}),a=(0,i.Z)(o,1)[0];v[r]="@keyframes ".concat(t.getName(d)).concat(a)}}if((function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return t.forEach(function(t){Array.isArray(t)?e(t,n):t&&n.push(t)}),n})(Array.isArray(t)?t:[t]).forEach(function(t){var r="string"!=typeof t||o?t:{};if("string"==typeof r)h+="".concat(r,"\n");else if(r._keyframe)b(r);else{var u=g.reduce(function(e,t){var n;return(null==t||null===(n=t.visit)||void 0===n?void 0:n.call(t,e))||e},r);Object.keys(u).forEach(function(t){var r=u[t];if("object"!==(0,w.Z)(r)||!r||"animationName"===t&&r._keyframe||"object"===(0,w.Z)(r)&&r&&("_skip_check_"in r||eR in r)){function f(e,t){var n=e.replace(/[A-Z]/g,function(e){return"-".concat(e.toLowerCase())}),r=t;J[e]||"number"!=typeof r||0===r||(r="".concat(r,"px")),"animationName"===e&&null!=t&&t._keyframe&&(b(t),r=t.getName(d)),h+="".concat(n,":").concat(r,";")}var m,g=null!==(m=null==r?void 0:r.value)&&void 0!==m?m:r;"object"===(0,w.Z)(r)&&null!=r&&r[eR]&&Array.isArray(g)?g.forEach(function(e){f(t,e)}):f(t,g)}else{var y=!1,x=t.trim(),E=!1;(o||a)&&d?x.startsWith("@")?y=!0:x=function(e,t,n){if(!t)return e;var r=".".concat(t),o="low"===n?":where(".concat(r,")"):r;return e.split(",").map(function(e){var t,n=e.trim().split(/\s+/),r=n[0]||"",a=(null===(t=r.match(/^\w+/))||void 0===t?void 0:t[0])||"";return[r="".concat(a).concat(o).concat(r.slice(a.length))].concat((0,c.Z)(n.slice(1))).join(" ")}).join(",")}(t,d,p):o&&!d&&("&"===x||""===x)&&(x="",E=!0);var C=e(r,n,{root:E,injectHash:y,parentSelectors:[].concat((0,c.Z)(s),[x])}),S=(0,i.Z)(C,2),O=S[0],Z=S[1];v=(0,l.Z)((0,l.Z)({},v),Z),h+="".concat(x).concat(O)}})}}),o){if(f&&(void 0===F&&(F=function(e,t,n){if((0,E.Z)()){(0,u.hq)(e,T);var r,o,a=document.createElement("div");a.style.position="fixed",a.style.left="0",a.style.top="0",null==t||t(a),document.body.appendChild(a);var i=n?n(a):null===(r=getComputedStyle(a).content)||void 0===r?void 0:r.includes(A);return null===(o=a.parentNode)||void 0===o||o.removeChild(a),(0,u.jL)(T),i}return!1}("@layer ".concat(T," { .").concat(T,' { content: "').concat(A,'"!important; } }'),function(e){e.className=T})),F)){var y=f.split(","),x=y[y.length-1].trim();h="@layer ".concat(x," {").concat(h,"}"),y.length>1&&(h="@layer ".concat(f,"{%%%:%}").concat(h))}}else h="{".concat(h,"}");return[h,v]};function eP(e,t){return s("".concat(e.join("%")).concat(t))}function eN(){return null}var eI="style";function eT(e,t){var n=e.token,o=e.path,l=e.hashId,s=e.layer,f=e.nonce,p=e.clientOnly,m=e.order,g=void 0===m?0:m,h=d.useContext(x),w=h.autoClear,C=(h.mock,h.defaultCache),S=h.hashPriority,O=h.container,Z=h.ssrInline,k=h.transformers,R=h.linters,M=h.cache,j=n._tokenKey,P=[j].concat((0,c.Z)(o)),N=X(eI,P,function(){var e=P.join("|");if(!function(){if(!r&&(r={},(0,E.Z)())){var e,t=document.createElement("div");t.className=eO,t.style.position="fixed",t.style.visibility="hidden",t.style.top="-9999px",document.body.appendChild(t);var n=getComputedStyle(t).content||"";(n=n.replace(/^"/,"").replace(/"$/,"")).split(";").forEach(function(e){var t=e.split(":"),n=(0,i.Z)(t,2),o=n[0],a=n[1];r[o]=a});var o=document.querySelector("style[".concat(eO,"]"));o&&(ek=!1,null===(e=o.parentNode)||void 0===e||e.removeChild(o)),document.body.removeChild(t)}}(),r[e]){var n=function(e){var t=r[e],n=null;if(t&&(0,E.Z)()){if(ek)n=eZ;else{var o=document.querySelector("style[".concat(b,'="').concat(r[e],'"]'));o?n=o.innerHTML:delete r[e]}}return[n,t]}(e),a=(0,i.Z)(n,2),c=a[0],u=a[1];if(c)return[c,j,u,{},p,g]}var d=ej(t(),{hashId:l,hashPriority:S,layer:s,path:o.join("-"),transformers:k,linters:R}),f=(0,i.Z)(d,2),m=f[0],h=f[1],v=eM(m),y=eP(P,v);return[v,j,y,h,p,g]},function(e,t){var n=(0,i.Z)(e,3)[2];(t||w)&&z&&(0,u.jL)(n,{mark:b})},function(e){var t=(0,i.Z)(e,4),n=t[0],r=(t[1],t[2]),o=t[3];if(z&&n!==eZ){var a={mark:b,prepend:"queue",attachTo:O,priority:g},c="function"==typeof f?f():f;c&&(a.csp={nonce:c});var l=(0,u.hq)(n,r,a);l[y]=M.instanceId,l.setAttribute(v,j),Object.keys(o).forEach(function(e){(0,u.hq)(eM(o[e]),"_effect-".concat(e),a)})}}),I=(0,i.Z)(N,3),T=I[0],A=I[1],F=I[2];return function(e){var t,n;return t=Z&&!z&&C?d.createElement("style",(0,Q.Z)({},(n={},(0,a.Z)(n,v,A),(0,a.Z)(n,b,F),n),{dangerouslySetInnerHTML:{__html:T}})):d.createElement(eN,null),d.createElement(d.Fragment,null,t,e)}}var eA="cssVar",eF=function(e,t){var n=e.key,r=e.prefix,o=e.unitless,a=e.ignore,l=e.token,s=e.scope,f=void 0===s?"":s,p=(0,d.useContext)(x),m=p.cache.instanceId,g=p.container,h=l._tokenKey,w=[].concat((0,c.Z)(e.path),[n,f,h]);return X(eA,w,function(){var e=H(t(),n,{prefix:r,unitless:o,ignore:a,scope:f}),c=(0,i.Z)(e,2),l=c[0],s=c[1],u=eP(w,s);return[l,s,u,n]},function(e){var t=(0,i.Z)(e,3)[2];z&&(0,u.jL)(t,{mark:b})},function(e){var t=(0,i.Z)(e,3),r=t[1],o=t[2];if(r){var a=(0,u.hq)(r,o,{mark:b,prepend:"queue",attachTo:g,priority:-999});a[y]=m,a.setAttribute(v,n)}})};o={},(0,a.Z)(o,eI,function(e,t,n){var r=(0,i.Z)(e,6),o=r[0],a=r[1],c=r[2],l=r[3],s=r[4],u=r[5],d=(n||{}).plain;if(s)return null;var f=o,p={"data-rc-order":"prependQueue","data-rc-priority":"".concat(u)};return f=_(o,a,c,p,d),l&&Object.keys(l).forEach(function(e){if(!t[e]){t[e]=!0;var n=eM(l[e]);f+=_(n,a,"_effect-".concat(e),p,d)}}),[u,c,f]}),(0,a.Z)(o,$,function(e,t,n){var r=(0,i.Z)(e,5),o=r[2],a=r[3],c=r[4],l=(n||{}).plain;if(!a)return null;var s=o._tokenKey,u=_(a,c,s,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},l);return[-999,s,u]}),(0,a.Z)(o,eA,function(e,t,n){var r=(0,i.Z)(e,4),o=r[1],a=r[2],c=r[3],l=(n||{}).plain;if(!o)return null;var s=_(o,c,a,{"data-rc-order":"prependQueue","data-rc-priority":"".concat(-999)},l);return[-999,a,s]});var ez=function(){function e(t,n){(0,p.Z)(this,e),(0,a.Z)(this,"name",void 0),(0,a.Z)(this,"style",void 0),(0,a.Z)(this,"_keyframe",!0),this.name=t,this.style=n}return(0,m.Z)(e,[{key:"getName",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return e?"".concat(e,"-").concat(this.name):this.name}}]),e}();function eL(e){return e.notSplit=!0,e}eL(["borderTop","borderBottom"]),eL(["borderTop"]),eL(["borderBottom"]),eL(["borderLeft","borderRight"]),eL(["borderLeft"]),eL(["borderRight"])},688:function(e,t,n){n.d(t,{Z:function(){return R}});var r=n(2110),o=n(406),a=n(833),i=n(6787),c=n(4090),l=n(6480),s=n.n(l),u=n(2215),d=n(7689),f=n(5239),p=n(6976),m=n(4050),g=n(4687),h=n(3850);function v(e){return"object"===(0,p.Z)(e)&&"string"==typeof e.name&&"string"==typeof e.theme&&("object"===(0,p.Z)(e.icon)||"function"==typeof e.icon)}function b(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Object.keys(e).reduce(function(t,n){var r=e[n];return"class"===n?(t.className=r,delete t.class):(delete t[n],t[n.replace(/-(.)/g,function(e,t){return t.toUpperCase()})]=r),t},{})}function y(e){return(0,u.R_)(e)[0]}function x(e){return e?Array.isArray(e)?e:[e]:[]}var w=function(e){var t=(0,c.useContext)(d.Z),n=t.csp,r=t.prefixCls,o="\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";r&&(o=o.replace(/anticon/g,r)),(0,c.useEffect)(function(){var t=e.current,r=(0,g.A)(t);(0,m.hq)(o,"@ant-design-icons",{prepend:!0,csp:n,attachTo:r})},[])},E=["icon","className","onClick","style","primaryColor","secondaryColor"],C={primaryColor:"#333",secondaryColor:"#E6E6E6",calculated:!1},S=function(e){var t,n,r=e.icon,o=e.className,a=e.onClick,l=e.style,s=e.primaryColor,u=e.secondaryColor,d=(0,i.Z)(e,E),p=c.useRef(),m=C;if(s&&(m={primaryColor:s,secondaryColor:u||y(s)}),w(p),t=v(r),n="icon should be icon definiton, but got ".concat(r),(0,h.ZP)(t,"[@ant-design/icons] ".concat(n)),!v(r))return null;var g=r;return g&&"function"==typeof g.icon&&(g=(0,f.Z)((0,f.Z)({},g),{},{icon:g.icon(m.primaryColor,m.secondaryColor)})),function e(t,n,r){return r?c.createElement(t.tag,(0,f.Z)((0,f.Z)({key:n},b(t.attrs)),r),(t.children||[]).map(function(r,o){return e(r,"".concat(n,"-").concat(t.tag,"-").concat(o))})):c.createElement(t.tag,(0,f.Z)({key:n},b(t.attrs)),(t.children||[]).map(function(r,o){return e(r,"".concat(n,"-").concat(t.tag,"-").concat(o))}))}(g.icon,"svg-".concat(g.name),(0,f.Z)((0,f.Z)({className:o,onClick:a,style:l,"data-icon":g.name,width:"1em",height:"1em",fill:"currentColor","aria-hidden":"true"},d),{},{ref:p}))};function O(e){var t=x(e),n=(0,o.Z)(t,2),r=n[0],a=n[1];return S.setTwoToneColors({primaryColor:r,secondaryColor:a})}S.displayName="IconReact",S.getTwoToneColors=function(){return(0,f.Z)({},C)},S.setTwoToneColors=function(e){var t=e.primaryColor,n=e.secondaryColor;C.primaryColor=t,C.secondaryColor=n||y(t),C.calculated=!!n};var Z=["className","icon","spin","rotate","tabIndex","onClick","twoToneColor"];O(u.iN.primary);var k=c.forwardRef(function(e,t){var n,l=e.className,u=e.icon,f=e.spin,p=e.rotate,m=e.tabIndex,g=e.onClick,h=e.twoToneColor,v=(0,i.Z)(e,Z),b=c.useContext(d.Z),y=b.prefixCls,w=void 0===y?"anticon":y,E=b.rootClassName,C=s()(E,w,(n={},(0,a.Z)(n,"".concat(w,"-").concat(u.name),!!u.name),(0,a.Z)(n,"".concat(w,"-spin"),!!f||"loading"===u.name),n),l),O=m;void 0===O&&g&&(O=-1);var k=x(h),R=(0,o.Z)(k,2),M=R[0],j=R[1];return c.createElement("span",(0,r.Z)({role:"img","aria-label":u.name},v,{ref:t,tabIndex:O,onClick:g,className:C}),c.createElement(S,{icon:u,primaryColor:M,secondaryColor:j,style:p?{msTransform:"rotate(".concat(p,"deg)"),transform:"rotate(".concat(p,"deg)")}:void 0}))});k.displayName="AntdIcon",k.getTwoToneColor=function(){var e=S.getTwoToneColors();return e.calculated?[e.primaryColor,e.secondaryColor]:e.primaryColor},k.setTwoToneColor=O;var R=k},7689:function(e,t,n){var r=(0,n(4090).createContext)({});t.Z=r},9537:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z"}}]},name:"check-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},7136:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm127.98 274.82h-.04l-.08.06L512 466.75 384.14 338.88c-.04-.05-.06-.06-.08-.06a.12.12 0 00-.07 0c-.03 0-.05.01-.09.05l-45.02 45.02a.2.2 0 00-.05.09.12.12 0 000 .07v.02a.27.27 0 00.06.06L466.75 512 338.88 639.86c-.05.04-.06.06-.06.08a.12.12 0 000 .07c0 .03.01.05.05.09l45.02 45.02a.2.2 0 00.09.05.12.12 0 00.07 0c.02 0 .04-.01.08-.05L512 557.25l127.86 127.87c.04.04.06.05.08.05a.12.12 0 00.07 0c.03 0 .05-.01.09-.05l45.02-45.02a.2.2 0 00.05-.09.12.12 0 000-.07v-.02a.27.27 0 00-.05-.06L557.25 512l127.87-127.86c.04-.04.05-.06.05-.08a.12.12 0 000-.07c0-.03-.01-.05-.05-.09l-45.02-45.02a.2.2 0 00-.09-.05.12.12 0 00-.07 0z"}}]},name:"close-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},1183:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"}}]},name:"close",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},383:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"}}]},name:"down",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},653:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"exclamation-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},388:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z"}}]},name:"info-circle",theme:"filled"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},9334:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},6871:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2110),o=n(4090),a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z"}}]},name:"search",theme:"outlined"},i=n(688),c=o.forwardRef(function(e,t){return o.createElement(i.Z,(0,r.Z)({},e,{ref:t,icon:a}))})},1785:function(e,t,n){n.d(t,{T6:function(){return f},VD:function(){return p},WE:function(){return s},Yt:function(){return m},lC:function(){return a},py:function(){return l},rW:function(){return o},s:function(){return d},ve:function(){return c},vq:function(){return u}});var r=n(7974);function o(e,t,n){return{r:255*(0,r.sh)(e,255),g:255*(0,r.sh)(t,255),b:255*(0,r.sh)(n,255)}}function a(e,t,n){var o=Math.max(e=(0,r.sh)(e,255),t=(0,r.sh)(t,255),n=(0,r.sh)(n,255)),a=Math.min(e,t,n),i=0,c=0,l=(o+a)/2;if(o===a)c=0,i=0;else{var s=o-a;switch(c=l>.5?s/(2-o-a):s/(o+a),o){case e:i=(t-n)/s+(t1&&(n-=1),n<1/6)?e+6*n*(t-e):n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function c(e,t,n){if(e=(0,r.sh)(e,360),t=(0,r.sh)(t,100),n=(0,r.sh)(n,100),0===t)a=n,c=n,o=n;else{var o,a,c,l=n<.5?n*(1+t):n+t-n*t,s=2*n-l;o=i(s,l,e+1/3),a=i(s,l,e),c=i(s,l,e-1/3)}return{r:255*o,g:255*a,b:255*c}}function l(e,t,n){var o=Math.max(e=(0,r.sh)(e,255),t=(0,r.sh)(t,255),n=(0,r.sh)(n,255)),a=Math.min(e,t,n),i=0,c=o-a;if(o===a)i=0;else{switch(o){case e:i=(t-n)/c+(t>16,g:(65280&e)>>8,b:255&e}}},6564:function(e,t,n){n.d(t,{R:function(){return r}});var r={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}},6991:function(e,t,n){n.d(t,{uA:function(){return i}});var r=n(1785),o=n(6564),a=n(7974);function i(e){var t={r:0,g:0,b:0},n=1,i=null,c=null,l=null,s=!1,f=!1;return"string"==typeof e&&(e=function(e){if(0===(e=e.trim().toLowerCase()).length)return!1;var t=!1;if(o.R[e])e=o.R[e],t=!0;else if("transparent"===e)return{r:0,g:0,b:0,a:0,format:"name"};var n=u.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=u.rgba.exec(e))?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=u.hsl.exec(e))?{h:n[1],s:n[2],l:n[3]}:(n=u.hsla.exec(e))?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=u.hsv.exec(e))?{h:n[1],s:n[2],v:n[3]}:(n=u.hsva.exec(e))?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=u.hex8.exec(e))?{r:(0,r.VD)(n[1]),g:(0,r.VD)(n[2]),b:(0,r.VD)(n[3]),a:(0,r.T6)(n[4]),format:t?"name":"hex8"}:(n=u.hex6.exec(e))?{r:(0,r.VD)(n[1]),g:(0,r.VD)(n[2]),b:(0,r.VD)(n[3]),format:t?"name":"hex"}:(n=u.hex4.exec(e))?{r:(0,r.VD)(n[1]+n[1]),g:(0,r.VD)(n[2]+n[2]),b:(0,r.VD)(n[3]+n[3]),a:(0,r.T6)(n[4]+n[4]),format:t?"name":"hex8"}:!!(n=u.hex3.exec(e))&&{r:(0,r.VD)(n[1]+n[1]),g:(0,r.VD)(n[2]+n[2]),b:(0,r.VD)(n[3]+n[3]),format:t?"name":"hex"}}(e)),"object"==typeof e&&(d(e.r)&&d(e.g)&&d(e.b)?(t=(0,r.rW)(e.r,e.g,e.b),s=!0,f="%"===String(e.r).substr(-1)?"prgb":"rgb"):d(e.h)&&d(e.s)&&d(e.v)?(i=(0,a.JX)(e.s),c=(0,a.JX)(e.v),t=(0,r.WE)(e.h,i,c),s=!0,f="hsv"):d(e.h)&&d(e.s)&&d(e.l)&&(i=(0,a.JX)(e.s),l=(0,a.JX)(e.l),t=(0,r.ve)(e.h,i,l),s=!0,f="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=(0,a.Yq)(n),{ok:s,format:e.format||f,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}var c="(?:".concat("[-\\+]?\\d*\\.\\d+%?",")|(?:").concat("[-\\+]?\\d+%?",")"),l="[\\s|\\(]+(".concat(c,")[,|\\s]+(").concat(c,")[,|\\s]+(").concat(c,")\\s*\\)?"),s="[\\s|\\(]+(".concat(c,")[,|\\s]+(").concat(c,")[,|\\s]+(").concat(c,")[,|\\s]+(").concat(c,")\\s*\\)?"),u={CSS_UNIT:new RegExp(c),rgb:RegExp("rgb"+l),rgba:RegExp("rgba"+s),hsl:RegExp("hsl"+l),hsla:RegExp("hsla"+s),hsv:RegExp("hsv"+l),hsva:RegExp("hsva"+s),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function d(e){return!!u.CSS_UNIT.exec(String(e))}},6336:function(e,t,n){n.d(t,{C:function(){return c}});var r=n(1785),o=n(6564),a=n(6991),i=n(7974),c=function(){function e(t,n){if(void 0===t&&(t=""),void 0===n&&(n={}),t instanceof e)return t;"number"==typeof t&&(t=(0,r.Yt)(t)),this.originalInput=t;var o,i=(0,a.uA)(t);this.originalInput=t,this.r=i.r,this.g=i.g,this.b=i.b,this.a=i.a,this.roundA=Math.round(100*this.a)/100,this.format=null!==(o=n.format)&&void 0!==o?o:i.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=i.ok}return e.prototype.isDark=function(){return 128>this.getBrightness()},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var e=this.toRgb();return(299*e.r+587*e.g+114*e.b)/1e3},e.prototype.getLuminance=function(){var e=this.toRgb(),t=e.r/255,n=e.g/255,r=e.b/255;return .2126*(t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.7152*(n<=.03928?n/12.92:Math.pow((n+.055)/1.055,2.4))+.0722*(r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(e){return this.a=(0,i.Yq)(e),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){return 0===this.toHsl().s},e.prototype.toHsv=function(){var e=(0,r.py)(this.r,this.g,this.b);return{h:360*e.h,s:e.s,v:e.v,a:this.a}},e.prototype.toHsvString=function(){var e=(0,r.py)(this.r,this.g,this.b),t=Math.round(360*e.h),n=Math.round(100*e.s),o=Math.round(100*e.v);return 1===this.a?"hsv(".concat(t,", ").concat(n,"%, ").concat(o,"%)"):"hsva(".concat(t,", ").concat(n,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var e=(0,r.lC)(this.r,this.g,this.b);return{h:360*e.h,s:e.s,l:e.l,a:this.a}},e.prototype.toHslString=function(){var e=(0,r.lC)(this.r,this.g,this.b),t=Math.round(360*e.h),n=Math.round(100*e.s),o=Math.round(100*e.l);return 1===this.a?"hsl(".concat(t,", ").concat(n,"%, ").concat(o,"%)"):"hsla(".concat(t,", ").concat(n,"%, ").concat(o,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(e){return void 0===e&&(e=!1),(0,r.vq)(this.r,this.g,this.b,e)},e.prototype.toHexString=function(e){return void 0===e&&(e=!1),"#"+this.toHex(e)},e.prototype.toHex8=function(e){return void 0===e&&(e=!1),(0,r.s)(this.r,this.g,this.b,this.a,e)},e.prototype.toHex8String=function(e){return void 0===e&&(e=!1),"#"+this.toHex8(e)},e.prototype.toHexShortString=function(e){return void 0===e&&(e=!1),1===this.a?this.toHexString(e):this.toHex8String(e)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var e=Math.round(this.r),t=Math.round(this.g),n=Math.round(this.b);return 1===this.a?"rgb(".concat(e,", ").concat(t,", ").concat(n,")"):"rgba(".concat(e,", ").concat(t,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var e=function(e){return"".concat(Math.round(100*(0,i.sh)(e,255)),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var e=function(e){return Math.round(100*(0,i.sh)(e,255))};return 1===this.a?"rgb(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%)"):"rgba(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(0===this.a)return"transparent";if(this.a<1)return!1;for(var e="#"+(0,r.vq)(this.r,this.g,this.b,!1),t=0,n=Object.entries(o.R);t=0;return!t&&r&&(e.startsWith("hex")||"name"===e)?"name"===e&&0===this.a?this.toName():this.toRgbString():("rgb"===e&&(n=this.toRgbString()),"prgb"===e&&(n=this.toPercentageRgbString()),("hex"===e||"hex6"===e)&&(n=this.toHexString()),"hex3"===e&&(n=this.toHexString(!0)),"hex4"===e&&(n=this.toHex8String(!0)),"hex8"===e&&(n=this.toHex8String()),"name"===e&&(n=this.toName()),"hsl"===e&&(n=this.toHslString()),"hsv"===e&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.l+=t/100,n.l=(0,i.V2)(n.l),new e(n)},e.prototype.brighten=function(t){void 0===t&&(t=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(-(t/100*255)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(-(t/100*255)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(-(t/100*255)))),new e(n)},e.prototype.darken=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.l-=t/100,n.l=(0,i.V2)(n.l),new e(n)},e.prototype.tint=function(e){return void 0===e&&(e=10),this.mix("white",e)},e.prototype.shade=function(e){return void 0===e&&(e=10),this.mix("black",e)},e.prototype.desaturate=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.s-=t/100,n.s=(0,i.V2)(n.s),new e(n)},e.prototype.saturate=function(t){void 0===t&&(t=10);var n=this.toHsl();return n.s+=t/100,n.s=(0,i.V2)(n.s),new e(n)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var n=this.toHsl(),r=(n.h+t)%360;return n.h=r<0?360+r:r,new e(n)},e.prototype.mix=function(t,n){void 0===n&&(n=50);var r=this.toRgb(),o=new e(t).toRgb(),a=n/100;return new e({r:(o.r-r.r)*a+r.r,g:(o.g-r.g)*a+r.g,b:(o.b-r.b)*a+r.b,a:(o.a-r.a)*a+r.a})},e.prototype.analogous=function(t,n){void 0===t&&(t=6),void 0===n&&(n=30);var r=this.toHsl(),o=360/n,a=[this];for(r.h=(r.h-(o*t>>1)+720)%360;--t;)r.h=(r.h+o)%360,a.push(new e(r));return a},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){void 0===t&&(t=6);for(var n=this.toHsv(),r=n.h,o=n.s,a=n.v,i=[],c=1/t;t--;)i.push(new e({h:r,s:o,v:a})),a=(a+c)%1;return i},e.prototype.splitcomplement=function(){var t=this.toHsl(),n=t.h;return[this,new e({h:(n+72)%360,s:t.s,l:t.l}),new e({h:(n+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var n=this.toRgb(),r=new e(t).toRgb(),o=n.a+r.a*(1-n.a);return new e({r:(n.r*n.a+r.r*r.a*(1-n.a))/o,g:(n.g*n.a+r.g*r.a*(1-n.a))/o,b:(n.b*n.a+r.b*r.a*(1-n.a))/o,a:o})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var n=this.toHsl(),r=n.h,o=[this],a=360/t,i=1;iMath.abs(e-t))?1:e=360===t?(e<0?e%t+t:e%t)/parseFloat(String(t)):e%t/parseFloat(String(t))}function o(e){return Math.min(1,Math.max(0,e))}function a(e){return(isNaN(e=parseFloat(e))||e<0||e>1)&&(e=1),e}function i(e){return e<=1?"".concat(100*Number(e),"%"):e}function c(e){return 1===e.length?"0"+e:String(e)}n.d(t,{FZ:function(){return c},JX:function(){return i},V2:function(){return o},Yq:function(){return a},sh:function(){return r}})},8804:function(e,t,n){n.d(t,{Z:function(){return y}});var r,o=n(406),a=n(4090),i=n(9542),c=n(2127);n(3850);var l=n(4084),s=a.createContext(null),u=n(3787),d=n(4800),f=[],p=n(4050);function m(e){var t=e.match(/^(.*)px$/),n=Number(null==t?void 0:t[1]);return Number.isNaN(n)?function(e){if("undefined"==typeof document)return 0;if(void 0===r){var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var n=document.createElement("div"),o=n.style;o.position="absolute",o.top="0",o.left="0",o.pointerEvents="none",o.visibility="hidden",o.width="200px",o.height="150px",o.overflow="hidden",n.appendChild(t),document.body.appendChild(n);var a=t.offsetWidth;n.style.overflow="scroll";var i=t.offsetWidth;a===i&&(i=n.clientWidth),document.body.removeChild(n),r=a-i}return r}():n}var g="rc-util-locker-".concat(Date.now()),h=0,v=!1,b=function(e){return!1!==e&&((0,c.Z)()&&e?"string"==typeof e?document.querySelector(e):"function"==typeof e?e():e:null)},y=a.forwardRef(function(e,t){var n,r,y,x,w=e.open,E=e.autoLock,C=e.getContainer,S=(e.debug,e.autoDestroy),O=void 0===S||S,Z=e.children,k=a.useState(w),R=(0,o.Z)(k,2),M=R[0],j=R[1],P=M||w;a.useEffect(function(){(O||w)&&j(w)},[w,O]);var N=a.useState(function(){return b(C)}),I=(0,o.Z)(N,2),T=I[0],A=I[1];a.useEffect(function(){var e=b(C);A(null!=e?e:null)});var F=function(e,t){var n=a.useState(function(){return(0,c.Z)()?document.createElement("div"):null}),r=(0,o.Z)(n,1)[0],i=a.useRef(!1),l=a.useContext(s),p=a.useState(f),m=(0,o.Z)(p,2),g=m[0],h=m[1],v=l||(i.current?void 0:function(e){h(function(t){return[e].concat((0,u.Z)(t))})});function b(){r.parentElement||document.body.appendChild(r),i.current=!0}function y(){var e;null===(e=r.parentElement)||void 0===e||e.removeChild(r),i.current=!1}return(0,d.Z)(function(){return e?l?l(b):b():y(),y},[e]),(0,d.Z)(function(){g.length&&(g.forEach(function(e){return e()}),h(f))},[g]),[r,v]}(P&&!T,0),z=(0,o.Z)(F,2),L=z[0],_=z[1],B=null!=T?T:L;n=!!(E&&w&&(0,c.Z)()&&(B===L||B===document.body)),r=a.useState(function(){return h+=1,"".concat(g,"_").concat(h)}),y=(0,o.Z)(r,1)[0],(0,d.Z)(function(){if(n){var e=function(e){if("undefined"==typeof document||!e||!(e instanceof Element))return{width:0,height:0};var t=getComputedStyle(e,"::-webkit-scrollbar"),n=t.width,r=t.height;return{width:m(n),height:m(r)}}(document.body).width,t=document.body.scrollHeight>(window.innerHeight||document.documentElement.clientHeight)&&window.innerWidth>document.body.offsetWidth;(0,p.hq)("\nhtml body {\n overflow-y: hidden;\n ".concat(t?"width: calc(100% - ".concat(e,"px);"):"","\n}"),y)}else(0,p.jL)(y);return function(){(0,p.jL)(y)}},[n,y]);var H=null;Z&&(0,l.Yr)(Z)&&t&&(H=Z.ref);var D=(0,l.x1)(H,t);if(!P||!(0,c.Z)()||void 0===T)return null;var W=!1===B||("boolean"==typeof x&&(v=x),v),V=Z;return t&&(V=a.cloneElement(Z,{ref:D})),a.createElement(s.Provider,{value:_},W?V:(0,i.createPortal)(V,B))})},1737:function(e,t,n){n.d(t,{Z:function(){return D}});var r=n(5239),o=n(406),a=n(6787),i=n(8804),c=n(6480),l=n.n(c),s=n(6505),u=n(7472),d=n(4687),f=n(4811),p=n(1010),m=n(4800),g=n(6158),h=n(4090),v=n(2110),b=n(9367),y=n(4084);function x(e){var t=e.prefixCls,n=e.align,r=e.arrow,o=e.arrowPos,a=r||{},i=a.className,c=a.content,s=o.x,u=o.y,d=h.useRef();if(!n||!n.points)return null;var f={position:"absolute"};if(!1!==n.autoArrow){var p=n.points[0],m=n.points[1],g=p[0],v=p[1],b=m[0],y=m[1];g!==b&&["t","b"].includes(g)?"t"===g?f.top=0:f.bottom=0:f.top=void 0===u?0:u,v!==y&&["l","r"].includes(v)?"l"===v?f.left=0:f.right=0:f.left=void 0===s?0:s}return h.createElement("div",{ref:d,className:l()("".concat(t,"-arrow"),i),style:f},c)}function w(e){var t=e.prefixCls,n=e.open,r=e.zIndex,o=e.mask,a=e.motion;return o?h.createElement(b.ZP,(0,v.Z)({},a,{motionAppear:!0,visible:n,removeOnLeave:!0}),function(e){var n=e.className;return h.createElement("div",{style:{zIndex:r},className:l()("".concat(t,"-mask"),n)})}):null}var E=h.memo(function(e){return e.children},function(e,t){return t.cache}),C=h.forwardRef(function(e,t){var n=e.popup,a=e.className,i=e.prefixCls,c=e.style,u=e.target,d=e.onVisibleChanged,f=e.open,p=e.keepDom,g=e.fresh,C=e.onClick,S=e.mask,O=e.arrow,Z=e.arrowPos,k=e.align,R=e.motion,M=e.maskMotion,j=e.forceRender,P=e.getPopupContainer,N=e.autoDestroy,I=e.portal,T=e.zIndex,A=e.onMouseEnter,F=e.onMouseLeave,z=e.onPointerEnter,L=e.ready,_=e.offsetX,B=e.offsetY,H=e.offsetR,D=e.offsetB,W=e.onAlign,V=e.onPrepare,q=e.stretch,X=e.targetWidth,G=e.targetHeight,U="function"==typeof n?n():n,K=f||p,$=(null==P?void 0:P.length)>0,Y=h.useState(!P||!$),Q=(0,o.Z)(Y,2),J=Q[0],ee=Q[1];if((0,m.Z)(function(){!J&&$&&u&&ee(!0)},[J,$,u]),!J)return null;var et="auto",en={left:"-1000vw",top:"-1000vh",right:et,bottom:et};if(L||!f){var er,eo=k.points,ea=k.dynamicInset||(null===(er=k._experimental)||void 0===er?void 0:er.dynamicInset),ei=ea&&"r"===eo[0][1],ec=ea&&"b"===eo[0][0];ei?(en.right=H,en.left=et):(en.left=_,en.right=et),ec?(en.bottom=D,en.top=et):(en.top=B,en.bottom=et)}var el={};return q&&(q.includes("height")&&G?el.height=G:q.includes("minHeight")&&G&&(el.minHeight=G),q.includes("width")&&X?el.width=X:q.includes("minWidth")&&X&&(el.minWidth=X)),f||(el.pointerEvents="none"),h.createElement(I,{open:j||K,getContainer:P&&function(){return P(u)},autoDestroy:N},h.createElement(w,{prefixCls:i,open:f,zIndex:T,mask:S,motion:M}),h.createElement(s.Z,{onResize:W,disabled:!f},function(e){return h.createElement(b.ZP,(0,v.Z)({motionAppear:!0,motionEnter:!0,motionLeave:!0,removeOnLeave:!1,forceRender:j,leavedClassName:"".concat(i,"-hidden")},R,{onAppearPrepare:V,onEnterPrepare:V,visible:f,onVisibleChanged:function(e){var t;null==R||null===(t=R.onVisibleChanged)||void 0===t||t.call(R,e),d(e)}}),function(n,o){var s=n.className,u=n.style,d=l()(i,s,a);return h.createElement("div",{ref:(0,y.sQ)(e,t,o),className:d,style:(0,r.Z)((0,r.Z)((0,r.Z)((0,r.Z)({"--arrow-x":"".concat(Z.x||0,"px"),"--arrow-y":"".concat(Z.y||0,"px")},en),el),u),{},{boxSizing:"border-box",zIndex:T},c),onMouseEnter:A,onMouseLeave:F,onPointerEnter:z,onClick:C},O&&h.createElement(x,{prefixCls:i,arrow:O,arrowPos:Z,align:k}),h.createElement(E,{cache:!f&&!g},U))})}))}),S=h.forwardRef(function(e,t){var n=e.children,r=e.getTriggerDOMNode,o=(0,y.Yr)(n),a=h.useCallback(function(e){(0,y.mH)(t,r?r(e):e)},[r]),i=(0,y.x1)(a,n.ref);return o?h.cloneElement(n,{ref:i}):n}),O=h.createContext(null);function Z(e){return e?Array.isArray(e)?e:[e]:[]}var k=n(3193);function R(e,t,n,r){return t||(n?{motionName:"".concat(e,"-").concat(n)}:r?{motionName:r}:null)}function M(e){return e.ownerDocument.defaultView}function j(e){for(var t=[],n=null==e?void 0:e.parentElement,r=["hidden","scroll","clip","auto"];n;){var o=M(n).getComputedStyle(n);[o.overflowX,o.overflowY,o.overflow].some(function(e){return r.includes(e)})&&t.push(n),n=n.parentElement}return t}function P(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return Number.isNaN(e)?t:e}function N(e){return P(parseFloat(e),0)}function I(e,t){var n=(0,r.Z)({},e);return(t||[]).forEach(function(e){if(!(e instanceof HTMLBodyElement||e instanceof HTMLHtmlElement)){var t=M(e).getComputedStyle(e),r=t.overflow,o=t.overflowClipMargin,a=t.borderTopWidth,i=t.borderBottomWidth,c=t.borderLeftWidth,l=t.borderRightWidth,s=e.getBoundingClientRect(),u=e.offsetHeight,d=e.clientHeight,f=e.offsetWidth,p=e.clientWidth,m=N(a),g=N(i),h=N(c),v=N(l),b=P(Math.round(s.width/f*1e3)/1e3),y=P(Math.round(s.height/u*1e3)/1e3),x=m*y,w=h*b,E=0,C=0;if("clip"===r){var S=N(o);E=S*b,C=S*y}var O=s.x+w-E,Z=s.y+x-C,k=O+s.width+2*E-w-v*b-(f-p-h-v)*b,R=Z+s.height+2*C-x-g*y-(u-d-m-g)*y;n.left=Math.max(n.left,O),n.top=Math.max(n.top,Z),n.right=Math.min(n.right,k),n.bottom=Math.min(n.bottom,R)}}),n}function T(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n="".concat(t),r=n.match(/^(.*)\%$/);return r?parseFloat(r[1])/100*e:parseFloat(n)}function A(e,t){var n=(0,o.Z)(t||[],2),r=n[0],a=n[1];return[T(e.width,r),T(e.height,a)]}function F(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return[e[0],e[1]]}function z(e,t){var n,r=t[0],o=t[1];return n="t"===r?e.y:"b"===r?e.y+e.height:e.y+e.height/2,{x:"l"===o?e.x:"r"===o?e.x+e.width:e.x+e.width/2,y:n}}function L(e,t){var n={t:"b",b:"t",l:"r",r:"l"};return e.map(function(e,r){return r===t?n[e]||"c":e}).join("")}var _=n(3787);n(3850);var B=n(9223),H=["prefixCls","children","action","showAction","hideAction","popupVisible","defaultPopupVisible","onPopupVisibleChange","afterPopupVisibleChange","mouseEnterDelay","mouseLeaveDelay","focusDelay","blurDelay","mask","maskClosable","getPopupContainer","forceRender","autoDestroy","destroyPopupOnHide","popup","popupClassName","popupStyle","popupPlacement","builtinPlacements","popupAlign","zIndex","stretch","getPopupClassNameFromAlign","fresh","alignPoint","onPopupClick","onPopupAlign","arrow","popupMotion","maskMotion","popupTransitionName","popupAnimation","maskTransitionName","maskAnimation","className","getTriggerDOMNode"],D=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:i.Z;return h.forwardRef(function(t,n){var i,c,v,b,y,x,w,E,N,T,D,W,V,q,X,G,U,K=t.prefixCls,$=void 0===K?"rc-trigger-popup":K,Y=t.children,Q=t.action,J=t.showAction,ee=t.hideAction,et=t.popupVisible,en=t.defaultPopupVisible,er=t.onPopupVisibleChange,eo=t.afterPopupVisibleChange,ea=t.mouseEnterDelay,ei=t.mouseLeaveDelay,ec=void 0===ei?.1:ei,el=t.focusDelay,es=t.blurDelay,eu=t.mask,ed=t.maskClosable,ef=t.getPopupContainer,ep=t.forceRender,em=t.autoDestroy,eg=t.destroyPopupOnHide,eh=t.popup,ev=t.popupClassName,eb=t.popupStyle,ey=t.popupPlacement,ex=t.builtinPlacements,ew=void 0===ex?{}:ex,eE=t.popupAlign,eC=t.zIndex,eS=t.stretch,eO=t.getPopupClassNameFromAlign,eZ=t.fresh,ek=t.alignPoint,eR=t.onPopupClick,eM=t.onPopupAlign,ej=t.arrow,eP=t.popupMotion,eN=t.maskMotion,eI=t.popupTransitionName,eT=t.popupAnimation,eA=t.maskTransitionName,eF=t.maskAnimation,ez=t.className,eL=t.getTriggerDOMNode,e_=(0,a.Z)(t,H),eB=h.useState(!1),eH=(0,o.Z)(eB,2),eD=eH[0],eW=eH[1];(0,m.Z)(function(){eW((0,g.Z)())},[]);var eV=h.useRef({}),eq=h.useContext(O),eX=h.useMemo(function(){return{registerSubPopup:function(e,t){eV.current[e]=t,null==eq||eq.registerSubPopup(e,t)}}},[eq]),eG=(0,p.Z)(),eU=h.useState(null),eK=(0,o.Z)(eU,2),e$=eK[0],eY=eK[1],eQ=(0,f.Z)(function(e){(0,u.S)(e)&&e$!==e&&eY(e),null==eq||eq.registerSubPopup(eG,e)}),eJ=h.useState(null),e0=(0,o.Z)(eJ,2),e1=e0[0],e2=e0[1],e4=h.useRef(null),e5=(0,f.Z)(function(e){(0,u.S)(e)&&e1!==e&&(e2(e),e4.current=e)}),e3=h.Children.only(Y),e6=(null==e3?void 0:e3.props)||{},e8={},e9=(0,f.Z)(function(e){var t,n;return(null==e1?void 0:e1.contains(e))||(null===(t=(0,d.A)(e1))||void 0===t?void 0:t.host)===e||e===e1||(null==e$?void 0:e$.contains(e))||(null===(n=(0,d.A)(e$))||void 0===n?void 0:n.host)===e||e===e$||Object.values(eV.current).some(function(t){return(null==t?void 0:t.contains(e))||e===t})}),e7=R($,eP,eT,eI),te=R($,eN,eF,eA),tt=h.useState(en||!1),tn=(0,o.Z)(tt,2),tr=tn[0],to=tn[1],ta=null!=et?et:tr,ti=(0,f.Z)(function(e){void 0===et&&to(e)});(0,m.Z)(function(){to(et||!1)},[et]);var tc=h.useRef(ta);tc.current=ta;var tl=h.useRef([]);tl.current=[];var ts=(0,f.Z)(function(e){var t;ti(e),(null!==(t=tl.current[tl.current.length-1])&&void 0!==t?t:ta)!==e&&(tl.current.push(e),null==er||er(e))}),tu=h.useRef(),td=function(){clearTimeout(tu.current)},tf=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;td(),0===t?ts(e):tu.current=setTimeout(function(){ts(e)},1e3*t)};h.useEffect(function(){return td},[]);var tp=h.useState(!1),tm=(0,o.Z)(tp,2),tg=tm[0],th=tm[1];(0,m.Z)(function(e){(!e||ta)&&th(!0)},[ta]);var tv=h.useState(null),tb=(0,o.Z)(tv,2),ty=tb[0],tx=tb[1],tw=h.useState([0,0]),tE=(0,o.Z)(tw,2),tC=tE[0],tS=tE[1],tO=function(e){tS([e.clientX,e.clientY])},tZ=(i=ek?tC:e1,c=h.useState({ready:!1,offsetX:0,offsetY:0,offsetR:0,offsetB:0,arrowX:0,arrowY:0,scaleX:1,scaleY:1,align:ew[ey]||{}}),b=(v=(0,o.Z)(c,2))[0],y=v[1],x=h.useRef(0),w=h.useMemo(function(){return e$?j(e$):[]},[e$]),E=h.useRef({}),ta||(E.current={}),N=(0,f.Z)(function(){if(e$&&i&&ta){var e,t,n,a,c,l,s,d=e$.ownerDocument,f=M(e$).getComputedStyle(e$),p=f.width,m=f.height,g=f.position,h=e$.style.left,v=e$.style.top,b=e$.style.right,x=e$.style.bottom,C=e$.style.overflow,S=(0,r.Z)((0,r.Z)({},ew[ey]),eE),O=d.createElement("div");if(null===(e=e$.parentElement)||void 0===e||e.appendChild(O),O.style.left="".concat(e$.offsetLeft,"px"),O.style.top="".concat(e$.offsetTop,"px"),O.style.position=g,O.style.height="".concat(e$.offsetHeight,"px"),O.style.width="".concat(e$.offsetWidth,"px"),e$.style.left="0",e$.style.top="0",e$.style.right="auto",e$.style.bottom="auto",e$.style.overflow="hidden",Array.isArray(i))n={x:i[0],y:i[1],width:0,height:0};else{var Z=i.getBoundingClientRect();n={x:Z.x,y:Z.y,width:Z.width,height:Z.height}}var R=e$.getBoundingClientRect(),j=d.documentElement,N=j.clientWidth,T=j.clientHeight,_=j.scrollWidth,B=j.scrollHeight,H=j.scrollTop,D=j.scrollLeft,W=R.height,V=R.width,q=n.height,X=n.width,G=S.htmlRegion,U="visible",K="visibleFirst";"scroll"!==G&&G!==K&&(G=U);var $=G===K,Y=I({left:-D,top:-H,right:_-D,bottom:B-H},w),Q=I({left:0,top:0,right:N,bottom:T},w),J=G===U?Q:Y,ee=$?Q:J;e$.style.left="auto",e$.style.top="auto",e$.style.right="0",e$.style.bottom="0";var et=e$.getBoundingClientRect();e$.style.left=h,e$.style.top=v,e$.style.right=b,e$.style.bottom=x,e$.style.overflow=C,null===(t=e$.parentElement)||void 0===t||t.removeChild(O);var en=P(Math.round(V/parseFloat(p)*1e3)/1e3),er=P(Math.round(W/parseFloat(m)*1e3)/1e3);if(!(0===en||0===er||(0,u.S)(i)&&!(0,k.Z)(i))){var eo=S.offset,ea=S.targetOffset,ei=A(R,eo),ec=(0,o.Z)(ei,2),el=ec[0],es=ec[1],eu=A(n,ea),ed=(0,o.Z)(eu,2),ef=ed[0],ep=ed[1];n.x-=ef,n.y-=ep;var em=S.points||[],eg=(0,o.Z)(em,2),eh=eg[0],ev=F(eg[1]),eb=F(eh),ex=z(n,ev),eC=z(R,eb),eS=(0,r.Z)({},S),eO=ex.x-eC.x+el,eZ=ex.y-eC.y+es,ek=tt(eO,eZ),eR=tt(eO,eZ,Q),ej=z(n,["t","l"]),eP=z(R,["t","l"]),eN=z(n,["b","r"]),eI=z(R,["b","r"]),eT=S.overflow||{},eA=eT.adjustX,eF=eT.adjustY,ez=eT.shiftX,eL=eT.shiftY,e_=function(e){return"boolean"==typeof e?e:e>=0};tn();var eB=e_(eF),eH=eb[0]===ev[0];if(eB&&"t"===eb[0]&&(c>ee.bottom||E.current.bt)){var eD=eZ;eH?eD-=W-q:eD=ej.y-eI.y-es;var eW=tt(eO,eD),eV=tt(eO,eD,Q);eW>ek||eW===ek&&(!$||eV>=eR)?(E.current.bt=!0,eZ=eD,es=-es,eS.points=[L(eb,0),L(ev,0)]):E.current.bt=!1}if(eB&&"b"===eb[0]&&(aek||eX===ek&&(!$||eG>=eR)?(E.current.tb=!0,eZ=eq,es=-es,eS.points=[L(eb,0),L(ev,0)]):E.current.tb=!1}var eU=e_(eA),eK=eb[1]===ev[1];if(eU&&"l"===eb[1]&&(s>ee.right||E.current.rl)){var eY=eO;eK?eY-=V-X:eY=ej.x-eI.x-el;var eQ=tt(eY,eZ),eJ=tt(eY,eZ,Q);eQ>ek||eQ===ek&&(!$||eJ>=eR)?(E.current.rl=!0,eO=eY,el=-el,eS.points=[L(eb,1),L(ev,1)]):E.current.rl=!1}if(eU&&"r"===eb[1]&&(lek||e1===ek&&(!$||e2>=eR)?(E.current.lr=!0,eO=e0,el=-el,eS.points=[L(eb,1),L(ev,1)]):E.current.lr=!1}tn();var e4=!0===ez?0:ez;"number"==typeof e4&&(lQ.right&&(eO-=s-Q.right-el,n.x>Q.right-e4&&(eO+=n.x-Q.right+e4)));var e5=!0===eL?0:eL;"number"==typeof e5&&(aQ.bottom&&(eZ-=c-Q.bottom-es,n.y>Q.bottom-e5&&(eZ+=n.y-Q.bottom+e5)));var e3=R.x+eO,e6=R.y+eZ,e8=n.x,e9=n.y;null==eM||eM(e$,eS);var e7=et.right-R.x-(eO+R.width),te=et.bottom-R.y-(eZ+R.height);y({ready:!0,offsetX:eO/en,offsetY:eZ/er,offsetR:e7/en,offsetB:te/er,arrowX:((Math.max(e3,e8)+Math.min(e3+V,e8+X))/2-e3)/en,arrowY:((Math.max(e6,e9)+Math.min(e6+W,e9+q))/2-e6)/er,scaleX:en,scaleY:er,align:eS})}function tt(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:J,r=R.x+e,o=R.y+t,a=Math.max(r,n.left),i=Math.max(o,n.top);return Math.max(0,(Math.min(r+V,n.right)-a)*(Math.min(o+W,n.bottom)-i))}function tn(){c=(a=R.y+eZ)+W,s=(l=R.x+eO)+V}}}),T=function(){y(function(e){return(0,r.Z)((0,r.Z)({},e),{},{ready:!1})})},(0,m.Z)(T,[ey]),(0,m.Z)(function(){ta||T()},[ta]),[b.ready,b.offsetX,b.offsetY,b.offsetR,b.offsetB,b.arrowX,b.arrowY,b.scaleX,b.scaleY,b.align,function(){x.current+=1;var e=x.current;Promise.resolve().then(function(){x.current===e&&N()})}]),tk=(0,o.Z)(tZ,11),tR=tk[0],tM=tk[1],tj=tk[2],tP=tk[3],tN=tk[4],tI=tk[5],tT=tk[6],tA=tk[7],tF=tk[8],tz=tk[9],tL=tk[10],t_=(D=void 0===Q?"hover":Q,h.useMemo(function(){var e=Z(null!=J?J:D),t=Z(null!=ee?ee:D),n=new Set(e),r=new Set(t);return eD&&(n.has("hover")&&(n.delete("hover"),n.add("click")),r.has("hover")&&(r.delete("hover"),r.add("click"))),[n,r]},[eD,D,J,ee])),tB=(0,o.Z)(t_,2),tH=tB[0],tD=tB[1],tW=tH.has("click"),tV=tD.has("click")||tD.has("contextMenu"),tq=(0,f.Z)(function(){tg||tL()});W=function(){tc.current&&ek&&tV&&tf(!1)},(0,m.Z)(function(){if(ta&&e1&&e$){var e=j(e1),t=j(e$),n=M(e$),r=new Set([n].concat((0,_.Z)(e),(0,_.Z)(t)));function o(){tq(),W()}return r.forEach(function(e){e.addEventListener("scroll",o,{passive:!0})}),n.addEventListener("resize",o,{passive:!0}),tq(),function(){r.forEach(function(e){e.removeEventListener("scroll",o),n.removeEventListener("resize",o)})}}},[ta,e1,e$]),(0,m.Z)(function(){tq()},[tC,ey]),(0,m.Z)(function(){ta&&!(null!=ew&&ew[ey])&&tq()},[JSON.stringify(eE)]);var tX=h.useMemo(function(){var e=function(e,t,n,r){for(var o=n.points,a=Object.keys(e),i=0;i0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0;return n?e[0]===t[0]:e[0]===t[0]&&e[1]===t[1]}(null===(c=e[l])||void 0===c?void 0:c.points,o,r))return"".concat(t,"-placement-").concat(l)}return""}(ew,$,tz,ek);return l()(e,null==eO?void 0:eO(tz))},[tz,eO,ew,$,ek]);h.useImperativeHandle(n,function(){return{nativeElement:e4.current,forceAlign:tq}});var tG=h.useState(0),tU=(0,o.Z)(tG,2),tK=tU[0],t$=tU[1],tY=h.useState(0),tQ=(0,o.Z)(tY,2),tJ=tQ[0],t0=tQ[1],t1=function(){if(eS&&e1){var e=e1.getBoundingClientRect();t$(e.width),t0(e.height)}};function t2(e,t,n,r){e8[e]=function(o){var a;null==r||r(o),tf(t,n);for(var i=arguments.length,c=Array(i>1?i-1:0),l=1;l1?n-1:0),o=1;o1?n-1:0),o=1;o{switch(e){case"simple":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,l.bM)(t,s.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,c.q)((0,l.bM)(t,s.K.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,l.bM)(t,s.K.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,c.q)((0,l.bM)(t,s.K.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}},m=(0,l.fn)("Icon"),g=o.forwardRef((e,t)=>{let{icon:n,variant:s="simple",tooltip:g,size:h=i.u8.SM,color:v,className:b}=e,y=(0,r._T)(e,["icon","variant","tooltip","size","color","className"]),x=p(s,v),{tooltipProps:w,getReferenceProps:E}=(0,a.l)();return o.createElement("span",Object.assign({ref:(0,l.lq)([t,w.refs.setReference]),className:(0,c.q)(m("root"),"inline-flex flex-shrink-0 items-center",x.bgColor,x.textColor,x.borderColor,x.ringColor,f[s].rounded,f[s].border,f[s].shadow,f[s].ring,u[h].paddingX,u[h].paddingY,b)},E,y),o.createElement(a.Z,Object.assign({text:g},w)),o.createElement(n,{className:(0,c.q)(m("icon"),"shrink-0",d[h].height,d[h].width)}))});g.displayName="Icon"},2179:function(e,t,n){n.d(t,{Z:function(){return S}});var r=n(9703),o=n(8437),a=n(4090);let i=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],c=e=>({_s:e,status:i[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),l=e=>e?6:5,s=(e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return l(t)}},u=e=>"object"==typeof e?[e.enter,e.exit]:[e,e],d=(e,t)=>setTimeout(()=>{isNaN(document.body.offsetTop)||e(t+1)},0),f=(e,t,n,r,o)=>{clearTimeout(r.current);let a=c(e);t(a),n.current=a,o&&o({current:a})},p=function(){let{enter:e=!0,exit:t=!0,preEnter:n,preExit:r,timeout:o,initialEntered:i,mountOnEnter:p,unmountOnExit:m,onStateChange:g}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[h,v]=(0,a.useState)(()=>c(i?2:l(p))),b=(0,a.useRef)(h),y=(0,a.useRef)(),[x,w]=u(o),E=(0,a.useCallback)(()=>{let e=s(b.current._s,m);e&&f(e,v,b,y,g)},[g,m]),C=(0,a.useCallback)(o=>{let a=e=>{switch(f(e,v,b,y,g),e){case 1:x>=0&&(y.current=setTimeout(E,x));break;case 4:w>=0&&(y.current=setTimeout(E,w));break;case 0:case 3:y.current=d(a,e)}},i=b.current.isEnter;"boolean"!=typeof o&&(o=!i),o?i||a(e?n?0:1:2):i&&a(t?r?3:4:l(m))},[E,g,e,t,n,r,x,w,m]);return(0,a.useEffect)(()=>()=>clearTimeout(y.current),[]),[h,C,E]};var m=n(4942),g=n(9250),h=n(5492);let v=e=>{var t=(0,r._T)(e,[]);return a.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),a.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),a.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var b=n(2898);let y={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},x=e=>"light"!==e?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}},w=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,h.bM)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,h.bM)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,h.bM)(t,b.K.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,h.bM)(t,b.K.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,h.bM)(t,b.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,h.bM)(t,b.K.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,h.bM)(t,b.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,h.bM)(t,b.K.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,h.bM)("transparent").bgColor,hoverBgColor:t?(0,g.q)((0,h.bM)(t,b.K.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,h.bM)(t,b.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,h.bM)(t,b.K.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,h.bM)(t,b.K.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,h.bM)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},E=(0,h.fn)("Button"),C=e=>{let{loading:t,iconSize:n,iconPosition:r,Icon:o,needMargin:i,transitionStatus:c}=e,l=i?r===m.zS.Left?(0,g.q)("-ml-1","mr-1.5"):(0,g.q)("-mr-1","ml-1.5"):"",s=(0,g.q)("w-0 h-0"),u={default:s,entering:s,entered:n,exiting:n,exited:s};return t?a.createElement(v,{className:(0,g.q)(E("icon"),"animate-spin shrink-0",l,u.default,u[c]),style:{transition:"width 150ms"}}):a.createElement(o,{className:(0,g.q)(E("icon"),"shrink-0",n,l)})},S=a.forwardRef((e,t)=>{let{icon:n,iconPosition:i=m.zS.Left,size:c=m.u8.SM,color:l,variant:s="primary",disabled:u,loading:d=!1,loadingText:f,children:v,tooltip:b,className:S}=e,O=(0,r._T)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),Z=d||u,k=void 0!==n||d,R=d&&f,M=!(!v&&!R),j=(0,g.q)(y[c].height,y[c].width),P="light"!==s?(0,g.q)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",N=w(s,l),I=x(s)[c],{tooltipProps:T,getReferenceProps:A}=(0,o.l)(300),[F,z]=p({timeout:50});return(0,a.useEffect)(()=>{z(d)},[d]),a.createElement("button",Object.assign({ref:(0,h.lq)([t,T.refs.setReference]),className:(0,g.q)(E("root"),"flex-shrink-0 inline-flex justify-center items-center group font-medium outline-none",P,I.paddingX,I.paddingY,I.fontSize,N.textColor,N.bgColor,N.borderColor,N.hoverBorderColor,Z?"opacity-50 cursor-not-allowed":(0,g.q)(w(s,l).hoverTextColor,w(s,l).hoverBgColor,w(s,l).hoverBorderColor),S),disabled:Z},A,O),a.createElement(o.Z,Object.assign({text:b},T)),k&&i!==m.zS.Right?a.createElement(C,{loading:d,iconSize:j,iconPosition:i,Icon:n,transitionStatus:F.status,needMargin:M}):null,R||v?a.createElement("span",{className:(0,g.q)(E("text"),"text-tremor-default whitespace-nowrap")},R?f:v):null,k&&i===m.zS.Right?a.createElement(C,{loading:d,iconSize:j,iconPosition:i,Icon:n,transitionStatus:F.status,needMargin:M}):null)});S.displayName="Button"},3810:function(e,t,n){n.d(t,{Z:function(){return d}});var r=n(9703),o=n(4090),a=n(4942),i=n(2898),c=n(9250),l=n(5492);let s=(0,l.fn)("Card"),u=e=>{if(!e)return"";switch(e){case a.zS.Left:return"border-l-4";case a.m.Top:return"border-t-4";case a.zS.Right:return"border-r-4";case a.m.Bottom:return"border-b-4";default:return""}},d=o.forwardRef((e,t)=>{let{decoration:n="",decorationColor:a,children:d,className:f}=e,p=(0,r._T)(e,["decoration","decorationColor","children","className"]);return o.createElement("div",Object.assign({ref:t,className:(0,c.q)(s("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",a?(0,l.bM)(a,i.K.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",u(n),f)},p),d)});d.displayName="Card"},384:function(e,t,n){n.d(t,{Z:function(){return s}});var r=n(9703),o=n(9250),a=n(5492),i=n(4090),c=n(217);let l=(0,a.fn)("Col"),s=i.forwardRef((e,t)=>{let{numColSpan:n=1,numColSpanSm:a,numColSpanMd:s,numColSpanLg:u,children:d,className:f}=e,p=(0,r._T)(e,["numColSpan","numColSpanSm","numColSpanMd","numColSpanLg","children","className"]),m=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"";return i.createElement("div",Object.assign({ref:t,className:(0,o.q)(l("root"),(()=>{let e=m(n,c.PT),t=m(a,c.SP),r=m(s,c.VS),i=m(u,c._w);return(0,o.q)(e,t,r,i)})(),f)},p),d)});s.displayName="Col"},6453:function(e,t,n){n.d(t,{Z:function(){return u}});var r=n(9703),o=n(9250),a=n(5492),i=n(4090),c=n(217);let l=(0,a.fn)("Grid"),s=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"",u=i.forwardRef((e,t)=>{let{numItems:n=1,numItemsSm:a,numItemsMd:u,numItemsLg:d,children:f,className:p}=e,m=(0,r._T)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),g=s(n,c._m),h=s(a,c.LH),v=s(u,c.l5),b=s(d,c.N4),y=(0,o.q)(g,h,v,b);return i.createElement("div",Object.assign({ref:t,className:(0,o.q)(l("root"),"grid",y,p)},m),f)});u.displayName="Grid"},217:function(e,t,n){n.d(t,{LH:function(){return o},N4:function(){return i},PT:function(){return c},SP:function(){return l},VS:function(){return s},_m:function(){return r},_w:function(){return u},l5:function(){return a}});let r={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},o={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},a={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},i={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"},c={1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},l={1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},s={1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},u={1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"}},827:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("Table"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement("div",{className:(0,a.q)(i("root"),"overflow-auto",c)},o.createElement("table",Object.assign({ref:t,className:(0,a.q)(i("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},l),n))});c.displayName="Table"},3851:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableBody"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("tbody",Object.assign({ref:t,className:(0,a.q)(i("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",c)},l),n))});c.displayName="TableBody"},2044:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableCell"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("td",Object.assign({ref:t,className:(0,a.q)(i("root"),"align-middle whitespace-nowrap text-left p-4",c)},l),n))});c.displayName="TableCell"},4167:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableHead"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("thead",Object.assign({ref:t,className:(0,a.q)(i("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",c)},l),n))});c.displayName="TableHead"},4480:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableHeaderCell"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("th",Object.assign({ref:t,className:(0,a.q)(i("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content","dark:text-dark-tremor-content",c)},l),n))});c.displayName="TableHeaderCell"},2287:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(9703),o=n(4090),a=n(9250);let i=(0,n(5492).fn)("TableRow"),c=o.forwardRef((e,t)=>{let{children:n,className:c}=e,l=(0,r._T)(e,["children","className"]);return o.createElement(o.Fragment,null,o.createElement("tr",Object.assign({ref:t,className:(0,a.q)(i("row"),c)},l),n))});c.displayName="TableRow"},1801:function(e,t,n){n.d(t,{Z:function(){return c}});var r=n(2898),o=n(9250),a=n(5492),i=n(4090);let c=i.forwardRef((e,t)=>{let{color:n,className:c,children:l}=e;return i.createElement("p",{ref:t,className:(0,o.q)("text-tremor-default",n?(0,a.bM)(n,r.K.text).textColor:(0,o.q)("text-tremor-content","dark:text-dark-tremor-content"),c)},l)});c.displayName="Text"},2440:function(e,t,n){n.d(t,{Z:function(){return l}});var r=n(9703),o=n(2898),a=n(9250),i=n(5492),c=n(4090);let l=c.forwardRef((e,t)=>{let{color:n,children:l,className:s}=e,u=(0,r._T)(e,["color","children","className"]);return c.createElement("p",Object.assign({ref:t,className:(0,a.q)("font-medium text-tremor-title",n?(0,i.bM)(n,o.K.darkText).textColor:"text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis",s)},u),l)});l.displayName="Title"},8437:function(e,t,n){n.d(t,{Z:function(){return eB},l:function(){return e_}});var r=n(4090),o=n.t(r,2),a=n(9542);function i(e){return s(e)?(e.nodeName||"").toLowerCase():"#document"}function c(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function l(e){var t;return null==(t=(s(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function s(e){return e instanceof Node||e instanceof c(e).Node}function u(e){return e instanceof Element||e instanceof c(e).Element}function d(e){return e instanceof HTMLElement||e instanceof c(e).HTMLElement}function f(e){return"undefined"!=typeof ShadowRoot&&(e instanceof ShadowRoot||e instanceof c(e).ShadowRoot)}function p(e){let{overflow:t,overflowX:n,overflowY:r,display:o}=b(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(o)}function m(e){let t=h(),n=b(e);return"none"!==n.transform||"none"!==n.perspective||!!n.containerType&&"normal"!==n.containerType||!t&&!!n.backdropFilter&&"none"!==n.backdropFilter||!t&&!!n.filter&&"none"!==n.filter||["transform","perspective","filter"].some(e=>(n.willChange||"").includes(e))||["paint","layout","strict","content"].some(e=>(n.contain||"").includes(e))}function g(e){let t=x(e);for(;d(t)&&!v(t);){if(m(t))return t;t=x(t)}return null}function h(){return"undefined"!=typeof CSS&&!!CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")}function v(e){return["html","body","#document"].includes(i(e))}function b(e){return c(e).getComputedStyle(e)}function y(e){return u(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function x(e){if("html"===i(e))return e;let t=e.assignedSlot||e.parentNode||f(e)&&e.host||l(e);return f(t)?t.host:t}function w(e,t,n){var r;void 0===t&&(t=[]),void 0===n&&(n=!0);let o=function e(t){let n=x(t);return v(n)?t.ownerDocument?t.ownerDocument.body:t.body:d(n)&&p(n)?n:e(n)}(e),a=o===(null==(r=e.ownerDocument)?void 0:r.body),i=c(o);return a?t.concat(i,i.visualViewport||[],p(o)?o:[],i.frameElement&&n?w(i.frameElement):[]):t.concat(o,w(o,[],n))}let E=Math.min,C=Math.max,S=Math.round,O=Math.floor,Z=e=>({x:e,y:e}),k={left:"right",right:"left",bottom:"top",top:"bottom"},R={start:"end",end:"start"};function M(e,t){return"function"==typeof e?e(t):e}function j(e){return e.split("-")[0]}function P(e){return e.split("-")[1]}function N(e){return"x"===e?"y":"x"}function I(e){return"y"===e?"height":"width"}function T(e){return["top","bottom"].includes(j(e))?"y":"x"}function A(e){return e.replace(/start|end/g,e=>R[e])}function F(e){return e.replace(/left|right|bottom|top/g,e=>k[e])}function z(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}function L(e,t,n){let r,{reference:o,floating:a}=e,i=T(t),c=N(T(t)),l=I(c),s=j(t),u="y"===i,d=o.x+o.width/2-a.width/2,f=o.y+o.height/2-a.height/2,p=o[l]/2-a[l]/2;switch(s){case"top":r={x:d,y:o.y-a.height};break;case"bottom":r={x:d,y:o.y+o.height};break;case"right":r={x:o.x+o.width,y:f};break;case"left":r={x:o.x-a.width,y:f};break;default:r={x:o.x,y:o.y}}switch(P(t)){case"start":r[c]-=p*(n&&u?-1:1);break;case"end":r[c]+=p*(n&&u?-1:1)}return r}let _=async(e,t,n)=>{let{placement:r="bottom",strategy:o="absolute",middleware:a=[],platform:i}=n,c=a.filter(Boolean),l=await (null==i.isRTL?void 0:i.isRTL(t)),s=await i.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=L(s,r,l),f=r,p={},m=0;for(let n=0;n{!function(n){try{t=t||e.matches(n)}catch(e){}}(n)});let o=g(e);if(t&&o){let e=o.getBoundingClientRect();n=e.x,r=e.y}return[t,n,r]}function $(e){return G(l(e)).left+y(e).scrollLeft}function Y(e,t,n){let r;if("viewport"===t)r=function(e,t){let n=c(e),r=l(e),o=n.visualViewport,a=r.clientWidth,i=r.clientHeight,s=0,u=0;if(o){a=o.width,i=o.height;let e=h();(!e||e&&"fixed"===t)&&(s=o.offsetLeft,u=o.offsetTop)}return{width:a,height:i,x:s,y:u}}(e,n);else if("document"===t)r=function(e){let t=l(e),n=y(e),r=e.ownerDocument.body,o=C(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=C(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),i=-n.scrollLeft+$(e),c=-n.scrollTop;return"rtl"===b(r).direction&&(i+=C(t.clientWidth,r.clientWidth)-o),{width:o,height:a,x:i,y:c}}(l(e));else if(u(t))r=function(e,t){let n=G(e,!0,"fixed"===t),r=n.top+e.clientTop,o=n.left+e.clientLeft,a=d(e)?V(e):Z(1),i=e.clientWidth*a.x;return{width:i,height:e.clientHeight*a.y,x:o*a.x,y:r*a.y}}(t,n);else{let n=X(e);r={...t,x:t.x-n.x,y:t.y-n.y}}return z(r)}function Q(e,t){return d(e)&&"fixed"!==b(e).position?t?t(e):e.offsetParent:null}function J(e,t){let n=c(e);if(!d(e))return n;let r=Q(e,t);for(;r&&["table","td","th"].includes(i(r))&&"static"===b(r).position;)r=Q(r,t);return r&&("html"===i(r)||"body"===i(r)&&"static"===b(r).position&&!m(r))?n:r||g(e)||n}let ee=async function(e){let t=this.getOffsetParent||J,n=this.getDimensions;return{reference:function(e,t,n,r){let o=d(t),a=l(t),c="fixed"===n,s=G(e,!0,c,t),u={scrollLeft:0,scrollTop:0},f=Z(0);if(o||!o&&!c){if(("body"!==i(t)||p(a))&&(u=y(t)),o){let e=G(t,!0,c,t);f.x=e.x+t.clientLeft,f.y=e.y+t.clientTop}else a&&(f.x=$(a))}let m=s.left+u.scrollLeft-f.x,g=s.top+u.scrollTop-f.y,[h,v,b]=K(r);return h&&(m+=v,g+=b,o&&(m+=t.clientLeft,g+=t.clientTop)),{x:m,y:g,width:s.width,height:s.height}}(e.reference,await t(e.floating),e.strategy,e.floating),floating:{x:0,y:0,...await n(e.floating)}}},et={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e,a=l(r),[c]=t?K(t.floating):[!1];if(r===a||c)return n;let s={scrollLeft:0,scrollTop:0},u=Z(1),f=Z(0),m=d(r);if((m||!m&&"fixed"!==o)&&(("body"!==i(r)||p(a))&&(s=y(r)),d(r))){let e=G(r);u=V(r),f.x=e.x+r.clientLeft,f.y=e.y+r.clientTop}return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-s.scrollLeft*u.x+f.x,y:n.y*u.y-s.scrollTop*u.y+f.y}},getDocumentElement:l,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e,a=[..."clippingAncestors"===n?function(e,t){let n=t.get(e);if(n)return n;let r=w(e,[],!1).filter(e=>u(e)&&"body"!==i(e)),o=null,a="fixed"===b(e).position,c=a?x(e):e;for(;u(c)&&!v(c);){let t=b(c),n=m(c);n||"fixed"!==t.position||(o=null),(a?!n&&!o:!n&&"static"===t.position&&!!o&&["absolute","fixed"].includes(o.position)||p(c)&&!n&&function e(t,n){let r=x(t);return!(r===n||!u(r)||v(r))&&("fixed"===b(r).position||e(r,n))}(e,c))?r=r.filter(e=>e!==c):o=t,c=x(c)}return t.set(e,r),r}(t,this._c):[].concat(n),r],c=a[0],l=a.reduce((e,n)=>{let r=Y(t,n,o);return e.top=C(r.top,e.top),e.right=E(r.right,e.right),e.bottom=E(r.bottom,e.bottom),e.left=C(r.left,e.left),e},Y(t,c,o));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}},getOffsetParent:J,getElementRects:ee,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:n}=D(e);return{width:t,height:n}},getScale:V,isElement:u,isRTL:function(e){return"rtl"===b(e).direction}};function en(e,t,n,r){let o;void 0===r&&(r={});let{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:c="function"==typeof ResizeObserver,layoutShift:s="function"==typeof IntersectionObserver,animationFrame:u=!1}=r,d=W(e),f=a||i?[...d?w(d):[],...w(t)]:[];f.forEach(e=>{a&&e.addEventListener("scroll",n,{passive:!0}),i&&e.addEventListener("resize",n)});let p=d&&s?function(e,t){let n,r=null,o=l(e);function a(){var e;clearTimeout(n),null==(e=r)||e.disconnect(),r=null}return!function i(c,l){void 0===c&&(c=!1),void 0===l&&(l=1),a();let{left:s,top:u,width:d,height:f}=e.getBoundingClientRect();if(c||t(),!d||!f)return;let p=O(u),m=O(o.clientWidth-(s+d)),g={rootMargin:-p+"px "+-m+"px "+-O(o.clientHeight-(u+f))+"px "+-O(s)+"px",threshold:C(0,E(1,l))||1},h=!0;function v(e){let t=e[0].intersectionRatio;if(t!==l){if(!h)return i();t?i(!1,t):n=setTimeout(()=>{i(!1,1e-7)},100)}h=!1}try{r=new IntersectionObserver(v,{...g,root:o.ownerDocument})}catch(e){r=new IntersectionObserver(v,g)}r.observe(e)}(!0),a}(d,n):null,m=-1,g=null;c&&(g=new ResizeObserver(e=>{let[r]=e;r&&r.target===d&&g&&(g.unobserve(t),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var e;null==(e=g)||e.observe(t)})),n()}),d&&!u&&g.observe(d),g.observe(t));let h=u?G(e):null;return u&&function t(){let r=G(e);h&&(r.x!==h.x||r.y!==h.y||r.width!==h.width||r.height!==h.height)&&n(),h=r,o=requestAnimationFrame(t)}(),n(),()=>{var e;f.forEach(e=>{a&&e.removeEventListener("scroll",n),i&&e.removeEventListener("resize",n)}),null==p||p(),null==(e=g)||e.disconnect(),g=null,u&&cancelAnimationFrame(o)}}let er=(e,t,n)=>{let r=new Map,o={platform:et,...n},a={...o.platform,_c:r};return _(e,t,{...o,platform:a})};var eo="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;function ea(e,t){let n,r,o;if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if((n=e.length)!=t.length)return!1;for(r=n;0!=r--;)if(!ea(e[r],t[r]))return!1;return!0}if((n=(o=Object.keys(e)).length)!==Object.keys(t).length)return!1;for(r=n;0!=r--;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!=r--;){let n=o[r];if(("_owner"!==n||!e.$$typeof)&&!ea(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}function ei(e){let t=r.useRef(e);return eo(()=>{t.current=e}),t}var ec="undefined"!=typeof document?r.useLayoutEffect:r.useEffect;let el=!1,es=0,eu=()=>"floating-ui-"+es++,ed=o["useId".toString()]||function(){let[e,t]=r.useState(()=>el?eu():void 0);return ec(()=>{null==e&&t(eu())},[]),r.useEffect(()=>{el||(el=!0)},[]),e},ef=r.createContext(null),ep=r.createContext(null),em=()=>{var e;return(null==(e=r.useContext(ef))?void 0:e.id)||null},eg=()=>r.useContext(ep);function eh(e){return(null==e?void 0:e.ownerDocument)||document}function ev(e){return eh(e).defaultView||window}function eb(e){return!!e&&e instanceof ev(e).Element}function ey(e){return!!e&&e instanceof ev(e).HTMLElement}function ex(e,t){let n=["mouse","pen"];return t||n.push("",void 0),n.includes(e)}function ew(e){let t=(0,r.useRef)(e);return ec(()=>{t.current=e}),t}let eE="data-floating-ui-safe-polygon";function eC(e,t,n){return n&&!ex(n)?0:"number"==typeof e?e:null==e?void 0:e[t]}let eS=function(e,t){let{enabled:n=!0,delay:o=0,handleClose:a=null,mouseOnly:i=!1,restMs:c=0,move:l=!0}=void 0===t?{}:t,{open:s,onOpenChange:u,dataRef:d,events:f,elements:{domReference:p,floating:m},refs:g}=e,h=eg(),v=em(),b=ew(a),y=ew(o),x=r.useRef(),w=r.useRef(),E=r.useRef(),C=r.useRef(),S=r.useRef(!0),O=r.useRef(!1),Z=r.useRef(()=>{}),k=r.useCallback(()=>{var e;let t=null==(e=d.current.openEvent)?void 0:e.type;return(null==t?void 0:t.includes("mouse"))&&"mousedown"!==t},[d]);r.useEffect(()=>{if(n)return f.on("dismiss",e),()=>{f.off("dismiss",e)};function e(){clearTimeout(w.current),clearTimeout(C.current),S.current=!0}},[n,f]),r.useEffect(()=>{if(!n||!b.current||!s)return;function e(){k()&&u(!1)}let t=eh(m).documentElement;return t.addEventListener("mouseleave",e),()=>{t.removeEventListener("mouseleave",e)}},[m,s,u,n,b,d,k]);let R=r.useCallback(function(e){void 0===e&&(e=!0);let t=eC(y.current,"close",x.current);t&&!E.current?(clearTimeout(w.current),w.current=setTimeout(()=>u(!1),t)):e&&(clearTimeout(w.current),u(!1))},[y,u]),M=r.useCallback(()=>{Z.current(),E.current=void 0},[]),j=r.useCallback(()=>{if(O.current){let e=eh(g.floating.current).body;e.style.pointerEvents="",e.removeAttribute(eE),O.current=!1}},[g]);return r.useEffect(()=>{if(n&&eb(p))return s&&p.addEventListener("mouseleave",a),null==m||m.addEventListener("mouseleave",a),l&&p.addEventListener("mousemove",r,{once:!0}),p.addEventListener("mouseenter",r),p.addEventListener("mouseleave",o),()=>{s&&p.removeEventListener("mouseleave",a),null==m||m.removeEventListener("mouseleave",a),l&&p.removeEventListener("mousemove",r),p.removeEventListener("mouseenter",r),p.removeEventListener("mouseleave",o)};function t(){return!!d.current.openEvent&&["click","mousedown"].includes(d.current.openEvent.type)}function r(e){if(clearTimeout(w.current),S.current=!1,i&&!ex(x.current)||c>0&&0===eC(y.current,"open"))return;d.current.openEvent=e;let t=eC(y.current,"open",x.current);t?w.current=setTimeout(()=>{u(!0)},t):u(!0)}function o(n){if(t())return;Z.current();let r=eh(m);if(clearTimeout(C.current),b.current){s||clearTimeout(w.current),E.current=b.current({...e,tree:h,x:n.clientX,y:n.clientY,onClose(){j(),M(),R()}});let t=E.current;r.addEventListener("mousemove",t),Z.current=()=>{r.removeEventListener("mousemove",t)};return}R()}function a(n){t()||null==b.current||b.current({...e,tree:h,x:n.clientX,y:n.clientY,onClose(){j(),M(),R()}})(n)}},[p,m,n,e,i,c,l,R,M,j,u,s,h,y,b,d]),ec(()=>{var e,t,r;if(n&&s&&null!=(e=b.current)&&e.__options.blockPointerEvents&&k()){let e=eh(m).body;if(e.setAttribute(eE,""),e.style.pointerEvents="none",O.current=!0,eb(p)&&m){let e=null==h?void 0:null==(t=h.nodesRef.current.find(e=>e.id===v))?void 0:null==(r=t.context)?void 0:r.elements.floating;return e&&(e.style.pointerEvents=""),p.style.pointerEvents="auto",m.style.pointerEvents="auto",()=>{p.style.pointerEvents="",m.style.pointerEvents=""}}}},[n,s,v,m,p,h,b,d,k]),ec(()=>{s||(x.current=void 0,M(),j())},[s,M,j]),r.useEffect(()=>()=>{M(),clearTimeout(w.current),clearTimeout(C.current),j()},[n,M,j]),r.useMemo(()=>{if(!n)return{};function e(e){x.current=e.pointerType}return{reference:{onPointerDown:e,onPointerEnter:e,onMouseMove(){s||0===c||(clearTimeout(C.current),C.current=setTimeout(()=>{S.current||u(!0)},c))}},floating:{onMouseEnter(){clearTimeout(w.current)},onMouseLeave(){f.emit("dismiss",{type:"mouseLeave",data:{returnFocus:!1}}),R(!1)}}}},[f,n,c,s,u,R])};function eO(e,t){if(!e||!t)return!1;let n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&function(e){if("undefined"==typeof ShadowRoot)return!1;let t=ev(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}(n)){let n=t;do{if(n&&e===n)return!0;n=n.parentNode||n.host}while(n)}return!1}function eZ(e,t){let n=e.filter(e=>{var n;return e.parentId===t&&(null==(n=e.context)?void 0:n.open)})||[],r=n;for(;r.length;)r=e.filter(e=>{var t;return null==(t=r)?void 0:t.some(t=>{var n;return e.parentId===t.id&&(null==(n=e.context)?void 0:n.open)})})||[],n=n.concat(r);return n}let ek=o["useInsertionEffect".toString()]||(e=>e());function eR(e){let t=r.useRef(()=>{});return ek(()=>{t.current=e}),r.useCallback(function(){for(var e=arguments.length,n=Array(e),r=0;r!1),C="function"==typeof p?E:p,S=r.useRef(!1),{escapeKeyBubbles:O,outsidePressBubbles:Z}=eN(b);return r.useEffect(()=>{if(!n||!d)return;function e(e){if("Escape"===e.key){let e=y?eZ(y.nodesRef.current,i):[];if(e.length>0){let t=!0;if(e.forEach(e=>{var n;if(null!=(n=e.context)&&n.open&&!e.context.dataRef.current.__escapeKeyBubbles){t=!1;return}}),!t)return}a.emit("dismiss",{type:"escapeKey",data:{returnFocus:{preventScroll:!1}}}),o(!1)}}function t(e){var t;let n=S.current;if(S.current=!1,n||"function"==typeof C&&!C(e))return;let r="composedPath"in e?e.composedPath()[0]:e.target;if(ey(r)&&s){let t=s.ownerDocument.defaultView||window,n=r.scrollWidth>r.clientWidth,o=r.scrollHeight>r.clientHeight,a=o&&e.offsetX>r.clientWidth;if(o&&"rtl"===t.getComputedStyle(r).direction&&(a=e.offsetX<=r.offsetWidth-r.clientWidth),a||n&&e.offsetY>r.clientHeight)return}let c=y&&eZ(y.nodesRef.current,i).some(t=>{var n;return eM(e,null==(n=t.context)?void 0:n.elements.floating)});if(eM(e,s)||eM(e,l)||c)return;let u=y?eZ(y.nodesRef.current,i):[];if(u.length>0){let e=!0;if(u.forEach(t=>{var n;if(null!=(n=t.context)&&n.open&&!t.context.dataRef.current.__outsidePressBubbles){e=!1;return}}),!e)return}a.emit("dismiss",{type:"outsidePress",data:{returnFocus:x?{preventScroll:!0}:function(e){if(0===e.mozInputSource&&e.isTrusted)return!0;let t=/Android/i;return(t.test(function(){let e=navigator.userAgentData;return null!=e&&e.platform?e.platform:navigator.platform}())||t.test(function(){let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(e=>{let{brand:t,version:n}=e;return t+"/"+n}).join(" "):navigator.userAgent}()))&&e.pointerType?"click"===e.type&&1===e.buttons:0===e.detail&&!e.pointerType}(e)||0===(t=e).width&&0===t.height||1===t.width&&1===t.height&&0===t.pressure&&0===t.detail&&"mouse"!==t.pointerType||t.width<1&&t.height<1&&0===t.pressure&&0===t.detail}}),o(!1)}function r(){o(!1)}u.current.__escapeKeyBubbles=O,u.current.__outsidePressBubbles=Z;let p=eh(s);f&&p.addEventListener("keydown",e),C&&p.addEventListener(m,t);let g=[];return v&&(eb(l)&&(g=w(l)),eb(s)&&(g=g.concat(w(s))),!eb(c)&&c&&c.contextElement&&(g=g.concat(w(c.contextElement)))),(g=g.filter(e=>{var t;return e!==(null==(t=p.defaultView)?void 0:t.visualViewport)})).forEach(e=>{e.addEventListener("scroll",r,{passive:!0})}),()=>{f&&p.removeEventListener("keydown",e),C&&p.removeEventListener(m,t),g.forEach(e=>{e.removeEventListener("scroll",r)})}},[u,s,l,c,f,C,m,a,y,i,n,o,v,d,O,Z,x]),r.useEffect(()=>{S.current=!1},[C,m]),r.useMemo(()=>d?{reference:{[ej[h]]:()=>{g&&(a.emit("dismiss",{type:"referencePress",data:{returnFocus:!1}}),o(!1))}},floating:{[eP[m]]:()=>{S.current=!0}}}:{},[d,a,g,m,h,o])},eT=function(e,t){let{open:n,onOpenChange:o,dataRef:a,events:i,refs:c,elements:{floating:l,domReference:s}}=e,{enabled:u=!0,keyboardOnly:d=!0}=void 0===t?{}:t,f=r.useRef(""),p=r.useRef(!1),m=r.useRef();return r.useEffect(()=>{if(!u)return;let e=eh(l).defaultView||window;function t(){!n&&ey(s)&&s===function(e){let t=e.activeElement;for(;(null==(n=t)?void 0:null==(r=n.shadowRoot)?void 0:r.activeElement)!=null;){var n,r;t=t.shadowRoot.activeElement}return t}(eh(s))&&(p.current=!0)}return e.addEventListener("blur",t),()=>{e.removeEventListener("blur",t)}},[l,s,n,u]),r.useEffect(()=>{if(u)return i.on("dismiss",e),()=>{i.off("dismiss",e)};function e(e){("referencePress"===e.type||"escapeKey"===e.type)&&(p.current=!0)}},[i,u]),r.useEffect(()=>()=>{clearTimeout(m.current)},[]),r.useMemo(()=>u?{reference:{onPointerDown(e){let{pointerType:t}=e;f.current=t,p.current=!!(t&&d)},onMouseLeave(){p.current=!1},onFocus(e){var t;p.current||"focus"===e.type&&(null==(t=a.current.openEvent)?void 0:t.type)==="mousedown"&&a.current.openEvent&&eM(a.current.openEvent,s)||(a.current.openEvent=e.nativeEvent,o(!0))},onBlur(e){p.current=!1;let t=e.relatedTarget,n=eb(t)&&t.hasAttribute("data-floating-ui-focus-guard")&&"outside"===t.getAttribute("data-type");m.current=setTimeout(()=>{eO(c.floating.current,t)||eO(s,t)||n||o(!1)})}}}:{},[u,d,s,c,a,o])},eA=function(e,t){let{open:n}=e,{enabled:o=!0,role:a="dialog"}=void 0===t?{}:t,i=ed(),c=ed();return r.useMemo(()=>{let e={id:i,role:a};return o?"tooltip"===a?{reference:{"aria-describedby":n?i:void 0},floating:e}:{reference:{"aria-expanded":n?"true":"false","aria-haspopup":"alertdialog"===a?"dialog":a,"aria-controls":n?i:void 0,..."listbox"===a&&{role:"combobox"},..."menu"===a&&{id:c}},floating:{...e,..."menu"===a&&{"aria-labelledby":c}}}:{}},[o,a,n,i,c])};function eF(e,t,n){let r=new Map;return{..."floating"===n&&{tabIndex:-1},...e,...t.map(e=>e?e[n]:null).concat(e).reduce((e,t)=>(t&&Object.entries(t).forEach(t=>{let[n,o]=t;if(0===n.indexOf("on")){if(r.has(n)||r.set(n,[]),"function"==typeof o){var a;null==(a=r.get(n))||a.push(o),e[n]=function(){for(var e,t=arguments.length,o=Array(t),a=0;ae(...o))}}}else e[n]=o}),e),{})}}let ez=function(e){void 0===e&&(e=[]);let t=e,n=r.useCallback(t=>eF(t,e,"reference"),t),o=r.useCallback(t=>eF(t,e,"floating"),t),a=r.useCallback(t=>eF(t,e,"item"),e.map(e=>null==e?void 0:e.item));return r.useMemo(()=>({getReferenceProps:n,getFloatingProps:o,getItemProps:a}),[n,o,a])};var eL=n(9250);let e_=e=>{var t,n;let[o,i]=(0,r.useState)(!1),[c,l]=(0,r.useState)(),{x:s,y:u,refs:d,strategy:f,context:p}=function(e){void 0===e&&(e={});let{open:t=!1,onOpenChange:n,nodeId:o}=e,i=function(e){void 0===e&&(e={});let{placement:t="bottom",strategy:n="absolute",middleware:o=[],platform:i,whileElementsMounted:c,open:l}=e,[s,u]=r.useState({x:null,y:null,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[d,f]=r.useState(o);ea(d,o)||f(o);let p=r.useRef(null),m=r.useRef(null),g=r.useRef(s),h=ei(c),v=ei(i),[b,y]=r.useState(null),[x,w]=r.useState(null),E=r.useCallback(e=>{p.current!==e&&(p.current=e,y(e))},[]),C=r.useCallback(e=>{m.current!==e&&(m.current=e,w(e))},[]),S=r.useCallback(()=>{if(!p.current||!m.current)return;let e={placement:t,strategy:n,middleware:d};v.current&&(e.platform=v.current),er(p.current,m.current,e).then(e=>{let t={...e,isPositioned:!0};O.current&&!ea(g.current,t)&&(g.current=t,a.flushSync(()=>{u(t)}))})},[d,t,n,v]);eo(()=>{!1===l&&g.current.isPositioned&&(g.current.isPositioned=!1,u(e=>({...e,isPositioned:!1})))},[l]);let O=r.useRef(!1);eo(()=>(O.current=!0,()=>{O.current=!1}),[]),eo(()=>{if(b&&x){if(h.current)return h.current(b,x,S);S()}},[b,x,S,h]);let Z=r.useMemo(()=>({reference:p,floating:m,setReference:E,setFloating:C}),[E,C]),k=r.useMemo(()=>({reference:b,floating:x}),[b,x]);return r.useMemo(()=>({...s,update:S,refs:Z,elements:k,reference:E,floating:C}),[s,S,Z,k,E,C])}(e),c=eg(),l=r.useRef(null),s=r.useRef({}),u=r.useState(()=>(function(){let e=new Map;return{emit(t,n){var r;null==(r=e.get(t))||r.forEach(e=>e(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){e.set(t,(e.get(t)||[]).filter(e=>e!==n))}}})())[0],[d,f]=r.useState(null),p=r.useCallback(e=>{let t=eb(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),contextElement:e}:e;i.refs.setReference(t)},[i.refs]),m=r.useCallback(e=>{(eb(e)||null===e)&&(l.current=e,f(e)),(eb(i.refs.reference.current)||null===i.refs.reference.current||null!==e&&!eb(e))&&i.refs.setReference(e)},[i.refs]),g=r.useMemo(()=>({...i.refs,setReference:m,setPositionReference:p,domReference:l}),[i.refs,m,p]),h=r.useMemo(()=>({...i.elements,domReference:d}),[i.elements,d]),v=eR(n),b=r.useMemo(()=>({...i,refs:g,elements:h,dataRef:s,nodeId:o,events:u,open:t,onOpenChange:v}),[i,o,u,t,v,g,h]);return ec(()=>{let e=null==c?void 0:c.nodesRef.current.find(e=>e.id===o);e&&(e.context=b)}),r.useMemo(()=>({...i,context:b,refs:g,reference:m,positionReference:p}),[i,g,b,m,p])}({open:o,onOpenChange:t=>{t&&e?l(setTimeout(()=>{i(t)},e)):(clearTimeout(c),i(t))},placement:"top",whileElementsMounted:en,middleware:[{name:"offset",options:5,async fn(e){var t,n;let{x:r,y:o,placement:a,middlewareData:i}=e,c=await H(e,5);return a===(null==(t=i.offset)?void 0:t.placement)&&null!=(n=i.arrow)&&n.alignmentOffset?{}:{x:r+c.x,y:o+c.y,data:{...c,placement:a}}}},{name:"flip",options:t={fallbackAxisSideDirection:"start"},async fn(e){var n,r,o,a,i;let{placement:c,middlewareData:l,rects:s,initialPlacement:u,platform:d,elements:f}=e,{mainAxis:p=!0,crossAxis:m=!0,fallbackPlacements:g,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:b=!0,...y}=M(t,e);if(null!=(n=l.arrow)&&n.alignmentOffset)return{};let x=j(c),w=j(u)===u,E=await (null==d.isRTL?void 0:d.isRTL(f.floating)),C=g||(w||!b?[F(u)]:function(e){let t=F(e);return[A(e),t,A(t)]}(u));g||"none"===v||C.push(...function(e,t,n,r){let o=P(e),a=function(e,t,n){let r=["left","right"],o=["right","left"];switch(e){case"top":case"bottom":if(n)return t?o:r;return t?r:o;case"left":case"right":return t?["top","bottom"]:["bottom","top"];default:return[]}}(j(e),"start"===n,r);return o&&(a=a.map(e=>e+"-"+o),t&&(a=a.concat(a.map(A)))),a}(u,b,v,E));let S=[u,...C],O=await B(e,y),Z=[],k=(null==(r=l.flip)?void 0:r.overflows)||[];if(p&&Z.push(O[x]),m){let e=function(e,t,n){void 0===n&&(n=!1);let r=P(e),o=N(T(e)),a=I(o),i="x"===o?r===(n?"end":"start")?"right":"left":"start"===r?"bottom":"top";return t.reference[a]>t.floating[a]&&(i=F(i)),[i,F(i)]}(c,s,E);Z.push(O[e[0]],O[e[1]])}if(k=[...k,{placement:c,overflows:Z}],!Z.every(e=>e<=0)){let e=((null==(o=l.flip)?void 0:o.index)||0)+1,t=S[e];if(t)return{data:{index:e,overflows:k},reset:{placement:t}};let n=null==(a=k.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!n)switch(h){case"bestFit":{let e=null==(i=k.map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:i[0];e&&(n=e);break}case"initialPlacement":n=u}if(c!==n)return{reset:{placement:n}}}return{}}},(void 0===n&&(n={}),{name:"shift",options:n,async fn(e){let{x:t,y:r,placement:o}=e,{mainAxis:a=!0,crossAxis:i=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=M(n,e),s={x:t,y:r},u=await B(e,l),d=T(j(o)),f=N(d),p=s[f],m=s[d];if(a){let e="y"===f?"top":"left",t="y"===f?"bottom":"right",n=p+u[e],r=p-u[t];p=C(n,E(p,r))}if(i){let e="y"===d?"top":"left",t="y"===d?"bottom":"right",n=m+u[e],r=m-u[t];m=C(n,E(m,r))}let g=c.fn({...e,[f]:p,[d]:m});return{...g,data:{x:g.x-t,y:g.y-r}}}})]}),m=eS(p,{move:!1}),{getReferenceProps:g,getFloatingProps:h}=ez([m,eT(p),eI(p),eA(p,{role:"tooltip"})]);return{tooltipProps:{open:o,x:s,y:u,refs:d,strategy:f,getFloatingProps:h},getReferenceProps:g}},eB=e=>{let{text:t,open:n,x:o,y:a,refs:i,strategy:c,getFloatingProps:l}=e;return n&&t?r.createElement("div",Object.assign({className:(0,eL.q)("max-w-xs text-sm z-20 rounded-tremor-default opacity-100 px-2.5 py-1","text-white bg-tremor-background-emphasis","text-white dark:bg-dark-tremor-background-subtle"),ref:i.setFloating,style:{position:c,top:null!=a?a:0,left:null!=o?o:0}},l()),t):null};eB.displayName="Tooltip"},4942:function(e,t,n){n.d(t,{fr:function(){return r},m:function(){return i},u8:function(){return o},zS:function(){return a}});let r={Slate:"slate",Gray:"gray",Zinc:"zinc",Neutral:"neutral",Stone:"stone",Red:"red",Orange:"orange",Amber:"amber",Yellow:"yellow",Lime:"lime",Green:"green",Emerald:"emerald",Teal:"teal",Cyan:"cyan",Sky:"sky",Blue:"blue",Indigo:"indigo",Violet:"violet",Purple:"purple",Fuchsia:"fuchsia",Pink:"pink",Rose:"rose"},o={XS:"xs",SM:"sm",MD:"md",LG:"lg",XL:"xl"},a={Left:"left",Right:"right"},i={Top:"top",Bottom:"bottom"}},2898:function(e,t,n){n.d(t,{K:function(){return o}});var r=n(4942);let o={canvasBackground:50,lightBackground:100,background:500,darkBackground:600,darkestBackground:800,lightBorder:200,border:500,darkBorder:700,lightRing:200,ring:300,lightText:400,text:500,darkText:700,darkestText:900,icon:500};r.fr.Blue,r.fr.Cyan,r.fr.Sky,r.fr.Indigo,r.fr.Violet,r.fr.Purple,r.fr.Fuchsia,r.fr.Slate,r.fr.Gray,r.fr.Zinc,r.fr.Neutral,r.fr.Stone,r.fr.Red,r.fr.Orange,r.fr.Amber,r.fr.Yellow,r.fr.Lime,r.fr.Green,r.fr.Emerald,r.fr.Teal,r.fr.Pink,r.fr.Rose},9250:function(e,t,n){n.d(t,{q:function(){return z}});var r=/^\[(.+)\]$/;function o(e,t){var n=e;return t.split("-").forEach(function(e){n.nextPart.has(e)||n.nextPart.set(e,{nextPart:new Map,validators:[]}),n=n.nextPart.get(e)}),n}var a=/\s+/;function i(){for(var e,t,n=0,r="";ne&&(t=0,r=n,n=new Map)}return{get:function(e){var t=n.get(e);return void 0!==t?t:void 0!==(t=r.get(e))?(o(e,t),t):void 0},set:function(e,t){n.has(e)?n.set(e,t):o(e,t)}}}(e.cacheSize),splitModifiers:(n=1===(t=e.separator||":").length,a=t[0],i=t.length,function(e){for(var r,o=[],c=0,l=0,s=0;sl?r-l:void 0}}),...(u=e.theme,d=e.prefix,f={nextPart:new Map,validators:[]},(p=Object.entries(e.classGroups),d?p.map(function(e){return[e[0],e[1].map(function(e){return"string"==typeof e?d+e:"object"==typeof e?Object.fromEntries(Object.entries(e).map(function(e){return[d+e[0],e[1]]})):e})]}):p).forEach(function(e){var t=e[0];(function e(t,n,r,a){t.forEach(function(t){if("string"==typeof t){(""===t?n:o(n,t)).classGroupId=r;return}if("function"==typeof t){if(t.isThemeGetter){e(t(a),n,r,a);return}n.validators.push({validator:t,classGroupId:r});return}Object.entries(t).forEach(function(t){var i=t[0];e(t[1],o(n,i),r,a)})})})(e[1],f,t,u)}),c=e.conflictingClassGroups,s=void 0===(l=e.conflictingClassGroupModifiers)?{}:l,{getClassGroupId:function(e){var t=e.split("-");return""===t[0]&&1!==t.length&&t.shift(),function e(t,n){if(0===t.length)return n.classGroupId;var r,o=t[0],a=n.nextPart.get(o),i=a?e(t.slice(1),a):void 0;if(i)return i;if(0!==n.validators.length){var c=t.join("-");return null===(r=n.validators.find(function(e){return(0,e.validator)(c)}))||void 0===r?void 0:r.classGroupId}}(t,f)||function(e){if(r.test(e)){var t=r.exec(e)[1],n=null==t?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}}(e)},getConflictingClassGroupIds:function(e,t){var n=c[e]||[];return t&&s[e]?[].concat(n,s[e]):n}})}}(l.slice(1).reduce(function(e,t){return t(e)},i()))).cache.get,n=e.cache.set,u=d,d(a)};function d(r){var o,i,c,l,s,u=t(r);if(u)return u;var d=(i=(o=e).splitModifiers,c=o.getClassGroupId,l=o.getConflictingClassGroupIds,s=new Set,r.trim().split(a).map(function(e){var t=i(e),n=t.modifiers,r=t.hasImportantModifier,o=t.baseClassName,a=t.maybePostfixModifierPosition,l=c(a?o.substring(0,a):o),s=!!a;if(!l){if(!a||!(l=c(o)))return{isTailwindClass:!1,originalClassName:e};s=!1}var u=(function(e){if(e.length<=1)return e;var t=[],n=[];return e.forEach(function(e){"["===e[0]?(t.push.apply(t,n.sort().concat([e])),n=[]):n.push(e)}),t.push.apply(t,n.sort()),t})(n).join(":");return{isTailwindClass:!0,modifierId:r?u+"!":u,classGroupId:l,originalClassName:e,hasPostfixModifier:s}}).reverse().filter(function(e){if(!e.isTailwindClass)return!0;var t=e.modifierId,n=e.classGroupId,r=e.hasPostfixModifier,o=t+n;return!s.has(o)&&(s.add(o),l(n,r).forEach(function(e){return s.add(t+e)}),!0)}).reverse().map(function(e){return e.originalClassName}).join(" "));return n(r,d),d}return function(){return u(i.apply(null,arguments))}}function l(e){var t=function(t){return t[e]||[]};return t.isThemeGetter=!0,t}var s=/^\[(?:([a-z-]+):)?(.+)\]$/i,u=/^\d+\/\d+$/,d=new Set(["px","full","screen"]),f=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,p=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,m=/^-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;function g(e){return w(e)||d.has(e)||u.test(e)||h(e)}function h(e){return R(e,"length",M)}function v(e){return R(e,"size",j)}function b(e){return R(e,"position",j)}function y(e){return R(e,"url",P)}function x(e){return R(e,"number",w)}function w(e){return!Number.isNaN(Number(e))}function E(e){return e.endsWith("%")&&w(e.slice(0,-1))}function C(e){return N(e)||R(e,"number",N)}function S(e){return s.test(e)}function O(){return!0}function Z(e){return f.test(e)}function k(e){return R(e,"",I)}function R(e,t,n){var r=s.exec(e);return!!r&&(r[1]?r[1]===t:n(r[2]))}function M(e){return p.test(e)}function j(){return!1}function P(e){return e.startsWith("url(")}function N(e){return Number.isInteger(Number(e))}function I(e){return m.test(e)}function T(){var e=l("colors"),t=l("spacing"),n=l("blur"),r=l("brightness"),o=l("borderColor"),a=l("borderRadius"),i=l("borderSpacing"),c=l("borderWidth"),s=l("contrast"),u=l("grayscale"),d=l("hueRotate"),f=l("invert"),p=l("gap"),m=l("gradientColorStops"),R=l("gradientColorStopPositions"),M=l("inset"),j=l("margin"),P=l("opacity"),N=l("padding"),I=l("saturate"),T=l("scale"),A=l("sepia"),F=l("skew"),z=l("space"),L=l("translate"),_=function(){return["auto","contain","none"]},B=function(){return["auto","hidden","clip","visible","scroll"]},H=function(){return["auto",S,t]},D=function(){return[S,t]},W=function(){return["",g]},V=function(){return["auto",w,S]},q=function(){return["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"]},X=function(){return["solid","dashed","dotted","double","none"]},G=function(){return["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity","plus-lighter"]},U=function(){return["start","end","center","between","around","evenly","stretch"]},K=function(){return["","0",S]},$=function(){return["auto","avoid","all","avoid-page","page","left","right","column"]},Y=function(){return[w,x]},Q=function(){return[w,S]};return{cacheSize:500,theme:{colors:[O],spacing:[g],blur:["none","",Z,S],brightness:Y(),borderColor:[e],borderRadius:["none","","full",Z,S],borderSpacing:D(),borderWidth:W(),contrast:Y(),grayscale:K(),hueRotate:Q(),invert:K(),gap:D(),gradientColorStops:[e],gradientColorStopPositions:[E,h],inset:H(),margin:H(),opacity:Y(),padding:D(),saturate:Y(),scale:Y(),sepia:K(),skew:Q(),space:D(),translate:D()},classGroups:{aspect:[{aspect:["auto","square","video",S]}],container:["container"],columns:[{columns:[Z]}],"break-after":[{"break-after":$()}],"break-before":[{"break-before":$()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none"]}],clear:[{clear:["left","right","both","none"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[].concat(q(),[S])}],overflow:[{overflow:B()}],"overflow-x":[{"overflow-x":B()}],"overflow-y":[{"overflow-y":B()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[M]}],"inset-x":[{"inset-x":[M]}],"inset-y":[{"inset-y":[M]}],start:[{start:[M]}],end:[{end:[M]}],top:[{top:[M]}],right:[{right:[M]}],bottom:[{bottom:[M]}],left:[{left:[M]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",C]}],basis:[{basis:H()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",S]}],grow:[{grow:K()}],shrink:[{shrink:K()}],order:[{order:["first","last","none",C]}],"grid-cols":[{"grid-cols":[O]}],"col-start-end":[{col:["auto",{span:["full",C]},S]}],"col-start":[{"col-start":V()}],"col-end":[{"col-end":V()}],"grid-rows":[{"grid-rows":[O]}],"row-start-end":[{row:["auto",{span:[C]},S]}],"row-start":[{"row-start":V()}],"row-end":[{"row-end":V()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",S]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",S]}],gap:[{gap:[p]}],"gap-x":[{"gap-x":[p]}],"gap-y":[{"gap-y":[p]}],"justify-content":[{justify:["normal"].concat(U())}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal"].concat(U(),["baseline"])}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[].concat(U(),["baseline"])}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[N]}],px:[{px:[N]}],py:[{py:[N]}],ps:[{ps:[N]}],pe:[{pe:[N]}],pt:[{pt:[N]}],pr:[{pr:[N]}],pb:[{pb:[N]}],pl:[{pl:[N]}],m:[{m:[j]}],mx:[{mx:[j]}],my:[{my:[j]}],ms:[{ms:[j]}],me:[{me:[j]}],mt:[{mt:[j]}],mr:[{mr:[j]}],mb:[{mb:[j]}],ml:[{ml:[j]}],"space-x":[{"space-x":[z]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[z]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit",S,t]}],"min-w":[{"min-w":["min","max","fit",S,g]}],"max-w":[{"max-w":["0","none","full","min","max","fit","prose",{screen:[Z]},Z,S]}],h:[{h:[S,t,"auto","min","max","fit"]}],"min-h":[{"min-h":["min","max","fit",S,g]}],"max-h":[{"max-h":[S,t,"min","max","fit"]}],"font-size":[{text:["base",Z,h]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",x]}],"font-family":[{font:[O]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractons"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",S]}],"line-clamp":[{"line-clamp":["none",w,x]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",S,g]}],"list-image":[{"list-image":["none",S]}],"list-style-type":[{list:["none","disc","decimal",S]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[P]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[P]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[].concat(X(),["wavy"])}],"text-decoration-thickness":[{decoration:["auto","from-font",g]}],"underline-offset":[{"underline-offset":["auto",S,g]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],indent:[{indent:D()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",S]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",S]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[P]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[].concat(q(),[b])}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",v]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},y]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[R]}],"gradient-via-pos":[{via:[R]}],"gradient-to-pos":[{to:[R]}],"gradient-from":[{from:[m]}],"gradient-via":[{via:[m]}],"gradient-to":[{to:[m]}],rounded:[{rounded:[a]}],"rounded-s":[{"rounded-s":[a]}],"rounded-e":[{"rounded-e":[a]}],"rounded-t":[{"rounded-t":[a]}],"rounded-r":[{"rounded-r":[a]}],"rounded-b":[{"rounded-b":[a]}],"rounded-l":[{"rounded-l":[a]}],"rounded-ss":[{"rounded-ss":[a]}],"rounded-se":[{"rounded-se":[a]}],"rounded-ee":[{"rounded-ee":[a]}],"rounded-es":[{"rounded-es":[a]}],"rounded-tl":[{"rounded-tl":[a]}],"rounded-tr":[{"rounded-tr":[a]}],"rounded-br":[{"rounded-br":[a]}],"rounded-bl":[{"rounded-bl":[a]}],"border-w":[{border:[c]}],"border-w-x":[{"border-x":[c]}],"border-w-y":[{"border-y":[c]}],"border-w-s":[{"border-s":[c]}],"border-w-e":[{"border-e":[c]}],"border-w-t":[{"border-t":[c]}],"border-w-r":[{"border-r":[c]}],"border-w-b":[{"border-b":[c]}],"border-w-l":[{"border-l":[c]}],"border-opacity":[{"border-opacity":[P]}],"border-style":[{border:[].concat(X(),["hidden"])}],"divide-x":[{"divide-x":[c]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[c]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[P]}],"divide-style":[{divide:X()}],"border-color":[{border:[o]}],"border-color-x":[{"border-x":[o]}],"border-color-y":[{"border-y":[o]}],"border-color-t":[{"border-t":[o]}],"border-color-r":[{"border-r":[o]}],"border-color-b":[{"border-b":[o]}],"border-color-l":[{"border-l":[o]}],"divide-color":[{divide:[o]}],"outline-style":[{outline:[""].concat(X())}],"outline-offset":[{"outline-offset":[S,g]}],"outline-w":[{outline:[g]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:W()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[P]}],"ring-offset-w":[{"ring-offset":[g]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Z,k]}],"shadow-color":[{shadow:[O]}],opacity:[{opacity:[P]}],"mix-blend":[{"mix-blend":G()}],"bg-blend":[{"bg-blend":G()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[s]}],"drop-shadow":[{"drop-shadow":["","none",Z,S]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[d]}],invert:[{invert:[f]}],saturate:[{saturate:[I]}],sepia:[{sepia:[A]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[s]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[d]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[P]}],"backdrop-saturate":[{"backdrop-saturate":[I]}],"backdrop-sepia":[{"backdrop-sepia":[A]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",S]}],duration:[{duration:Q()}],ease:[{ease:["linear","in","out","in-out",S]}],delay:[{delay:Q()}],animate:[{animate:["none","spin","ping","pulse","bounce",S]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[T]}],"scale-x":[{"scale-x":[T]}],"scale-y":[{"scale-y":[T]}],rotate:[{rotate:[C,S]}],"translate-x":[{"translate-x":[L]}],"translate-y":[{"translate-y":[L]}],"skew-x":[{"skew-x":[F]}],"skew-y":[{"skew-y":[F]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",S]}],accent:[{accent:["auto",e]}],appearance:["appearance-none"],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",S]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":D()}],"scroll-mx":[{"scroll-mx":D()}],"scroll-my":[{"scroll-my":D()}],"scroll-ms":[{"scroll-ms":D()}],"scroll-me":[{"scroll-me":D()}],"scroll-mt":[{"scroll-mt":D()}],"scroll-mr":[{"scroll-mr":D()}],"scroll-mb":[{"scroll-mb":D()}],"scroll-ml":[{"scroll-ml":D()}],"scroll-p":[{"scroll-p":D()}],"scroll-px":[{"scroll-px":D()}],"scroll-py":[{"scroll-py":D()}],"scroll-ps":[{"scroll-ps":D()}],"scroll-pe":[{"scroll-pe":D()}],"scroll-pt":[{"scroll-pt":D()}],"scroll-pr":[{"scroll-pr":D()}],"scroll-pb":[{"scroll-pb":D()}],"scroll-pl":[{"scroll-pl":D()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","pinch-zoom","manipulation",{pan:["x","left","right","y","up","down"]}]}],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",S]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[g,x]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}}var A=Object.prototype.hasOwnProperty,F=new Set(["string","number","boolean"]);let z=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;rr.includes(e);function a(e){return t=>{e.forEach(e=>{"function"==typeof e?e(t):null!=e&&(e.current=t)})}}function i(e){return t=>"tremor-".concat(e,"-").concat(t)}function c(e,t){let n=o(e);if("white"===e||"black"===e||"transparent"===e||!t||!n){let t=e.includes("#")||e.includes("--")||e.includes("rgb")?"[".concat(e,"]"):e;return{bgColor:"bg-".concat(t),hoverBgColor:"hover:bg-".concat(t),selectBgColor:"ui-selected:bg-".concat(t),textColor:"text-".concat(t),selectTextColor:"ui-selected:text-".concat(t),hoverTextColor:"hover:text-".concat(t),borderColor:"border-".concat(t),selectBorderColor:"ui-selected:border-".concat(t),hoverBorderColor:"hover:border-".concat(t),ringColor:"ring-".concat(t),strokeColor:"stroke-".concat(t),fillColor:"fill-".concat(t)}}return{bgColor:"bg-".concat(e,"-").concat(t),selectBgColor:"ui-selected:bg-".concat(e,"-").concat(t),hoverBgColor:"hover:bg-".concat(e,"-").concat(t),textColor:"text-".concat(e,"-").concat(t),selectTextColor:"ui-selected:text-".concat(e,"-").concat(t),hoverTextColor:"hover:text-".concat(e,"-").concat(t),borderColor:"border-".concat(e,"-").concat(t),selectBorderColor:"ui-selected:border-".concat(e,"-").concat(t),hoverBorderColor:"hover:border-".concat(e,"-").concat(t),ringColor:"ring-".concat(e,"-").concat(t),strokeColor:"stroke-".concat(e,"-").concat(t),fillColor:"fill-".concat(e,"-").concat(t)}}},1467:function(e,t,n){n.d(t,{i:function(){return c}});var r=n(4090),o=n(4329),a=n(4165),i=n(7499);function c(e){return t=>r.createElement(a.ZP,{theme:{token:{motion:!1,zIndexPopupBase:0}}},r.createElement(e,Object.assign({},t)))}t.Z=(e,t,n,a)=>c(c=>{let{prefixCls:l,style:s}=c,u=r.useRef(null),[d,f]=r.useState(0),[p,m]=r.useState(0),[g,h]=(0,o.Z)(!1,{value:c.open}),{getPrefixCls:v}=r.useContext(i.E_),b=v(t||"select",l);r.useEffect(()=>{if(h(!0),"undefined"!=typeof ResizeObserver){let e=new ResizeObserver(e=>{let t=e[0].target;f(t.offsetHeight+8),m(t.offsetWidth)}),t=setInterval(()=>{var r;let o=n?".".concat(n(b)):".".concat(b,"-dropdown"),a=null===(r=u.current)||void 0===r?void 0:r.querySelector(o);a&&(clearInterval(t),e.observe(a))},10);return()=>{clearInterval(t),e.disconnect()}}},[]);let y=Object.assign(Object.assign({},c),{style:Object.assign(Object.assign({},s),{margin:0}),open:g,visible:g,getPopupContainer:()=>u.current});return a&&(y=a(y)),r.createElement("div",{ref:u,style:{paddingBottom:d,position:"relative",minWidth:p}},r.createElement(e,Object.assign({},y)))})},1761:function(e,t,n){n.d(t,{Cn:function(){return s},u6:function(){return i}});var r=n(4090),o=n(4750),a=n(6718);let i=1e3,c={Modal:100,Drawer:100,Popover:100,Popconfirm:100,Tooltip:100,Tour:100},l={SelectLike:50,Dropdown:50,DatePicker:50,Menu:50,ImagePreview:1};function s(e,t){let[,n]=(0,o.ZP)(),s=r.useContext(a.Z);if(void 0!==t)return[t,t];let u=null!=s?s:0;return e in c?(u+=(s?0:n.zIndexPopupBase)+c[e],u=Math.min(u,n.zIndexPopupBase+i)):u+=l[e],[void 0===s?t:u,u]}},7387:function(e,t,n){n.d(t,{m:function(){return c}});let r=()=>({height:0,opacity:0}),o=e=>{let{scrollHeight:t}=e;return{height:t,opacity:1}},a=e=>({height:e?e.offsetHeight:0}),i=(e,t)=>(null==t?void 0:t.deadline)===!0||"height"===t.propertyName,c=(e,t,n)=>void 0!==n?n:"".concat(e,"-").concat(t);t.Z=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"ant";return{motionName:"".concat(e,"-motion-collapse"),onAppearStart:r,onEnterStart:r,onAppearActive:o,onEnterActive:o,onLeaveStart:a,onLeaveActive:r,onAppearEnd:i,onEnterEnd:i,onLeaveEnd:i,motionDeadline:500}}},5823:function(e,t,n){n.d(t,{M2:function(){return i},Tm:function(){return c},l$:function(){return a}});var r,o=n(4090);let{isValidElement:a}=r||(r=n.t(o,2));function i(e){return e&&a(e)&&e.type===o.Fragment}function c(e,t){return a(e)?o.cloneElement(e,"function"==typeof t?t(e.props||{}):t):e}},7794:function(e,t,n){n.d(t,{F:function(){return i},Z:function(){return a}});var r=n(6480),o=n.n(r);function a(e,t,n){return o()({["".concat(e,"-status-success")]:"success"===t,["".concat(e,"-status-warning")]:"warning"===t,["".concat(e,"-status-error")]:"error"===t,["".concat(e,"-status-validating")]:"validating"===t,["".concat(e,"-has-feedback")]:n})}let i=(e,t)=>t||e},9233:function(e,t,n){n.d(t,{G8:function(){return a},ln:function(){return i}});var r=n(4090);function o(){}n(3850);let a=r.createContext({}),i=()=>{let e=()=>{};return e.deprecated=o,e}},6718:function(e,t,n){let r=n(4090).createContext(void 0);t.Z=r},1350:function(e,t,n){n.d(t,{Te:function(){return s},aG:function(){return i},hU:function(){return u},nx:function(){return c}});var r=n(4090),o=n(5823);let a=/^[\u4e00-\u9fa5]{2}$/,i=a.test.bind(a);function c(e){return"danger"===e?{danger:!0}:{type:e}}function l(e){return"string"==typeof e}function s(e){return"text"===e||"link"===e}function u(e,t){let n=!1,a=[];return r.Children.forEach(e,e=>{let t=typeof e,r="string"===t||"number"===t;if(n&&r){let t=a.length-1,n=a[t];a[t]="".concat(n).concat(e)}else a.push(e);n=r}),r.Children.map(a,e=>(function(e,t){if(null==e)return;let n=t?" ":"";return"string"!=typeof e&&"number"!=typeof e&&l(e.type)&&i(e.props.children)?(0,o.Tm)(e,{children:e.props.children.split("").join(n)}):l(e)?i(e)?r.createElement("span",null,e.split("").join(n)):r.createElement("span",null,e):(0,o.M2)(e)?r.createElement("span",null,e):e})(e,t))}},1861:function(e,t,n){n.d(t,{ZP:function(){return ev}});var r=n(4090),o=n(6480),a=n.n(o),i=n(5704),c=n(4084),l=n(3193),s=n(7499),u=n(5823),d=n(6585);let f=e=>{let{componentCls:t,colorPrimary:n}=e;return{[t]:{position:"absolute",background:"transparent",pointerEvents:"none",boxSizing:"border-box",color:"var(--wave-color, ".concat(n,")"),boxShadow:"0 0 0 0 currentcolor",opacity:.2,"&.wave-motion-appear":{transition:["box-shadow 0.4s ".concat(e.motionEaseOutCirc),"opacity 2s ".concat(e.motionEaseOutCirc)].join(","),"&-active":{boxShadow:"0 0 0 6px currentcolor",opacity:0},"&.wave-quick":{transition:["box-shadow 0.3s ".concat(e.motionEaseInOut),"opacity 0.35s ".concat(e.motionEaseInOut)].join(",")}}}}};var p=(0,d.ZP)("Wave",e=>[f(e)]),m=n(8563),g=n(9223),h=n(9367),v=n(7274);function b(e){return e&&"#fff"!==e&&"#ffffff"!==e&&"rgb(255, 255, 255)"!==e&&"rgba(255, 255, 255, 1)"!==e&&function(e){let t=(e||"").match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);return!t||!t[1]||!t[2]||!t[3]||!(t[1]===t[2]&&t[2]===t[3])}(e)&&!/rgba\((?:\d*, ){3}0\)/.test(e)&&"transparent"!==e}let y="ant-wave-target";function x(e){return Number.isNaN(e)?0:e}let w=e=>{let{className:t,target:n,component:o}=e,i=r.useRef(null),[c,l]=r.useState(null),[s,u]=r.useState([]),[d,f]=r.useState(0),[p,m]=r.useState(0),[w,E]=r.useState(0),[C,S]=r.useState(0),[O,Z]=r.useState(!1),k={left:d,top:p,width:w,height:C,borderRadius:s.map(e=>"".concat(e,"px")).join(" ")};function R(){let e=getComputedStyle(n);l(function(e){let{borderTopColor:t,borderColor:n,backgroundColor:r}=getComputedStyle(e);return b(t)?t:b(n)?n:b(r)?r:null}(n));let t="static"===e.position,{borderLeftWidth:r,borderTopWidth:o}=e;f(t?n.offsetLeft:x(-parseFloat(r))),m(t?n.offsetTop:x(-parseFloat(o))),E(n.offsetWidth),S(n.offsetHeight);let{borderTopLeftRadius:a,borderTopRightRadius:i,borderBottomLeftRadius:c,borderBottomRightRadius:s}=e;u([a,i,s,c].map(e=>x(parseFloat(e))))}if(c&&(k["--wave-color"]=c),r.useEffect(()=>{if(n){let e;let t=(0,g.Z)(()=>{R(),Z(!0)});return"undefined"!=typeof ResizeObserver&&(e=new ResizeObserver(R)).observe(n),()=>{g.Z.cancel(t),null==e||e.disconnect()}}},[]),!O)return null;let M=("Checkbox"===o||"Radio"===o)&&(null==n?void 0:n.classList.contains(y));return r.createElement(h.ZP,{visible:!0,motionAppear:!0,motionName:"wave-motion",motionDeadline:5e3,onAppearEnd:(e,t)=>{var n;if(t.deadline||"opacity"===t.propertyName){let e=null===(n=i.current)||void 0===n?void 0:n.parentElement;(0,v.v)(e).then(()=>{null==e||e.remove()})}return!1}},e=>{let{className:n}=e;return r.createElement("div",{ref:i,className:a()(t,{"wave-quick":M},n),style:k})})};var E=(e,t)=>{var n;let{component:o}=t;if("Checkbox"===o&&!(null===(n=e.querySelector("input"))||void 0===n?void 0:n.checked))return;let a=document.createElement("div");a.style.position="absolute",a.style.left="0px",a.style.top="0px",null==e||e.insertBefore(a,null==e?void 0:e.firstChild),(0,v.s)(r.createElement(w,Object.assign({},t,{target:e})),a)},C=n(4750),S=e=>{let{children:t,disabled:n,component:o}=e,{getPrefixCls:i}=(0,r.useContext)(s.E_),d=(0,r.useRef)(null),f=i("wave"),[,h]=p(f),v=function(e,t,n){let{wave:o}=r.useContext(s.E_),[,a,i]=(0,C.ZP)(),c=(0,m.zX)(r=>{let c=e.current;if((null==o?void 0:o.disabled)||!c)return;let l=c.querySelector(".".concat(y))||c,{showEffect:s}=o||{};(s||E)(l,{className:t,token:a,component:n,event:r,hashId:i})}),l=r.useRef();return e=>{g.Z.cancel(l.current),l.current=(0,g.Z)(()=>{c(e)})}}(d,a()(f,h),o);if(r.useEffect(()=>{let e=d.current;if(!e||1!==e.nodeType||n)return;let t=t=>{!(0,l.Z)(t.target)||!e.getAttribute||e.getAttribute("disabled")||e.disabled||e.className.includes("disabled")||e.className.includes("-leave")||v(t)};return e.addEventListener("click",t,!0),()=>{e.removeEventListener("click",t,!0)}},[n]),!r.isValidElement(t))return null!=t?t:null;let b=(0,c.Yr)(t)?(0,c.sQ)(t.ref,d):d;return(0,u.Tm)(t,{ref:b})},O=n(7094),Z=n(4629),k=n(2801),R=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let M=r.createContext(void 0);var j=n(1350);let P=(0,r.forwardRef)((e,t)=>{let{className:n,style:o,children:i,prefixCls:c}=e,l=a()("".concat(c,"-icon"),n);return r.createElement("span",{ref:t,className:l,style:o},i)});var N=n(9334);let I=(0,r.forwardRef)((e,t)=>{let{prefixCls:n,className:o,style:i,iconClassName:c}=e,l=a()("".concat(n,"-loading-icon"),o);return r.createElement(P,{prefixCls:n,className:l,style:i,ref:t},r.createElement(N.Z,{className:c}))}),T=()=>({width:0,opacity:0,transform:"scale(0)"}),A=e=>({width:e.scrollWidth,opacity:1,transform:"scale(1)"});var F=e=>{let{prefixCls:t,loading:n,existIcon:o,className:a,style:i}=e,c=!!n;return o?r.createElement(I,{prefixCls:t,className:a,style:i}):r.createElement(h.ZP,{visible:c,motionName:"".concat(t,"-loading-icon-motion"),motionLeave:c,removeOnLeave:!0,onAppearStart:T,onAppearActive:A,onEnterStart:T,onEnterActive:A,onLeaveStart:A,onLeaveActive:T},(e,n)=>{let{className:o,style:c}=e;return r.createElement(I,{prefixCls:t,className:a,style:Object.assign(Object.assign({},i),c),ref:n,iconClassName:o})})},z=n(8985),L=n(1303),_=n(316);let B=(e,t)=>({["> span, > ".concat(e)]:{"&:not(:last-child)":{["&, & > ".concat(e)]:{"&:not(:disabled)":{borderInlineEndColor:t}}},"&:not(:first-child)":{["&, & > ".concat(e)]:{"&:not(:disabled)":{borderInlineStartColor:t}}}}});var H=e=>{let{componentCls:t,fontSize:n,lineWidth:r,groupBorderColor:o,colorErrorHover:a}=e;return{["".concat(t,"-group")]:[{position:"relative",display:"inline-flex",["> span, > ".concat(t)]:{"&:not(:last-child)":{["&, & > ".concat(t)]:{borderStartEndRadius:0,borderEndEndRadius:0}},"&:not(:first-child)":{marginInlineStart:e.calc(r).mul(-1).equal(),["&, & > ".concat(t)]:{borderStartStartRadius:0,borderEndStartRadius:0}}},[t]:{position:"relative",zIndex:1,"&:hover,\n &:focus,\n &:active":{zIndex:2},"&[disabled]":{zIndex:0}},["".concat(t,"-icon-only")]:{fontSize:n}},B("".concat(t,"-primary"),o),B("".concat(t,"-danger"),a)]}},D=n(9202);let W=e=>{let{paddingInline:t,onlyIconSize:n,paddingBlock:r}=e;return(0,_.TS)(e,{buttonPaddingHorizontal:t,buttonPaddingVertical:r,buttonIconOnlyFontSize:n})},V=e=>{var t,n,r,o,a,i;let c=null!==(t=e.contentFontSize)&&void 0!==t?t:e.fontSize,l=null!==(n=e.contentFontSizeSM)&&void 0!==n?n:e.fontSize,s=null!==(r=e.contentFontSizeLG)&&void 0!==r?r:e.fontSizeLG,u=null!==(o=e.contentLineHeight)&&void 0!==o?o:(0,D.D)(c),d=null!==(a=e.contentLineHeightSM)&&void 0!==a?a:(0,D.D)(l),f=null!==(i=e.contentLineHeightLG)&&void 0!==i?i:(0,D.D)(s);return{fontWeight:400,defaultShadow:"0 ".concat(e.controlOutlineWidth,"px 0 ").concat(e.controlTmpOutline),primaryShadow:"0 ".concat(e.controlOutlineWidth,"px 0 ").concat(e.controlOutline),dangerShadow:"0 ".concat(e.controlOutlineWidth,"px 0 ").concat(e.colorErrorOutline),primaryColor:e.colorTextLightSolid,dangerColor:e.colorTextLightSolid,borderColorDisabled:e.colorBorder,defaultGhostColor:e.colorBgContainer,ghostBg:"transparent",defaultGhostBorderColor:e.colorBgContainer,paddingInline:e.paddingContentHorizontal-e.lineWidth,paddingInlineLG:e.paddingContentHorizontal-e.lineWidth,paddingInlineSM:8-e.lineWidth,onlyIconSize:e.fontSizeLG,onlyIconSizeSM:e.fontSizeLG-2,onlyIconSizeLG:e.fontSizeLG+2,groupBorderColor:e.colorPrimaryHover,linkHoverBg:"transparent",textHoverBg:e.colorBgTextHover,defaultColor:e.colorText,defaultBg:e.colorBgContainer,defaultBorderColor:e.colorBorder,defaultBorderColorDisabled:e.colorBorder,contentFontSize:c,contentFontSizeSM:l,contentFontSizeLG:s,contentLineHeight:u,contentLineHeightSM:d,contentLineHeightLG:f,paddingBlock:Math.max((e.controlHeight-c*u)/2-e.lineWidth,0),paddingBlockSM:Math.max((e.controlHeightSM-l*d)/2-e.lineWidth,0),paddingBlockLG:Math.max((e.controlHeightLG-s*f)/2-e.lineWidth,0)}},q=e=>{let{componentCls:t,iconCls:n,fontWeight:r}=e;return{[t]:{outline:"none",position:"relative",display:"inline-block",fontWeight:r,whiteSpace:"nowrap",textAlign:"center",backgroundImage:"none",background:"transparent",border:"".concat((0,z.bf)(e.lineWidth)," ").concat(e.lineType," transparent"),cursor:"pointer",transition:"all ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut),userSelect:"none",touchAction:"manipulation",color:e.colorText,"&:disabled > *":{pointerEvents:"none"},"> span":{display:"inline-block"},["".concat(t,"-icon")]:{lineHeight:0},["> ".concat(n," + span, > span + ").concat(n)]:{marginInlineStart:e.marginXS},["&:not(".concat(t,"-icon-only) > ").concat(t,"-icon")]:{["&".concat(t,"-loading-icon, &:not(:last-child)")]:{marginInlineEnd:e.marginXS}},"> a":{color:"currentColor"},"&:not(:disabled)":Object.assign({},(0,L.Qy)(e)),["&".concat(t,"-two-chinese-chars::first-letter")]:{letterSpacing:"0.34em"},["&".concat(t,"-two-chinese-chars > *:not(").concat(n,")")]:{marginInlineEnd:"-0.34em",letterSpacing:"0.34em"},["&-icon-only".concat(t,"-compact-item")]:{flex:"none"}}}},X=(e,t,n)=>({["&:not(:disabled):not(".concat(e,"-disabled)")]:{"&:hover":t,"&:active":n}}),G=e=>({minWidth:e.controlHeight,paddingInlineStart:0,paddingInlineEnd:0,borderRadius:"50%"}),U=e=>({borderRadius:e.controlHeight,paddingInlineStart:e.calc(e.controlHeight).div(2).equal(),paddingInlineEnd:e.calc(e.controlHeight).div(2).equal()}),K=e=>({cursor:"not-allowed",borderColor:e.borderColorDisabled,color:e.colorTextDisabled,background:e.colorBgContainerDisabled,boxShadow:"none"}),$=(e,t,n,r,o,a,i,c)=>({["&".concat(e,"-background-ghost")]:Object.assign(Object.assign({color:n||void 0,background:t,borderColor:r||void 0,boxShadow:"none"},X(e,Object.assign({background:t},i),Object.assign({background:t},c))),{"&:disabled":{cursor:"not-allowed",color:o||void 0,borderColor:a||void 0}})}),Y=e=>({["&:disabled, &".concat(e.componentCls,"-disabled")]:Object.assign({},K(e))}),Q=e=>Object.assign({},Y(e)),J=e=>({["&:disabled, &".concat(e.componentCls,"-disabled")]:{cursor:"not-allowed",color:e.colorTextDisabled}}),ee=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Q(e)),{background:e.defaultBg,borderColor:e.defaultBorderColor,color:e.defaultColor,boxShadow:e.defaultShadow}),X(e.componentCls,{color:e.colorPrimaryHover,borderColor:e.colorPrimaryHover},{color:e.colorPrimaryActive,borderColor:e.colorPrimaryActive})),$(e.componentCls,e.ghostBg,e.defaultGhostColor,e.defaultGhostBorderColor,e.colorTextDisabled,e.colorBorder)),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign(Object.assign({color:e.colorError,borderColor:e.colorError},X(e.componentCls,{color:e.colorErrorHover,borderColor:e.colorErrorBorderHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),$(e.componentCls,e.ghostBg,e.colorError,e.colorError,e.colorTextDisabled,e.colorBorder)),Y(e))}),et=e=>Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Q(e)),{color:e.primaryColor,background:e.colorPrimary,boxShadow:e.primaryShadow}),X(e.componentCls,{color:e.colorTextLightSolid,background:e.colorPrimaryHover},{color:e.colorTextLightSolid,background:e.colorPrimaryActive})),$(e.componentCls,e.ghostBg,e.colorPrimary,e.colorPrimary,e.colorTextDisabled,e.colorBorder,{color:e.colorPrimaryHover,borderColor:e.colorPrimaryHover},{color:e.colorPrimaryActive,borderColor:e.colorPrimaryActive})),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign(Object.assign({background:e.colorError,boxShadow:e.dangerShadow,color:e.dangerColor},X(e.componentCls,{background:e.colorErrorHover},{background:e.colorErrorActive})),$(e.componentCls,e.ghostBg,e.colorError,e.colorError,e.colorTextDisabled,e.colorBorder,{color:e.colorErrorHover,borderColor:e.colorErrorHover},{color:e.colorErrorActive,borderColor:e.colorErrorActive})),Y(e))}),en=e=>Object.assign(Object.assign({},ee(e)),{borderStyle:"dashed"}),er=e=>Object.assign(Object.assign(Object.assign({color:e.colorLink},X(e.componentCls,{color:e.colorLinkHover,background:e.linkHoverBg},{color:e.colorLinkActive})),J(e)),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign({color:e.colorError},X(e.componentCls,{color:e.colorErrorHover},{color:e.colorErrorActive})),J(e))}),eo=e=>Object.assign(Object.assign(Object.assign({},X(e.componentCls,{color:e.colorText,background:e.textHoverBg},{color:e.colorText,background:e.colorBgTextActive})),J(e)),{["&".concat(e.componentCls,"-dangerous")]:Object.assign(Object.assign({color:e.colorError},J(e)),X(e.componentCls,{color:e.colorErrorHover,background:e.colorErrorBg},{color:e.colorErrorHover,background:e.colorErrorBg}))}),ea=e=>{let{componentCls:t}=e;return{["".concat(t,"-default")]:ee(e),["".concat(t,"-primary")]:et(e),["".concat(t,"-dashed")]:en(e),["".concat(t,"-link")]:er(e),["".concat(t,"-text")]:eo(e),["".concat(t,"-ghost")]:$(e.componentCls,e.ghostBg,e.colorBgContainer,e.colorBgContainer,e.colorTextDisabled,e.colorBorder)}},ei=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",{componentCls:n,controlHeight:r,fontSize:o,lineHeight:a,borderRadius:i,buttonPaddingHorizontal:c,iconCls:l,buttonPaddingVertical:s}=e,u="".concat(n,"-icon-only");return[{["".concat(n).concat(t)]:{fontSize:o,lineHeight:a,height:r,padding:"".concat((0,z.bf)(s)," ").concat((0,z.bf)(c)),borderRadius:i,["&".concat(u)]:{width:r,paddingInlineStart:0,paddingInlineEnd:0,["&".concat(n,"-round")]:{width:"auto"},[l]:{fontSize:e.buttonIconOnlyFontSize}},["&".concat(n,"-loading")]:{opacity:e.opacityLoading,cursor:"default"},["".concat(n,"-loading-icon")]:{transition:"width ".concat(e.motionDurationSlow," ").concat(e.motionEaseInOut,", opacity ").concat(e.motionDurationSlow," ").concat(e.motionEaseInOut)}}},{["".concat(n).concat(n,"-circle").concat(t)]:G(e)},{["".concat(n).concat(n,"-round").concat(t)]:U(e)}]},ec=e=>ei((0,_.TS)(e,{fontSize:e.contentFontSize,lineHeight:e.contentLineHeight})),el=e=>ei((0,_.TS)(e,{controlHeight:e.controlHeightSM,fontSize:e.contentFontSizeSM,lineHeight:e.contentLineHeightSM,padding:e.paddingXS,buttonPaddingHorizontal:e.paddingInlineSM,buttonPaddingVertical:e.paddingBlockSM,borderRadius:e.borderRadiusSM,buttonIconOnlyFontSize:e.onlyIconSizeSM}),"".concat(e.componentCls,"-sm")),es=e=>ei((0,_.TS)(e,{controlHeight:e.controlHeightLG,fontSize:e.contentFontSizeLG,lineHeight:e.contentLineHeightLG,buttonPaddingHorizontal:e.paddingInlineLG,buttonPaddingVertical:e.paddingBlockLG,borderRadius:e.borderRadiusLG,buttonIconOnlyFontSize:e.onlyIconSizeLG}),"".concat(e.componentCls,"-lg")),eu=e=>{let{componentCls:t}=e;return{[t]:{["&".concat(t,"-block")]:{width:"100%"}}}};var ed=(0,d.I$)("Button",e=>{let t=W(e);return[q(t),el(t),ec(t),es(t),eu(t),ea(t),H(t)]},V,{unitless:{fontWeight:!0,contentLineHeight:!0,contentLineHeightSM:!0,contentLineHeightLG:!0}}),ef=n(2288);let ep=e=>{let{componentCls:t,calc:n}=e;return{[t]:{["&-compact-item".concat(t,"-primary")]:{["&:not([disabled]) + ".concat(t,"-compact-item").concat(t,"-primary:not([disabled])")]:{position:"relative","&:before":{position:"absolute",top:n(e.lineWidth).mul(-1).equal(),insetInlineStart:n(e.lineWidth).mul(-1).equal(),display:"inline-block",width:e.lineWidth,height:"calc(100% + ".concat((0,z.bf)(e.lineWidth)," * 2)"),backgroundColor:e.colorPrimaryHover,content:'""'}}},"&-compact-vertical-item":{["&".concat(t,"-primary")]:{["&:not([disabled]) + ".concat(t,"-compact-vertical-item").concat(t,"-primary:not([disabled])")]:{position:"relative","&:before":{position:"absolute",top:n(e.lineWidth).mul(-1).equal(),insetInlineStart:n(e.lineWidth).mul(-1).equal(),display:"inline-block",width:"calc(100% + ".concat((0,z.bf)(e.lineWidth)," * 2)"),height:e.lineWidth,backgroundColor:e.colorPrimaryHover,content:'""'}}}}}}};var em=(0,d.bk)(["Button","compact"],e=>{let t=W(e);return[(0,ef.c)(t),function(e){var t;let n="".concat(e.componentCls,"-compact-vertical");return{[n]:Object.assign(Object.assign({},{["&-item:not(".concat(n,"-last-item)")]:{marginBottom:e.calc(e.lineWidth).mul(-1).equal()},"&-item":{"&:hover,&:focus,&:active":{zIndex:2},"&[disabled]":{zIndex:0}}}),(t=e.componentCls,{["&-item:not(".concat(n,"-first-item):not(").concat(n,"-last-item)")]:{borderRadius:0},["&-item".concat(n,"-first-item:not(").concat(n,"-last-item)")]:{["&, &".concat(t,"-sm, &").concat(t,"-lg")]:{borderEndEndRadius:0,borderEndStartRadius:0}},["&-item".concat(n,"-last-item:not(").concat(n,"-first-item)")]:{["&, &".concat(t,"-sm, &").concat(t,"-lg")]:{borderStartStartRadius:0,borderStartEndRadius:0}}}))}}(t),ep(t)]},V),eg=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let eh=(0,r.forwardRef)((e,t)=>{var n,o;let{loading:l=!1,prefixCls:u,type:d="default",danger:f,shape:p="default",size:m,styles:g,disabled:h,className:v,rootClassName:b,children:y,icon:x,ghost:w=!1,block:E=!1,htmlType:C="button",classNames:R,style:N={}}=e,I=eg(e,["loading","prefixCls","type","danger","shape","size","styles","disabled","className","rootClassName","children","icon","ghost","block","htmlType","classNames","style"]),{getPrefixCls:T,autoInsertSpaceInButton:A,direction:z,button:L}=(0,r.useContext)(s.E_),_=T("btn",u),[B,H,D]=ed(_),W=(0,r.useContext)(O.Z),V=null!=h?h:W,q=(0,r.useContext)(M),X=(0,r.useMemo)(()=>(function(e){if("object"==typeof e&&e){let t=null==e?void 0:e.delay;return{loading:(t=Number.isNaN(t)||"number"!=typeof t?0:t)<=0,delay:t}}return{loading:!!e,delay:0}})(l),[l]),[G,U]=(0,r.useState)(X.loading),[K,$]=(0,r.useState)(!1),Y=(0,r.createRef)(),Q=(0,c.sQ)(t,Y),J=1===r.Children.count(y)&&!x&&!(0,j.Te)(d);(0,r.useEffect)(()=>{let e=null;return X.delay>0?e=setTimeout(()=>{e=null,U(!0)},X.delay):U(X.loading),function(){e&&(clearTimeout(e),e=null)}},[X]),(0,r.useEffect)(()=>{if(!Q||!Q.current||!1===A)return;let e=Q.current.textContent;J&&(0,j.aG)(e)?K||$(!0):K&&$(!1)},[Q]);let ee=t=>{let{onClick:n}=e;if(G||V){t.preventDefault();return}null==n||n(t)},et=!1!==A,{compactSize:en,compactItemClassnames:er}=(0,k.ri)(_,z),eo=(0,Z.Z)(e=>{var t,n;return null!==(n=null!==(t=null!=m?m:en)&&void 0!==t?t:q)&&void 0!==n?n:e}),ea=eo&&({large:"lg",small:"sm",middle:void 0})[eo]||"",ei=G?"loading":x,ec=(0,i.Z)(I,["navigate"]),el=a()(_,H,D,{["".concat(_,"-").concat(p)]:"default"!==p&&p,["".concat(_,"-").concat(d)]:d,["".concat(_,"-").concat(ea)]:ea,["".concat(_,"-icon-only")]:!y&&0!==y&&!!ei,["".concat(_,"-background-ghost")]:w&&!(0,j.Te)(d),["".concat(_,"-loading")]:G,["".concat(_,"-two-chinese-chars")]:K&&et&&!G,["".concat(_,"-block")]:E,["".concat(_,"-dangerous")]:!!f,["".concat(_,"-rtl")]:"rtl"===z},er,v,b,null==L?void 0:L.className),es=Object.assign(Object.assign({},null==L?void 0:L.style),N),eu=a()(null==R?void 0:R.icon,null===(n=null==L?void 0:L.classNames)||void 0===n?void 0:n.icon),ef=Object.assign(Object.assign({},(null==g?void 0:g.icon)||{}),(null===(o=null==L?void 0:L.styles)||void 0===o?void 0:o.icon)||{}),ep=x&&!G?r.createElement(P,{prefixCls:_,className:eu,style:ef},x):r.createElement(F,{existIcon:!!x,prefixCls:_,loading:!!G}),eh=y||0===y?(0,j.hU)(y,J&&et):null;if(void 0!==ec.href)return B(r.createElement("a",Object.assign({},ec,{className:a()(el,{["".concat(_,"-disabled")]:V}),href:V?void 0:ec.href,style:es,onClick:ee,ref:Q,tabIndex:V?-1:0}),ep,eh));let ev=r.createElement("button",Object.assign({},I,{type:C,className:el,style:es,onClick:ee,disabled:V,ref:Q}),ep,eh,!!er&&r.createElement(em,{key:"compact",prefixCls:_}));return(0,j.Te)(d)||(ev=r.createElement(S,{component:"Button",disabled:!!G},ev)),B(ev)});eh.Group=e=>{let{getPrefixCls:t,direction:n}=r.useContext(s.E_),{prefixCls:o,size:i,className:c}=e,l=R(e,["prefixCls","size","className"]),u=t("btn-group",o),[,,d]=(0,C.ZP)(),f="";switch(i){case"large":f="lg";break;case"small":f="sm"}let p=a()(u,{["".concat(u,"-").concat(f)]:f,["".concat(u,"-rtl")]:"rtl"===n},c,d);return r.createElement(M.Provider,{value:i},r.createElement("div",Object.assign({},l,{className:p})))},eh.__ANT_BUTTON=!0;var ev=eh},7094:function(e,t,n){n.d(t,{n:function(){return a}});var r=n(4090);let o=r.createContext(!1),a=e=>{let{children:t,disabled:n}=e,a=r.useContext(o);return r.createElement(o.Provider,{value:null!=n?n:a},t)};t.Z=o},7303:function(e,t,n){n.d(t,{q:function(){return a}});var r=n(4090);let o=r.createContext(void 0),a=e=>{let{children:t,size:n}=e,a=r.useContext(o);return r.createElement(o.Provider,{value:n||a},t)};t.Z=o},7499:function(e,t,n){n.d(t,{E_:function(){return a},oR:function(){return o}});var r=n(4090);let o="anticon",a=r.createContext({getPrefixCls:(e,t)=>t||(e?"ant-".concat(e):"ant"),iconPrefixCls:o}),{Consumer:i}=a},2935:function(e,t,n){var r=n(4750);t.Z=e=>{let[,,,,t]=(0,r.ZP)();return t?"".concat(e,"-css-var"):""}},4629:function(e,t,n){var r=n(4090),o=n(7303);t.Z=e=>{let t=r.useContext(o.Z);return r.useMemo(()=>e?"string"==typeof e?null!=e?e:t:e instanceof Function?e(t):t:t,[e,t])}},4165:function(e,t,n){let r,o,a,i;n.d(t,{ZP:function(){return V},w6:function(){return H}});var c=n(4090),l=n.t(c,2),s=n(8985),u=n(7689),d=n(1475),f=n(6597),p=n(9233),m=n(2519),g=n(4678),h=n(3302),v=e=>{let{locale:t={},children:n,_ANT_MARK__:r}=e;c.useEffect(()=>(0,g.f)(t&&t.Modal),[t]);let o=c.useMemo(()=>Object.assign(Object.assign({},t),{exist:!0}),[t]);return c.createElement(h.Z.Provider,{value:o},n)},b=n(9474),y=n(3345),x=n(6864),w=n(7499),E=n(2215),C=n(6336),S=n(2127),O=n(4050);let Z="-ant-".concat(Date.now(),"-").concat(Math.random());var k=n(7094),R=n(7303),M=n(2536);let{useId:j}=Object.assign({},l);var P=void 0===j?()=>"":j,N=n(9367),I=n(4750);function T(e){let{children:t}=e,[,n]=(0,I.ZP)(),{motion:r}=n,o=c.useRef(!1);return(o.current=o.current||!1===r,o.current)?c.createElement(N.zt,{motion:r},t):t}var A=()=>null,F=n(8030),z=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let L=["getTargetContainer","getPopupContainer","renderEmpty","pageHeader","input","pagination","form","select","button"];function _(){return r||"ant"}function B(){return o||w.oR}let H=()=>({getPrefixCls:(e,t)=>t||(e?"".concat(_(),"-").concat(e):_()),getIconPrefixCls:B,getRootPrefixCls:()=>r||_(),getTheme:()=>a,holderRender:i}),D=e=>{let{children:t,csp:n,autoInsertSpaceInButton:r,alert:o,anchor:a,form:i,locale:l,componentSize:g,direction:h,space:E,virtual:C,dropdownMatchSelectWidth:S,popupMatchSelectWidth:O,popupOverflow:Z,legacyLocale:j,parentContext:N,iconPrefixCls:I,theme:_,componentDisabled:B,segmented:H,statistic:D,spin:W,calendar:V,carousel:q,cascader:X,collapse:G,typography:U,checkbox:K,descriptions:$,divider:Y,drawer:Q,skeleton:J,steps:ee,image:et,layout:en,list:er,mentions:eo,modal:ea,progress:ei,result:ec,slider:el,breadcrumb:es,menu:eu,pagination:ed,input:ef,empty:ep,badge:em,radio:eg,rate:eh,switch:ev,transfer:eb,avatar:ey,message:ex,tag:ew,table:eE,card:eC,tabs:eS,timeline:eO,timePicker:eZ,upload:ek,notification:eR,tree:eM,colorPicker:ej,datePicker:eP,rangePicker:eN,flex:eI,wave:eT,dropdown:eA,warning:eF}=e,ez=c.useCallback((t,n)=>{let{prefixCls:r}=e;if(n)return n;let o=r||N.getPrefixCls("");return t?"".concat(o,"-").concat(t):o},[N.getPrefixCls,e.prefixCls]),eL=I||N.iconPrefixCls||w.oR,e_=n||N.csp;(0,F.Z)(eL,e_);let eB=function(e,t){(0,p.ln)("ConfigProvider");let n=e||{},r=!1!==n.inherit&&t?t:y.u_,o=P();return(0,d.Z)(()=>{var a,i;if(!e)return t;let c=Object.assign({},r.components);Object.keys(e.components||{}).forEach(t=>{c[t]=Object.assign(Object.assign({},c[t]),e.components[t])});let l="css-var-".concat(o.replace(/:/g,"")),s=(null!==(a=n.cssVar)&&void 0!==a?a:r.cssVar)&&Object.assign(Object.assign(Object.assign({prefix:"ant"},"object"==typeof r.cssVar?r.cssVar:{}),"object"==typeof n.cssVar?n.cssVar:{}),{key:"object"==typeof n.cssVar&&(null===(i=n.cssVar)||void 0===i?void 0:i.key)||l});return Object.assign(Object.assign(Object.assign({},r),n),{token:Object.assign(Object.assign({},r.token),n.token),components:c,cssVar:s})},[n,r],(e,t)=>e.some((e,n)=>{let r=t[n];return!(0,M.Z)(e,r,!0)}))}(_,N.theme),eH={csp:e_,autoInsertSpaceInButton:r,alert:o,anchor:a,locale:l||j,direction:h,space:E,virtual:C,popupMatchSelectWidth:null!=O?O:S,popupOverflow:Z,getPrefixCls:ez,iconPrefixCls:eL,theme:eB,segmented:H,statistic:D,spin:W,calendar:V,carousel:q,cascader:X,collapse:G,typography:U,checkbox:K,descriptions:$,divider:Y,drawer:Q,skeleton:J,steps:ee,image:et,input:ef,layout:en,list:er,mentions:eo,modal:ea,progress:ei,result:ec,slider:el,breadcrumb:es,menu:eu,pagination:ed,empty:ep,badge:em,radio:eg,rate:eh,switch:ev,transfer:eb,avatar:ey,message:ex,tag:ew,table:eE,card:eC,tabs:eS,timeline:eO,timePicker:eZ,upload:ek,notification:eR,tree:eM,colorPicker:ej,datePicker:eP,rangePicker:eN,flex:eI,wave:eT,dropdown:eA,warning:eF},eD=Object.assign({},N);Object.keys(eH).forEach(e=>{void 0!==eH[e]&&(eD[e]=eH[e])}),L.forEach(t=>{let n=e[t];n&&(eD[t]=n)});let eW=(0,d.Z)(()=>eD,eD,(e,t)=>{let n=Object.keys(e),r=Object.keys(t);return n.length!==r.length||n.some(n=>e[n]!==t[n])}),eV=c.useMemo(()=>({prefixCls:eL,csp:e_}),[eL,e_]),eq=c.createElement(c.Fragment,null,c.createElement(A,{dropdownMatchSelectWidth:S}),t),eX=c.useMemo(()=>{var e,t,n,r;return(0,f.T)((null===(e=b.Z.Form)||void 0===e?void 0:e.defaultValidateMessages)||{},(null===(n=null===(t=eW.locale)||void 0===t?void 0:t.Form)||void 0===n?void 0:n.defaultValidateMessages)||{},(null===(r=eW.form)||void 0===r?void 0:r.validateMessages)||{},(null==i?void 0:i.validateMessages)||{})},[eW,null==i?void 0:i.validateMessages]);Object.keys(eX).length>0&&(eq=c.createElement(m.Z.Provider,{value:eX},eq)),l&&(eq=c.createElement(v,{locale:l,_ANT_MARK__:"internalMark"},eq)),(eL||e_)&&(eq=c.createElement(u.Z.Provider,{value:eV},eq)),g&&(eq=c.createElement(R.q,{size:g},eq)),eq=c.createElement(T,null,eq);let eG=c.useMemo(()=>{let e=eB||{},{algorithm:t,token:n,components:r,cssVar:o}=e,a=z(e,["algorithm","token","components","cssVar"]),i=t&&(!Array.isArray(t)||t.length>0)?(0,s.jG)(t):y.uH,c={};Object.entries(r||{}).forEach(e=>{let[t,n]=e,r=Object.assign({},n);"algorithm"in r&&(!0===r.algorithm?r.theme=i:(Array.isArray(r.algorithm)||"function"==typeof r.algorithm)&&(r.theme=(0,s.jG)(r.algorithm)),delete r.algorithm),c[t]=r});let l=Object.assign(Object.assign({},x.Z),n);return Object.assign(Object.assign({},a),{theme:i,token:l,components:c,override:Object.assign({override:l},c),cssVar:o})},[eB]);return _&&(eq=c.createElement(y.Mj.Provider,{value:eG},eq)),eW.warning&&(eq=c.createElement(p.G8.Provider,{value:eW.warning},eq)),void 0!==B&&(eq=c.createElement(k.n,{disabled:B},eq)),c.createElement(w.E_.Provider,{value:eW},eq)},W=e=>{let t=c.useContext(w.E_),n=c.useContext(h.Z);return c.createElement(D,Object.assign({parentContext:t,legacyLocale:n},e))};W.ConfigContext=w.E_,W.SizeContext=R.Z,W.config=e=>{let{prefixCls:t,iconPrefixCls:n,theme:c,holderRender:l}=e;void 0!==t&&(r=t),void 0!==n&&(o=n),"holderRender"in e&&(i=l),c&&(Object.keys(c).some(e=>e.endsWith("Color"))?function(e,t){let n=function(e,t){let n={},r=(e,t)=>{let n=e.clone();return(n=(null==t?void 0:t(n))||n).toRgbString()},o=(e,t)=>{let o=new C.C(e),a=(0,E.R_)(o.toRgbString());n["".concat(t,"-color")]=r(o),n["".concat(t,"-color-disabled")]=a[1],n["".concat(t,"-color-hover")]=a[4],n["".concat(t,"-color-active")]=a[6],n["".concat(t,"-color-outline")]=o.clone().setAlpha(.2).toRgbString(),n["".concat(t,"-color-deprecated-bg")]=a[0],n["".concat(t,"-color-deprecated-border")]=a[2]};if(t.primaryColor){o(t.primaryColor,"primary");let e=new C.C(t.primaryColor),a=(0,E.R_)(e.toRgbString());a.forEach((e,t)=>{n["primary-".concat(t+1)]=e}),n["primary-color-deprecated-l-35"]=r(e,e=>e.lighten(35)),n["primary-color-deprecated-l-20"]=r(e,e=>e.lighten(20)),n["primary-color-deprecated-t-20"]=r(e,e=>e.tint(20)),n["primary-color-deprecated-t-50"]=r(e,e=>e.tint(50)),n["primary-color-deprecated-f-12"]=r(e,e=>e.setAlpha(.12*e.getAlpha()));let i=new C.C(a[0]);n["primary-color-active-deprecated-f-30"]=r(i,e=>e.setAlpha(.3*e.getAlpha())),n["primary-color-active-deprecated-d-02"]=r(i,e=>e.darken(2))}t.successColor&&o(t.successColor,"success"),t.warningColor&&o(t.warningColor,"warning"),t.errorColor&&o(t.errorColor,"error"),t.infoColor&&o(t.infoColor,"info");let a=Object.keys(n).map(t=>"--".concat(e,"-").concat(t,": ").concat(n[t],";"));return"\n :root {\n ".concat(a.join("\n"),"\n }\n ").trim()}(e,t);(0,S.Z)()&&(0,O.hq)(n,"".concat(Z,"-dynamic-theme"))}(_(),c):a=c)},W.useConfig=function(){return{componentDisabled:(0,c.useContext)(k.Z),componentSize:(0,c.useContext)(R.Z)}},Object.defineProperty(W,"SizeContext",{get:()=>R.Z});var V=W},7137:function(e,t,n){n.d(t,{RV:function(){return l},Rk:function(){return s},Ux:function(){return d},aM:function(){return u},pg:function(){return f},q3:function(){return i},qI:function(){return c}});var r=n(4090),o=n(6570),a=n(5704);let i=r.createContext({labelAlign:"right",vertical:!1,itemRef:()=>{}}),c=r.createContext(null),l=e=>{let t=(0,a.Z)(e,["prefixCls"]);return r.createElement(o.RV,Object.assign({},t))},s=r.createContext({prefixCls:""}),u=r.createContext({}),d=e=>{let{children:t,status:n,override:o}=e,a=(0,r.useContext)(u),i=(0,r.useMemo)(()=>{let e=Object.assign({},a);return o&&delete e.isFormItemInput,n&&(delete e.status,delete e.hasFeedback,delete e.feedbackIcon),e},[n,o,a]);return r.createElement(u.Provider,{value:i},t)},f=(0,r.createContext)(void 0)},8443:function(e,t,n){var r=n(4090),o=n(7137);let a=["outlined","borderless","filled"];t.Z=function(e){let t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=(0,r.useContext)(o.pg);t=void 0!==e?e:!1===n?"borderless":null!=i?i:"outlined";let c=a.includes(t);return[t,c]}},2902:function(e,t,n){n.d(t,{Z:function(){return tp}});var r=n(3787),o=n(6480),a=n.n(o),i=n(9367),c=n(4090),l=n(7387),s=n(7137);function u(e){let[t,n]=c.useState(e);return c.useEffect(()=>{let t=setTimeout(()=>{n(e)},e.length?0:10);return()=>{clearTimeout(t)}},[e]),t}var d=n(8985),f=n(1303),p=n(8854),m=e=>({[e.componentCls]:{["".concat(e.antCls,"-motion-collapse-legacy")]:{overflow:"hidden","&-active":{transition:"height ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut,",\n opacity ").concat(e.motionDurationMid," ").concat(e.motionEaseInOut," !important")}},["".concat(e.antCls,"-motion-collapse")]:{overflow:"hidden",transition:"height ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut,",\n opacity ").concat(e.motionDurationMid," ").concat(e.motionEaseInOut," !important")}}}),g=n(316),h=n(6585),v=e=>{let{componentCls:t}=e,n="".concat(t,"-show-help"),r="".concat(t,"-show-help-item");return{[n]:{transition:"opacity ".concat(e.motionDurationSlow," ").concat(e.motionEaseInOut),"&-appear, &-enter":{opacity:0,"&-active":{opacity:1}},"&-leave":{opacity:1,"&-active":{opacity:0}},[r]:{overflow:"hidden",transition:"height ".concat(e.motionDurationSlow," ").concat(e.motionEaseInOut,",\n opacity ").concat(e.motionDurationSlow," ").concat(e.motionEaseInOut,",\n transform ").concat(e.motionDurationSlow," ").concat(e.motionEaseInOut," !important"),["&".concat(r,"-appear, &").concat(r,"-enter")]:{transform:"translateY(-5px)",opacity:0,"&-active":{transform:"translateY(0)",opacity:1}},["&".concat(r,"-leave-active")]:{transform:"translateY(-5px)"}}}}};let b=e=>({legend:{display:"block",width:"100%",marginBottom:e.marginLG,padding:0,color:e.colorTextDescription,fontSize:e.fontSizeLG,lineHeight:"inherit",border:0,borderBottom:"".concat((0,d.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)},'input[type="search"]':{boxSizing:"border-box"},'input[type="radio"], input[type="checkbox"]':{lineHeight:"normal"},'input[type="file"]':{display:"block"},'input[type="range"]':{display:"block",width:"100%"},"select[multiple], select[size]":{height:"auto"},"input[type='file']:focus,\n input[type='radio']:focus,\n input[type='checkbox']:focus":{outline:0,boxShadow:"0 0 0 ".concat((0,d.bf)(e.controlOutlineWidth)," ").concat(e.controlOutline)},output:{display:"block",paddingTop:15,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight}}),y=(e,t)=>{let{formItemCls:n}=e;return{[n]:{["".concat(n,"-label > label")]:{height:t},["".concat(n,"-control-input")]:{minHeight:t}}}},x=e=>{let{componentCls:t}=e;return{[e.componentCls]:Object.assign(Object.assign(Object.assign({},(0,f.Wf)(e)),b(e)),{["".concat(t,"-text")]:{display:"inline-block",paddingInlineEnd:e.paddingSM},"&-small":Object.assign({},y(e,e.controlHeightSM)),"&-large":Object.assign({},y(e,e.controlHeightLG))})}},w=e=>{let{formItemCls:t,iconCls:n,componentCls:r,rootPrefixCls:o,labelRequiredMarkColor:a,labelColor:i,labelFontSize:c,labelHeight:l,labelColonMarginInlineStart:s,labelColonMarginInlineEnd:u,itemMarginBottom:d}=e;return{[t]:Object.assign(Object.assign({},(0,f.Wf)(e)),{marginBottom:d,verticalAlign:"top","&-with-help":{transition:"none"},["&-hidden,\n &-hidden.".concat(o,"-row")]:{display:"none"},"&-has-warning":{["".concat(t,"-split")]:{color:e.colorError}},"&-has-error":{["".concat(t,"-split")]:{color:e.colorWarning}},["".concat(t,"-label")]:{flexGrow:0,overflow:"hidden",whiteSpace:"nowrap",textAlign:"end",verticalAlign:"middle","&-left":{textAlign:"start"},"&-wrap":{overflow:"unset",lineHeight:e.lineHeight,whiteSpace:"unset"},"> label":{position:"relative",display:"inline-flex",alignItems:"center",maxWidth:"100%",height:l,color:i,fontSize:c,["> ".concat(n)]:{fontSize:e.fontSize,verticalAlign:"top"},["&".concat(t,"-required:not(").concat(t,"-required-mark-optional)::before")]:{display:"inline-block",marginInlineEnd:e.marginXXS,color:a,fontSize:e.fontSize,fontFamily:"SimSun, sans-serif",lineHeight:1,content:'"*"',["".concat(r,"-hide-required-mark &")]:{display:"none"}},["".concat(t,"-optional")]:{display:"inline-block",marginInlineStart:e.marginXXS,color:e.colorTextDescription,["".concat(r,"-hide-required-mark &")]:{display:"none"}},["".concat(t,"-tooltip")]:{color:e.colorTextDescription,cursor:"help",writingMode:"horizontal-tb",marginInlineStart:e.marginXXS},"&::after":{content:'":"',position:"relative",marginBlock:0,marginInlineStart:s,marginInlineEnd:u},["&".concat(t,"-no-colon::after")]:{content:'"\\a0"'}}},["".concat(t,"-control")]:{"--ant-display":"flex",flexDirection:"column",flexGrow:1,["&:first-child:not([class^=\"'".concat(o,"-col-'\"]):not([class*=\"' ").concat(o,"-col-'\"])")]:{width:"100%"},"&-input":{position:"relative",display:"flex",alignItems:"center",minHeight:e.controlHeight,"&-content":{flex:"auto",maxWidth:"100%"}}},[t]:{"&-explain, &-extra":{clear:"both",color:e.colorTextDescription,fontSize:e.fontSize,lineHeight:e.lineHeight},"&-explain-connected":{width:"100%"},"&-extra":{minHeight:e.controlHeightSM,transition:"color ".concat(e.motionDurationMid," ").concat(e.motionEaseOut)},"&-explain":{"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning}}},["&-with-help ".concat(t,"-explain")]:{height:"auto",opacity:1},["".concat(t,"-feedback-icon")]:{fontSize:e.fontSize,textAlign:"center",visibility:"visible",animationName:p.kr,animationDuration:e.motionDurationMid,animationTimingFunction:e.motionEaseOutBack,pointerEvents:"none","&-success":{color:e.colorSuccess},"&-error":{color:e.colorError},"&-warning":{color:e.colorWarning},"&-validating":{color:e.colorPrimary}}})}},E=e=>{let{componentCls:t,formItemCls:n}=e;return{["".concat(t,"-horizontal")]:{["".concat(n,"-label")]:{flexGrow:0},["".concat(n,"-control")]:{flex:"1 1 0",minWidth:0},["".concat(n,"-label[class$='-24'], ").concat(n,"-label[class*='-24 ']")]:{["& + ".concat(n,"-control")]:{minWidth:"unset"}}}}},C=e=>{let{componentCls:t,formItemCls:n}=e;return{["".concat(t,"-inline")]:{display:"flex",flexWrap:"wrap",[n]:{flex:"none",marginInlineEnd:e.margin,marginBottom:0,"&-row":{flexWrap:"nowrap"},["> ".concat(n,"-label,\n > ").concat(n,"-control")]:{display:"inline-block",verticalAlign:"top"},["> ".concat(n,"-label")]:{flex:"none"},["".concat(t,"-text")]:{display:"inline-block"},["".concat(n,"-has-feedback")]:{display:"inline-block"}}}}},S=e=>({padding:e.verticalLabelPadding,margin:e.verticalLabelMargin,whiteSpace:"initial",textAlign:"start","> label":{margin:0,"&::after":{visibility:"hidden"}}}),O=e=>{let{componentCls:t,formItemCls:n,rootPrefixCls:r}=e;return{["".concat(n," ").concat(n,"-label")]:S(e),["".concat(t,":not(").concat(t,"-inline)")]:{[n]:{flexWrap:"wrap",["".concat(n,"-label, ").concat(n,"-control")]:{['&:not([class*=" '.concat(r,'-col-xs"])')]:{flex:"0 0 100%",maxWidth:"100%"}}}}}},Z=e=>{let{componentCls:t,formItemCls:n,rootPrefixCls:r}=e;return{["".concat(t,"-vertical")]:{[n]:{"&-row":{flexDirection:"column"},"&-label > label":{height:"auto"},["".concat(t,"-item-control")]:{width:"100%"}}},["".concat(t,"-vertical ").concat(n,"-label,\n .").concat(r,"-col-24").concat(n,"-label,\n .").concat(r,"-col-xl-24").concat(n,"-label")]:S(e),["@media (max-width: ".concat((0,d.bf)(e.screenXSMax),")")]:[O(e),{[t]:{[".".concat(r,"-col-xs-24").concat(n,"-label")]:S(e)}}],["@media (max-width: ".concat((0,d.bf)(e.screenSMMax),")")]:{[t]:{[".".concat(r,"-col-sm-24").concat(n,"-label")]:S(e)}},["@media (max-width: ".concat((0,d.bf)(e.screenMDMax),")")]:{[t]:{[".".concat(r,"-col-md-24").concat(n,"-label")]:S(e)}},["@media (max-width: ".concat((0,d.bf)(e.screenLGMax),")")]:{[t]:{[".".concat(r,"-col-lg-24").concat(n,"-label")]:S(e)}}}},k=(e,t)=>(0,g.TS)(e,{formItemCls:"".concat(e.componentCls,"-item"),rootPrefixCls:t});var R=(0,h.I$)("Form",(e,t)=>{let{rootPrefixCls:n}=t,r=k(e,n);return[x(r),w(r),v(r),E(r),C(r),Z(r),m(r),p.kr]},e=>({labelRequiredMarkColor:e.colorError,labelColor:e.colorTextHeading,labelFontSize:e.fontSize,labelHeight:e.controlHeight,labelColonMarginInlineStart:e.marginXXS/2,labelColonMarginInlineEnd:e.marginXS,itemMarginBottom:e.marginLG,verticalLabelPadding:"0 0 ".concat(e.paddingXS,"px"),verticalLabelMargin:0}),{order:-1e3}),M=n(2935);let j=[];function P(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;return{key:"string"==typeof e?e:"".concat(t,"-").concat(r),error:e,errorStatus:n}}var N=e=>{let{help:t,helpStatus:n,errors:o=j,warnings:d=j,className:f,fieldId:p,onVisibleChanged:m}=e,{prefixCls:g}=c.useContext(s.Rk),h="".concat(g,"-item-explain"),v=(0,M.Z)(g),[b,y,x]=R(g,v),w=(0,c.useMemo)(()=>(0,l.Z)(g),[g]),E=u(o),C=u(d),S=c.useMemo(()=>null!=t?[P(t,"help",n)]:[].concat((0,r.Z)(E.map((e,t)=>P(e,"error","error",t))),(0,r.Z)(C.map((e,t)=>P(e,"warning","warning",t)))),[t,n,E,C]),O={};return p&&(O.id="".concat(p,"_help")),b(c.createElement(i.ZP,{motionDeadline:w.motionDeadline,motionName:"".concat(g,"-show-help"),visible:!!S.length,onVisibleChanged:m},e=>{let{className:t,style:n}=e;return c.createElement("div",Object.assign({},O,{className:a()(h,t,x,v,f,y),style:n,role:"alert"}),c.createElement(i.V4,Object.assign({keys:S},(0,l.Z)(g),{motionName:"".concat(g,"-show-help-item"),component:!1}),e=>{let{key:t,error:n,errorStatus:r,className:o,style:i}=e;return c.createElement("div",{key:t,className:a()(o,{["".concat(h,"-").concat(r)]:r}),style:i},n)}))}))},I=n(6570),T=n(7499),A=n(7094),F=n(4629),z=n(7303);let L=e=>"object"==typeof e&&null!=e&&1===e.nodeType,_=(e,t)=>(!t||"hidden"!==e)&&"visible"!==e&&"clip"!==e,B=(e,t)=>{if(e.clientHeight{let t=(e=>{if(!e.ownerDocument||!e.ownerDocument.defaultView)return null;try{return e.ownerDocument.defaultView.frameElement}catch(e){return null}})(e);return!!t&&(t.clientHeightat||a>e&&i=t&&c>=n?a-e-r:i>t&&cn?i-t+o:0,D=e=>{let t=e.parentElement;return null==t?e.getRootNode().host||null:t},W=(e,t)=>{var n,r,o,a;if("undefined"==typeof document)return[];let{scrollMode:i,block:c,inline:l,boundary:s,skipOverflowHiddenElements:u}=t,d="function"==typeof s?s:e=>e!==s;if(!L(e))throw TypeError("Invalid target");let f=document.scrollingElement||document.documentElement,p=[],m=e;for(;L(m)&&d(m);){if((m=D(m))===f){p.push(m);break}null!=m&&m===document.body&&B(m)&&!B(document.documentElement)||null!=m&&B(m,u)&&p.push(m)}let g=null!=(r=null==(n=window.visualViewport)?void 0:n.width)?r:innerWidth,h=null!=(a=null==(o=window.visualViewport)?void 0:o.height)?a:innerHeight,{scrollX:v,scrollY:b}=window,{height:y,width:x,top:w,right:E,bottom:C,left:S}=e.getBoundingClientRect(),{top:O,right:Z,bottom:k,left:R}=(e=>{let t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e),M="start"===c||"nearest"===c?w-O:"end"===c?C+k:w+y/2-O+k,j="center"===l?S+x/2-R+Z:"end"===l?E+Z:S-R,P=[];for(let e=0;e=0&&S>=0&&C<=h&&E<=g&&w>=o&&C<=s&&S>=u&&E<=a)break;let d=getComputedStyle(t),m=parseInt(d.borderLeftWidth,10),O=parseInt(d.borderTopWidth,10),Z=parseInt(d.borderRightWidth,10),k=parseInt(d.borderBottomWidth,10),R=0,N=0,I="offsetWidth"in t?t.offsetWidth-t.clientWidth-m-Z:0,T="offsetHeight"in t?t.offsetHeight-t.clientHeight-O-k:0,A="offsetWidth"in t?0===t.offsetWidth?0:r/t.offsetWidth:0,F="offsetHeight"in t?0===t.offsetHeight?0:n/t.offsetHeight:0;if(f===t)R="start"===c?M:"end"===c?M-h:"nearest"===c?H(b,b+h,h,O,k,b+M,b+M+y,y):M-h/2,N="start"===l?j:"center"===l?j-g/2:"end"===l?j-g:H(v,v+g,g,m,Z,v+j,v+j+x,x),R=Math.max(0,R+b),N=Math.max(0,N+v);else{R="start"===c?M-o-O:"end"===c?M-s+k+T:"nearest"===c?H(o,s,n,O,k+T,M,M+y,y):M-(o+n/2)+T/2,N="start"===l?j-u-m:"center"===l?j-(u+r/2)+I/2:"end"===l?j-a+Z+I:H(u,a,r,m,Z+I,j,j+x,x);let{scrollLeft:e,scrollTop:i}=t;R=0===F?0:Math.max(0,Math.min(i+R/F,t.scrollHeight-n/F+T)),N=0===A?0:Math.max(0,Math.min(e+N/A,t.scrollWidth-r/A+I)),M+=i-R,j+=e-N}P.push({el:t,top:R,left:N})}return P},V=e=>!1===e?{block:"end",inline:"nearest"}:e===Object(e)&&0!==Object.keys(e).length?e:{block:"start",inline:"nearest"},q=["parentNode"];function X(e){return void 0===e||!1===e?[]:Array.isArray(e)?e:[e]}function G(e,t){if(!e.length)return;let n=e.join("_");return t?"".concat(t,"_").concat(n):q.includes(n)?"".concat("form_item","_").concat(n):n}function U(e,t,n,r,o,a){let i=r;return void 0!==a?i=a:n.validating?i="validating":e.length?i="error":t.length?i="warning":(n.touched||o&&n.validated)&&(i="success"),i}function K(e){return X(e).join("_")}function $(e){let[t]=(0,I.cI)(),n=c.useRef({}),r=c.useMemo(()=>null!=e?e:Object.assign(Object.assign({},t),{__INTERNAL__:{itemRef:e=>t=>{let r=K(e);t?n.current[r]=t:delete n.current[r]}},scrollToField:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=G(X(e),r.__INTERNAL__.name),o=n?document.getElementById(n):null;o&&function(e,t){if(!e.isConnected||!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return!0;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}return!1})(e))return;let n=(e=>{let t=window.getComputedStyle(e);return{top:parseFloat(t.scrollMarginTop)||0,right:parseFloat(t.scrollMarginRight)||0,bottom:parseFloat(t.scrollMarginBottom)||0,left:parseFloat(t.scrollMarginLeft)||0}})(e);if("object"==typeof t&&"function"==typeof t.behavior)return t.behavior(W(e,t));let r="boolean"==typeof t||null==t?void 0:t.behavior;for(let{el:o,top:a,left:i}of W(e,V(t))){let e=a-n.top+n.bottom,t=i-n.left+n.right;o.scroll({top:e,left:t,behavior:r})}}(o,Object.assign({scrollMode:"if-needed",block:"nearest"},t))},getFieldInstance:e=>{let t=K(e);return n.current[t]}}),[e,t]);return[r]}var Y=n(2519),Q=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let J=c.forwardRef((e,t)=>{let n=c.useContext(A.Z),{getPrefixCls:r,direction:o,form:i}=c.useContext(T.E_),{prefixCls:l,className:u,rootClassName:d,size:f,disabled:p=n,form:m,colon:g,labelAlign:h,labelWrap:v,labelCol:b,wrapperCol:y,hideRequiredMark:x,layout:w="horizontal",scrollToFirstError:E,requiredMark:C,onFinishFailed:S,name:O,style:Z,feedbackIcons:k,variant:j}=e,P=Q(e,["prefixCls","className","rootClassName","size","disabled","form","colon","labelAlign","labelWrap","labelCol","wrapperCol","hideRequiredMark","layout","scrollToFirstError","requiredMark","onFinishFailed","name","style","feedbackIcons","variant"]),N=(0,F.Z)(f),L=c.useContext(Y.Z),_=(0,c.useMemo)(()=>void 0!==C?C:!x&&(!i||void 0===i.requiredMark||i.requiredMark),[x,C,i]),B=null!=g?g:null==i?void 0:i.colon,H=r("form",l),D=(0,M.Z)(H),[W,V,q]=R(H,D),X=a()(H,"".concat(H,"-").concat(w),{["".concat(H,"-hide-required-mark")]:!1===_,["".concat(H,"-rtl")]:"rtl"===o,["".concat(H,"-").concat(N)]:N},q,D,V,null==i?void 0:i.className,u,d),[G]=$(m),{__INTERNAL__:U}=G;U.name=O;let K=(0,c.useMemo)(()=>({name:O,labelAlign:h,labelCol:b,labelWrap:v,wrapperCol:y,vertical:"vertical"===w,colon:B,requiredMark:_,itemRef:U.itemRef,form:G,feedbackIcons:k}),[O,h,b,y,w,B,_,G,k]);c.useImperativeHandle(t,()=>G);let J=(e,t)=>{if(e){let n={block:"nearest"};"object"==typeof e&&(n=e),G.scrollToField(t,n)}};return W(c.createElement(s.pg.Provider,{value:j},c.createElement(A.n,{disabled:p},c.createElement(z.Z.Provider,{value:N},c.createElement(s.RV,{validateMessages:L},c.createElement(s.q3.Provider,{value:K},c.createElement(I.ZP,Object.assign({id:O},P,{name:O,onFinishFailed:e=>{if(null==S||S(e),e.errorFields.length){let t=e.errorFields[0].name;if(void 0!==E){J(E,t);return}i&&void 0!==i.scrollToFirstError&&J(i.scrollToFirstError,t)}},form:G,style:Object.assign(Object.assign({},null==i?void 0:i.style),Z),className:X}))))))))});var ee=n(9211),et=n(4084),en=n(5823),er=n(9233),eo=n(3054);let ea=()=>{let{status:e,errors:t=[],warnings:n=[]}=(0,c.useContext)(s.aM);return{status:e,errors:t,warnings:n}};ea.Context=s.aM;var ei=n(9223),ec=n(3193),el=n(4800),es=n(5704),eu=n(4750);let ed=["xxl","xl","lg","md","sm","xs"],ef=e=>({xs:"(max-width: ".concat(e.screenXSMax,"px)"),sm:"(min-width: ".concat(e.screenSM,"px)"),md:"(min-width: ".concat(e.screenMD,"px)"),lg:"(min-width: ".concat(e.screenLG,"px)"),xl:"(min-width: ".concat(e.screenXL,"px)"),xxl:"(min-width: ".concat(e.screenXXL,"px)")}),ep=e=>{let t=[].concat(ed).reverse();return t.forEach((n,r)=>{let o=n.toUpperCase(),a="screen".concat(o,"Min"),i="screen".concat(o);if(!(e[a]<=e[i]))throw Error("".concat(a,"<=").concat(i," fails : !(").concat(e[a],"<=").concat(e[i],")"));if(r{let{componentCls:t}=e;return{[t]:{position:"relative",maxWidth:"100%",minHeight:1}}},eh=(e,t)=>{let{componentCls:n,gridColumns:r}=e,o={};for(let e=r;e>=0;e--)0===e?(o["".concat(n).concat(t,"-").concat(e)]={display:"none"},o["".concat(n,"-push-").concat(e)]={insetInlineStart:"auto"},o["".concat(n,"-pull-").concat(e)]={insetInlineEnd:"auto"},o["".concat(n).concat(t,"-push-").concat(e)]={insetInlineStart:"auto"},o["".concat(n).concat(t,"-pull-").concat(e)]={insetInlineEnd:"auto"},o["".concat(n).concat(t,"-offset-").concat(e)]={marginInlineStart:0},o["".concat(n).concat(t,"-order-").concat(e)]={order:0}):(o["".concat(n).concat(t,"-").concat(e)]=[{"--ant-display":"block",display:"block"},{display:"var(--ant-display)",flex:"0 0 ".concat(e/r*100,"%"),maxWidth:"".concat(e/r*100,"%")}],o["".concat(n).concat(t,"-push-").concat(e)]={insetInlineStart:"".concat(e/r*100,"%")},o["".concat(n).concat(t,"-pull-").concat(e)]={insetInlineEnd:"".concat(e/r*100,"%")},o["".concat(n).concat(t,"-offset-").concat(e)]={marginInlineStart:"".concat(e/r*100,"%")},o["".concat(n).concat(t,"-order-").concat(e)]={order:e});return o},ev=(e,t)=>eh(e,t),eb=(e,t,n)=>({["@media (min-width: ".concat((0,d.bf)(t),")")]:Object.assign({},ev(e,n))}),ey=(0,h.I$)("Grid",e=>{let{componentCls:t}=e;return{[t]:{display:"flex",flexFlow:"row wrap",minWidth:0,"&::before, &::after":{display:"flex"},"&-no-wrap":{flexWrap:"nowrap"},"&-start":{justifyContent:"flex-start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"flex-end"},"&-space-between":{justifyContent:"space-between"},"&-space-around":{justifyContent:"space-around"},"&-space-evenly":{justifyContent:"space-evenly"},"&-top":{alignItems:"flex-start"},"&-middle":{alignItems:"center"},"&-bottom":{alignItems:"flex-end"}}}},()=>({})),ex=(0,h.I$)("Grid",e=>{let t=(0,g.TS)(e,{gridColumns:24}),n={"-sm":t.screenSMMin,"-md":t.screenMDMin,"-lg":t.screenLGMin,"-xl":t.screenXLMin,"-xxl":t.screenXXLMin};return[eg(t),ev(t,""),ev(t,"-xs"),Object.keys(n).map(e=>eb(t,n[e],e)).reduce((e,t)=>Object.assign(Object.assign({},e),t),{})]},()=>({}));var ew=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function eE(e,t){let[n,r]=c.useState("string"==typeof e?e:""),o=()=>{if("string"==typeof e&&r(e),"object"==typeof e)for(let n=0;n{o()},[JSON.stringify(e),t]),n}let eC=c.forwardRef((e,t)=>{let{prefixCls:n,justify:r,align:o,className:i,style:l,children:s,gutter:u=0,wrap:d}=e,f=ew(e,["prefixCls","justify","align","className","style","children","gutter","wrap"]),{getPrefixCls:p,direction:m}=c.useContext(T.E_),[g,h]=c.useState({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),[v,b]=c.useState({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),y=eE(o,v),x=eE(r,v),w=c.useRef(u),E=function(){let[,e]=(0,eu.ZP)(),t=ef(ep(e));return c.useMemo(()=>{let e=new Map,n=-1,r={};return{matchHandlers:{},dispatch:t=>(r=t,e.forEach(e=>e(r)),e.size>=1),subscribe(t){return e.size||this.register(),n+=1,e.set(n,t),t(r),n},unsubscribe(t){e.delete(t),e.size||this.unregister()},unregister(){Object.keys(t).forEach(e=>{let n=t[e],r=this.matchHandlers[n];null==r||r.mql.removeListener(null==r?void 0:r.listener)}),e.clear()},register(){Object.keys(t).forEach(e=>{let n=t[e],o=t=>{let{matches:n}=t;this.dispatch(Object.assign(Object.assign({},r),{[e]:n}))},a=window.matchMedia(n);a.addListener(o),this.matchHandlers[n]={mql:a,listener:o},o(a)})},responsiveMap:t}},[e])}();c.useEffect(()=>{let e=E.subscribe(e=>{b(e);let t=w.current||0;(!Array.isArray(t)&&"object"==typeof t||Array.isArray(t)&&("object"==typeof t[0]||"object"==typeof t[1]))&&h(e)});return()=>E.unsubscribe(e)},[]);let C=p("row",n),[S,O,Z]=ey(C),k=(()=>{let e=[void 0,void 0];return(Array.isArray(u)?u:[u,void 0]).forEach((t,n)=>{if("object"==typeof t)for(let r=0;r0?-(k[0]/2):void 0;j&&(M.marginLeft=j,M.marginRight=j),[,M.rowGap]=k;let[P,N]=k,I=c.useMemo(()=>({gutter:[P,N],wrap:d}),[P,N,d]);return S(c.createElement(em.Provider,{value:I},c.createElement("div",Object.assign({},f,{className:R,style:Object.assign(Object.assign({},M),l),ref:t}),s)))});var eS=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let eO=["xs","sm","md","lg","xl","xxl"],eZ=c.forwardRef((e,t)=>{let{getPrefixCls:n,direction:r}=c.useContext(T.E_),{gutter:o,wrap:i}=c.useContext(em),{prefixCls:l,span:s,order:u,offset:d,push:f,pull:p,className:m,children:g,flex:h,style:v}=e,b=eS(e,["prefixCls","span","order","offset","push","pull","className","children","flex","style"]),y=n("col",l),[x,w,E]=ex(y),C={};eO.forEach(t=>{let n={},o=e[t];"number"==typeof o?n.span=o:"object"==typeof o&&(n=o||{}),delete b[t],C=Object.assign(Object.assign({},C),{["".concat(y,"-").concat(t,"-").concat(n.span)]:void 0!==n.span,["".concat(y,"-").concat(t,"-order-").concat(n.order)]:n.order||0===n.order,["".concat(y,"-").concat(t,"-offset-").concat(n.offset)]:n.offset||0===n.offset,["".concat(y,"-").concat(t,"-push-").concat(n.push)]:n.push||0===n.push,["".concat(y,"-").concat(t,"-pull-").concat(n.pull)]:n.pull||0===n.pull,["".concat(y,"-").concat(t,"-flex-").concat(n.flex)]:n.flex||"auto"===n.flex,["".concat(y,"-rtl")]:"rtl"===r})});let S=a()(y,{["".concat(y,"-").concat(s)]:void 0!==s,["".concat(y,"-order-").concat(u)]:u,["".concat(y,"-offset-").concat(d)]:d,["".concat(y,"-push-").concat(f)]:f,["".concat(y,"-pull-").concat(p)]:p},m,C,w,E),O={};if(o&&o[0]>0){let e=o[0]/2;O.paddingLeft=e,O.paddingRight=e}return h&&(O.flex="number"==typeof h?"".concat(h," ").concat(h," auto"):/^\d+(\.\d+)?(px|em|rem|%)$/.test(h)?"0 0 ".concat(h):h,!1!==i||O.minWidth||(O.minWidth=0)),x(c.createElement("div",Object.assign({},b,{style:Object.assign(Object.assign({},O),v),className:S,ref:t}),g))}),ek=e=>{let{formItemCls:t}=e;return{"@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none)":{["".concat(t,"-control")]:{display:"flex"}}}};var eR=(0,h.bk)(["Form","item-item"],(e,t)=>{let{rootPrefixCls:n}=t;return[ek(k(e,n))]}),eM=e=>{let{prefixCls:t,status:n,wrapperCol:r,children:o,errors:i,warnings:l,_internalItemRender:u,extra:d,help:f,fieldId:p,marginBottom:m,onErrorVisibleChanged:g}=e,h="".concat(t,"-item"),v=c.useContext(s.q3),b=r||v.wrapperCol||{},y=a()("".concat(h,"-control"),b.className),x=c.useMemo(()=>Object.assign({},v),[v]);delete x.labelCol,delete x.wrapperCol;let w=c.createElement("div",{className:"".concat(h,"-control-input")},c.createElement("div",{className:"".concat(h,"-control-input-content")},o)),E=c.useMemo(()=>({prefixCls:t,status:n}),[t,n]),C=null!==m||i.length||l.length?c.createElement("div",{style:{display:"flex",flexWrap:"nowrap"}},c.createElement(s.Rk.Provider,{value:E},c.createElement(N,{fieldId:p,errors:i,warnings:l,help:f,helpStatus:n,className:"".concat(h,"-explain-connected"),onVisibleChanged:g})),!!m&&c.createElement("div",{style:{width:0,height:m}})):null,S={};p&&(S.id="".concat(p,"_extra"));let O=d?c.createElement("div",Object.assign({},S,{className:"".concat(h,"-extra")}),d):null,Z=u&&"pro_table_render"===u.mark&&u.render?u.render(e,{input:w,errorList:C,extra:O}):c.createElement(c.Fragment,null,w,C,O);return c.createElement(s.q3.Provider,{value:x},c.createElement(eZ,Object.assign({},b,{className:y}),Z),c.createElement(eR,{prefixCls:t}))},ej=n(2110),eP={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M623.6 316.7C593.6 290.4 554 276 512 276s-81.6 14.5-111.6 40.7C369.2 344 352 380.7 352 420v7.6c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V420c0-44.1 43.1-80 96-80s96 35.9 96 80c0 31.1-22 59.6-56.1 72.7-21.2 8.1-39.2 22.3-52.1 40.9-13.1 19-19.9 41.8-19.9 64.9V620c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8v-22.7a48.3 48.3 0 0130.9-44.8c59-22.7 97.1-74.7 97.1-132.5.1-39.3-17.1-76-48.3-103.3zM472 732a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"question-circle",theme:"outlined"},eN=n(688),eI=c.forwardRef(function(e,t){return c.createElement(eN.Z,(0,ej.Z)({},e,{ref:t,icon:eP}))}),eT=n(9474),eA=n(595);function eF(e){var t=e.children,n=e.prefixCls,r=e.id,o=e.overlayInnerStyle,i=e.className,l=e.style;return c.createElement("div",{className:a()("".concat(n,"-content"),i),style:l},c.createElement("div",{className:"".concat(n,"-inner"),id:r,role:"tooltip",style:o},"function"==typeof t?t():t))}var ez=n(5239),eL=n(6787),e_=n(1737),eB={shiftX:64,adjustY:1},eH={adjustX:1,shiftY:!0},eD=[0,0],eW={left:{points:["cr","cl"],overflow:eH,offset:[-4,0],targetOffset:eD},right:{points:["cl","cr"],overflow:eH,offset:[4,0],targetOffset:eD},top:{points:["bc","tc"],overflow:eB,offset:[0,-4],targetOffset:eD},bottom:{points:["tc","bc"],overflow:eB,offset:[0,4],targetOffset:eD},topLeft:{points:["bl","tl"],overflow:eB,offset:[0,-4],targetOffset:eD},leftTop:{points:["tr","tl"],overflow:eH,offset:[-4,0],targetOffset:eD},topRight:{points:["br","tr"],overflow:eB,offset:[0,-4],targetOffset:eD},rightTop:{points:["tl","tr"],overflow:eH,offset:[4,0],targetOffset:eD},bottomRight:{points:["tr","br"],overflow:eB,offset:[0,4],targetOffset:eD},rightBottom:{points:["bl","br"],overflow:eH,offset:[4,0],targetOffset:eD},bottomLeft:{points:["tl","bl"],overflow:eB,offset:[0,4],targetOffset:eD},leftBottom:{points:["br","bl"],overflow:eH,offset:[-4,0],targetOffset:eD}},eV=["overlayClassName","trigger","mouseEnterDelay","mouseLeaveDelay","overlayStyle","prefixCls","children","onVisibleChange","afterVisibleChange","transitionName","animation","motion","placement","align","destroyTooltipOnHide","defaultVisible","getTooltipContainer","overlayInnerStyle","arrowContent","overlay","id","showArrow"],eq=(0,c.forwardRef)(function(e,t){var n=e.overlayClassName,r=e.trigger,o=e.mouseEnterDelay,a=e.mouseLeaveDelay,i=e.overlayStyle,l=e.prefixCls,s=void 0===l?"rc-tooltip":l,u=e.children,d=e.onVisibleChange,f=e.afterVisibleChange,p=e.transitionName,m=e.animation,g=e.motion,h=e.placement,v=e.align,b=e.destroyTooltipOnHide,y=e.defaultVisible,x=e.getTooltipContainer,w=e.overlayInnerStyle,E=(e.arrowContent,e.overlay),C=e.id,S=e.showArrow,O=(0,eL.Z)(e,eV),Z=(0,c.useRef)(null);(0,c.useImperativeHandle)(t,function(){return Z.current});var k=(0,ez.Z)({},O);return"visible"in e&&(k.popupVisible=e.visible),c.createElement(e_.Z,(0,ej.Z)({popupClassName:n,prefixCls:s,popup:function(){return c.createElement(eF,{key:"content",prefixCls:s,id:C,overlayInnerStyle:w},E)},action:void 0===r?["hover"]:r,builtinPlacements:eW,popupPlacement:void 0===h?"right":h,ref:Z,popupAlign:void 0===v?{}:v,getPopupContainer:x,onPopupVisibleChange:d,afterPopupVisibleChange:f,popupTransitionName:p,popupAnimation:m,popupMotion:g,defaultPopupVisible:y,autoDestroy:void 0!==b&&b,mouseLeaveDelay:void 0===a?.1:a,popupStyle:i,mouseEnterDelay:void 0===o?0:o,arrow:void 0===S||S},k),u)}),eX=n(4329),eG=n(1761);let eU=(e,t,n)=>{let{sizePopupArrow:r,arrowPolygon:o,arrowPath:a,arrowShadowWidth:i,borderRadiusXS:c,calc:l}=e;return{pointerEvents:"none",width:r,height:r,overflow:"hidden","&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:r,height:l(r).div(2).equal(),background:t,clipPath:{_multi_value_:!0,value:[o,a]},content:'""'},"&::after":{content:'""',position:"absolute",width:i,height:i,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:"0 0 ".concat((0,d.bf)(c)," 0")},transform:"translateY(50%) rotate(-135deg)",boxShadow:n,zIndex:0,background:"transparent"}}};function eK(e){let{contentRadius:t,limitVerticalRadius:n}=e,r=t>12?t+2:12;return{arrowOffsetHorizontal:r,arrowOffsetVertical:n?8:r}}let e$={left:{points:["cr","cl"]},right:{points:["cl","cr"]},top:{points:["bc","tc"]},bottom:{points:["tc","bc"]},topLeft:{points:["bl","tl"]},leftTop:{points:["tr","tl"]},topRight:{points:["br","tr"]},rightTop:{points:["tl","tr"]},bottomRight:{points:["tr","br"]},rightBottom:{points:["bl","br"]},bottomLeft:{points:["tl","bl"]},leftBottom:{points:["br","bl"]}},eY={topLeft:{points:["bl","tc"]},leftTop:{points:["tr","cl"]},topRight:{points:["br","tc"]},rightTop:{points:["tl","cr"]},bottomRight:{points:["tr","bc"]},rightBottom:{points:["bl","cr"]},bottomLeft:{points:["tl","bc"]},leftBottom:{points:["br","cl"]}},eQ=new Set(["topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"]);var eJ=n(6718),e0=n(2801);let e1=["blue","purple","cyan","green","magenta","pink","red","orange","yellow","volcano","geekblue","lime","gold"],e2=e=>{var t;let{componentCls:n,tooltipMaxWidth:r,tooltipColor:o,tooltipBg:a,tooltipBorderRadius:i,zIndexPopup:c,controlHeight:l,boxShadowSecondary:s,paddingSM:u,paddingXS:p}=e;return[{[n]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,f.Wf)(e)),{position:"absolute",zIndex:c,display:"block",width:"max-content",maxWidth:r,visibility:"visible",transformOrigin:"var(--arrow-x, 50%) var(--arrow-y, 50%)","&-hidden":{display:"none"},"--antd-arrow-background-color":a,["".concat(n,"-inner")]:{minWidth:l,minHeight:l,padding:"".concat((0,d.bf)(e.calc(u).div(2).equal())," ").concat((0,d.bf)(p)),color:o,textAlign:"start",textDecoration:"none",wordWrap:"break-word",backgroundColor:a,borderRadius:i,boxShadow:s,boxSizing:"border-box"},"&-placement-left,&-placement-leftTop,&-placement-leftBottom,&-placement-right,&-placement-rightTop,&-placement-rightBottom":{["".concat(n,"-inner")]:{borderRadius:e.min(i,8)}},["".concat(n,"-content")]:{position:"relative"}}),(t=(e,t)=>{let{darkColor:r}=t;return{["&".concat(n,"-").concat(e)]:{["".concat(n,"-inner")]:{backgroundColor:r},["".concat(n,"-arrow")]:{"--antd-arrow-background-color":r}}}},e1.reduce((n,r)=>{let o=e["".concat(r,"1")],a=e["".concat(r,"3")],i=e["".concat(r,"6")],c=e["".concat(r,"7")];return Object.assign(Object.assign({},n),t(r,{lightColor:o,lightBorderColor:a,darkColor:i,textColor:c}))},{}))),{"&-rtl":{direction:"rtl"}})},function(e,t,n){var r,o,a,i,c,l,s,u;let{componentCls:d,boxShadowPopoverArrow:f,arrowOffsetVertical:p,arrowOffsetHorizontal:m}=e,{arrowDistance:g=0,arrowPlacement:h={left:!0,right:!0,top:!0,bottom:!0}}={};return{[d]:Object.assign(Object.assign(Object.assign(Object.assign({["".concat(d,"-arrow")]:[Object.assign(Object.assign({position:"absolute",zIndex:1,display:"block"},eU(e,t,f)),{"&:before":{background:t}})]},(r=!!h.top,o={[["&-placement-top > ".concat(d,"-arrow"),"&-placement-topLeft > ".concat(d,"-arrow"),"&-placement-topRight > ".concat(d,"-arrow")].join(",")]:{bottom:g,transform:"translateY(100%) rotate(180deg)"},["&-placement-top > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},["&-placement-topLeft > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:m}},["&-placement-topRight > ".concat(d,"-arrow")]:{right:{_skip_check_:!0,value:m}}},r?o:{})),(a=!!h.bottom,i={[["&-placement-bottom > ".concat(d,"-arrow"),"&-placement-bottomLeft > ".concat(d,"-arrow"),"&-placement-bottomRight > ".concat(d,"-arrow")].join(",")]:{top:g,transform:"translateY(-100%)"},["&-placement-bottom > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},["&-placement-bottomLeft > ".concat(d,"-arrow")]:{left:{_skip_check_:!0,value:m}},["&-placement-bottomRight > ".concat(d,"-arrow")]:{right:{_skip_check_:!0,value:m}}},a?i:{})),(c=!!h.left,l={[["&-placement-left > ".concat(d,"-arrow"),"&-placement-leftTop > ".concat(d,"-arrow"),"&-placement-leftBottom > ".concat(d,"-arrow")].join(",")]:{right:{_skip_check_:!0,value:g},transform:"translateX(100%) rotate(90deg)"},["&-placement-left > ".concat(d,"-arrow")]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},["&-placement-leftTop > ".concat(d,"-arrow")]:{top:p},["&-placement-leftBottom > ".concat(d,"-arrow")]:{bottom:p}},c?l:{})),(s=!!h.right,u={[["&-placement-right > ".concat(d,"-arrow"),"&-placement-rightTop > ".concat(d,"-arrow"),"&-placement-rightBottom > ".concat(d,"-arrow")].join(",")]:{left:{_skip_check_:!0,value:g},transform:"translateX(-100%) rotate(-90deg)"},["&-placement-right > ".concat(d,"-arrow")]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},["&-placement-rightTop > ".concat(d,"-arrow")]:{top:p},["&-placement-rightBottom > ".concat(d,"-arrow")]:{bottom:p}},s?u:{}))}}(e,"var(--antd-arrow-background-color)"),{["".concat(n,"-pure")]:{position:"relative",maxWidth:"none",margin:e.sizePopupArrow}}]},e4=e=>Object.assign(Object.assign({zIndexPopup:e.zIndexPopupBase+70},eK({contentRadius:e.borderRadius,limitVerticalRadius:!0})),function(e){let{sizePopupArrow:t,borderRadiusXS:n,borderRadiusOuter:r}=e,o=t/2,a=1*r/Math.sqrt(2),i=o-r*(1-1/Math.sqrt(2)),c=o-1/Math.sqrt(2)*n,l=r*(Math.sqrt(2)-1)+1/Math.sqrt(2)*n,s=2*o-c,u=2*o-a,d=2*o-0,f=o*Math.sqrt(2)+r*(Math.sqrt(2)-2),p=r*(Math.sqrt(2)-1),m="polygon(".concat(p,"px 100%, 50% ").concat(p,"px, ").concat(2*o-p,"px 100%, ").concat(p,"px 100%)");return{arrowShadowWidth:f,arrowPath:"path('M ".concat(0," ").concat(o," A ").concat(r," ").concat(r," 0 0 0 ").concat(a," ").concat(i," L ").concat(c," ").concat(l," A ").concat(n," ").concat(n," 0 0 1 ").concat(s," ").concat(l," L ").concat(u," ").concat(i," A ").concat(r," ").concat(r," 0 0 0 ").concat(d," ").concat(o," Z')"),arrowPolygon:m}}((0,g.TS)(e,{borderRadiusOuter:Math.min(e.borderRadiusOuter,4)})));function e5(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return(0,h.I$)("Tooltip",e=>{let{borderRadius:t,colorTextLightSolid:n,colorBgSpotlight:r}=e;return[e2((0,g.TS)(e,{tooltipMaxWidth:250,tooltipColor:n,tooltipBorderRadius:t,tooltipBg:r})),(0,p._y)(e,"zoom-big-fast")]},e4,{resetStyle:!1,injectStyle:t})(e)}let e3=e1.map(e=>"".concat(e,"-inverse"));function e6(e,t){let n=function(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return t?[].concat((0,r.Z)(e3),(0,r.Z)(e1)).includes(e):e1.includes(e)}(t),o=a()({["".concat(e,"-").concat(t)]:t&&n}),i={},c={};return t&&!n&&(i.background=t,c["--antd-arrow-background-color"]=t),{className:o,overlayStyle:i,arrowStyle:c}}var e8=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let e9=c.forwardRef((e,t)=>{var n,r;let{prefixCls:o,openClassName:i,getTooltipContainer:s,overlayClassName:u,color:d,overlayInnerStyle:f,children:p,afterOpenChange:m,afterVisibleChange:g,destroyTooltipOnHide:h,arrow:v=!0,title:b,overlay:y,builtinPlacements:x,arrowPointAtCenter:w=!1,autoAdjustOverflow:E=!0}=e,C=!!v,[,S]=(0,eu.ZP)(),{getPopupContainer:O,getPrefixCls:Z,direction:k}=c.useContext(T.E_),R=(0,er.ln)("Tooltip"),M=c.useRef(null),j=()=>{var e;null===(e=M.current)||void 0===e||e.forceAlign()};c.useImperativeHandle(t,()=>({forceAlign:j,forcePopupAlign:()=>{R.deprecated(!1,"forcePopupAlign","forceAlign"),j()}}));let[P,N]=(0,eX.Z)(!1,{value:null!==(n=e.open)&&void 0!==n?n:e.visible,defaultValue:null!==(r=e.defaultOpen)&&void 0!==r?r:e.defaultVisible}),I=!b&&!y&&0!==b,A=c.useMemo(()=>{var e,t;let n=w;return"object"==typeof v&&(n=null!==(t=null!==(e=v.pointAtCenter)&&void 0!==e?e:v.arrowPointAtCenter)&&void 0!==t?t:w),x||function(e){let{arrowWidth:t,autoAdjustOverflow:n,arrowPointAtCenter:r,offset:o,borderRadius:a,visibleFirst:i}=e,c=t/2,l={};return Object.keys(e$).forEach(e=>{let s=Object.assign(Object.assign({},r&&eY[e]||e$[e]),{offset:[0,0],dynamicInset:!0});switch(l[e]=s,eQ.has(e)&&(s.autoArrow=!1),e){case"top":case"topLeft":case"topRight":s.offset[1]=-c-o;break;case"bottom":case"bottomLeft":case"bottomRight":s.offset[1]=c+o;break;case"left":case"leftTop":case"leftBottom":s.offset[0]=-c-o;break;case"right":case"rightTop":case"rightBottom":s.offset[0]=c+o}let u=eK({contentRadius:a,limitVerticalRadius:!0});if(r)switch(e){case"topLeft":case"bottomLeft":s.offset[0]=-u.arrowOffsetHorizontal-c;break;case"topRight":case"bottomRight":s.offset[0]=u.arrowOffsetHorizontal+c;break;case"leftTop":case"rightTop":s.offset[1]=-u.arrowOffsetHorizontal-c;break;case"leftBottom":case"rightBottom":s.offset[1]=u.arrowOffsetHorizontal+c}s.overflow=function(e,t,n,r){if(!1===r)return{adjustX:!1,adjustY:!1};let o={};switch(e){case"top":case"bottom":o.shiftX=2*t.arrowOffsetHorizontal+n,o.shiftY=!0,o.adjustY=!0;break;case"left":case"right":o.shiftY=2*t.arrowOffsetVertical+n,o.shiftX=!0,o.adjustX=!0}let a=Object.assign(Object.assign({},o),r&&"object"==typeof r?r:{});return a.shiftX||(a.adjustX=!0),a.shiftY||(a.adjustY=!0),a}(e,u,t,n),i&&(s.htmlRegion="visibleFirst")}),l}({arrowPointAtCenter:n,autoAdjustOverflow:E,arrowWidth:C?S.sizePopupArrow:0,borderRadius:S.borderRadius,offset:S.marginXXS,visibleFirst:!0})},[w,v,x,S]),F=c.useMemo(()=>0===b?b:y||b||"",[y,b]),z=c.createElement(e0.BR,null,"function"==typeof F?F():F),{getPopupContainer:L,placement:_="top",mouseEnterDelay:B=.1,mouseLeaveDelay:H=.1,overlayStyle:D,rootClassName:W}=e,V=e8(e,["getPopupContainer","placement","mouseEnterDelay","mouseLeaveDelay","overlayStyle","rootClassName"]),q=Z("tooltip",o),X=Z(),G=e["data-popover-inject"],U=P;"open"in e||"visible"in e||!I||(U=!1);let K=(0,en.l$)(p)&&!(0,en.M2)(p)?p:c.createElement("span",null,p),$=K.props,Y=$.className&&"string"!=typeof $.className?$.className:a()($.className,i||"".concat(q,"-open")),[Q,J,ee]=e5(q,!G),et=e6(q,d),eo=et.arrowStyle,ea=Object.assign(Object.assign({},f),et.overlayStyle),ei=a()(u,{["".concat(q,"-rtl")]:"rtl"===k},et.className,W,J,ee),[ec,el]=(0,eG.Cn)("Tooltip",V.zIndex),es=c.createElement(eq,Object.assign({},V,{zIndex:ec,showArrow:C,placement:_,mouseEnterDelay:B,mouseLeaveDelay:H,prefixCls:q,overlayClassName:ei,overlayStyle:Object.assign(Object.assign({},eo),D),getTooltipContainer:L||s||O,ref:M,builtinPlacements:A,overlay:z,visible:U,onVisibleChange:t=>{var n,r;N(!I&&t),I||(null===(n=e.onOpenChange)||void 0===n||n.call(e,t),null===(r=e.onVisibleChange)||void 0===r||r.call(e,t))},afterVisibleChange:null!=m?m:g,overlayInnerStyle:ea,arrowContent:c.createElement("span",{className:"".concat(q,"-arrow-content")}),motion:{motionName:(0,l.m)(X,"zoom-big-fast",e.transitionName),motionDeadline:1e3},destroyTooltipOnHide:!!h}),U?(0,en.Tm)(K,{className:Y}):K);return Q(c.createElement(eJ.Z.Provider,{value:el},es))});e9._InternalPanelDoNotUseOrYouWillBeFired=e=>{let{prefixCls:t,className:n,placement:r="top",title:o,color:i,overlayInnerStyle:l}=e,{getPrefixCls:s}=c.useContext(T.E_),u=s("tooltip",t),[d,f,p]=e5(u),m=e6(u,i),g=m.arrowStyle,h=Object.assign(Object.assign({},l),m.overlayStyle),v=a()(f,p,u,"".concat(u,"-pure"),"".concat(u,"-placement-").concat(r),n,m.className);return d(c.createElement("div",{className:v,style:g},c.createElement("div",{className:"".concat(u,"-arrow")}),c.createElement(eF,Object.assign({},e,{className:f,prefixCls:u,overlayInnerStyle:h}),o)))};var e7=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},te=e=>{var t;let{prefixCls:n,label:r,htmlFor:o,labelCol:i,labelAlign:l,colon:u,required:d,requiredMark:f,tooltip:p}=e,[m]=(0,eA.Z)("Form"),{vertical:g,labelAlign:h,labelCol:v,labelWrap:b,colon:y}=c.useContext(s.q3);if(!r)return null;let x=i||v||{},w="".concat(n,"-item-label"),E=a()(w,"left"===(l||h)&&"".concat(w,"-left"),x.className,{["".concat(w,"-wrap")]:!!b}),C=r,S=!0===u||!1!==y&&!1!==u;S&&!g&&"string"==typeof r&&""!==r.trim()&&(C=r.replace(/[:|:]\s*$/,""));let O=p?"object"!=typeof p||c.isValidElement(p)?{title:p}:p:null;if(O){let{icon:e=c.createElement(eI,null)}=O,t=e7(O,["icon"]),r=c.createElement(e9,Object.assign({},t),c.cloneElement(e,{className:"".concat(n,"-item-tooltip"),title:"",onClick:e=>{e.preventDefault()},tabIndex:null}));C=c.createElement(c.Fragment,null,C,r)}let Z="optional"===f,k="function"==typeof f;k?C=f(C,{required:!!d}):Z&&!d&&(C=c.createElement(c.Fragment,null,C,c.createElement("span",{className:"".concat(n,"-item-optional"),title:""},(null==m?void 0:m.optional)||(null===(t=eT.Z.Form)||void 0===t?void 0:t.optional))));let R=a()({["".concat(n,"-item-required")]:d,["".concat(n,"-item-required-mark-optional")]:Z||k,["".concat(n,"-item-no-colon")]:!S});return c.createElement(eZ,Object.assign({},x,{className:E}),c.createElement("label",{htmlFor:o,className:R,title:"string"==typeof r?r:""},C))},tt=n(9537),tn=n(7136),tr=n(653),to=n(9334);let ta={success:tt.Z,warning:tr.Z,error:tn.Z,validating:to.Z};function ti(e){let{children:t,errors:n,warnings:r,hasFeedback:o,validateStatus:i,prefixCls:l,meta:u,noStyle:d}=e,f="".concat(l,"-item"),{feedbackIcons:p}=c.useContext(s.q3),m=U(n,r,u,null,!!o,i),{isFormItemInput:g,status:h,hasFeedback:v,feedbackIcon:b}=c.useContext(s.aM),y=c.useMemo(()=>{var e;let t;if(o){let i=!0!==o&&o.icons||p,l=m&&(null===(e=null==i?void 0:i({status:m,errors:n,warnings:r}))||void 0===e?void 0:e[m]),s=m&&ta[m];t=!1!==l&&s?c.createElement("span",{className:a()("".concat(f,"-feedback-icon"),"".concat(f,"-feedback-icon-").concat(m))},l||c.createElement(s,null)):null}let i={status:m||"",errors:n,warnings:r,hasFeedback:!!o,feedbackIcon:t,isFormItemInput:!0};return d&&(i.status=(null!=m?m:h)||"",i.isFormItemInput=g,i.hasFeedback=!!(null!=o?o:v),i.feedbackIcon=void 0!==o?i.feedbackIcon:b),i},[m,o,d,g,h]);return c.createElement(s.aM.Provider,{value:y},t)}var tc=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function tl(e){let{prefixCls:t,className:n,rootClassName:r,style:o,help:i,errors:l,warnings:d,validateStatus:f,meta:p,hasFeedback:m,hidden:g,children:h,fieldId:v,required:b,isRequired:y,onSubItemMetaChange:x}=e,w=tc(e,["prefixCls","className","rootClassName","style","help","errors","warnings","validateStatus","meta","hasFeedback","hidden","children","fieldId","required","isRequired","onSubItemMetaChange"]),E="".concat(t,"-item"),{requiredMark:C}=c.useContext(s.q3),S=c.useRef(null),O=u(l),Z=u(d),k=null!=i,R=!!(k||l.length||d.length),M=!!S.current&&(0,ec.Z)(S.current),[j,P]=c.useState(null);(0,el.Z)(()=>{R&&S.current&&P(parseInt(getComputedStyle(S.current).marginBottom,10))},[R,M]);let N=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return U(e?O:p.errors,e?Z:p.warnings,p,"",!!m,f)}(),I=a()(E,n,r,{["".concat(E,"-with-help")]:k||O.length||Z.length,["".concat(E,"-has-feedback")]:N&&m,["".concat(E,"-has-success")]:"success"===N,["".concat(E,"-has-warning")]:"warning"===N,["".concat(E,"-has-error")]:"error"===N,["".concat(E,"-is-validating")]:"validating"===N,["".concat(E,"-hidden")]:g});return c.createElement("div",{className:I,style:o,ref:S},c.createElement(eC,Object.assign({className:"".concat(E,"-row")},(0,es.Z)(w,["_internalItemRender","colon","dependencies","extra","fieldKey","getValueFromEvent","getValueProps","htmlFor","id","initialValue","isListField","label","labelAlign","labelCol","labelWrap","messageVariables","name","normalize","noStyle","preserve","requiredMark","rules","shouldUpdate","trigger","tooltip","validateFirst","validateTrigger","valuePropName","wrapperCol","validateDebounce"])),c.createElement(te,Object.assign({htmlFor:v},e,{requiredMark:C,required:null!=b?b:y,prefixCls:t})),c.createElement(eM,Object.assign({},e,p,{errors:O,warnings:Z,prefixCls:t,status:N,help:i,marginBottom:j,onErrorVisibleChanged:e=>{e||P(null)}}),c.createElement(s.qI.Provider,{value:x},c.createElement(ti,{prefixCls:t,meta:p,errors:p.errors,warnings:p.warnings,hasFeedback:m,validateStatus:N},h)))),!!j&&c.createElement("div",{className:"".concat(E,"-margin-offset"),style:{marginBottom:-j}}))}let ts=c.memo(e=>{let{children:t}=e;return t},(e,t)=>(function(e,t){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(n=>{let r=e[n],o=t[n];return r===o||"function"==typeof r||"function"==typeof o})})(e.control,t.control)&&e.update===t.update&&e.childProps.length===t.childProps.length&&e.childProps.every((e,n)=>e===t.childProps[n]));function tu(){return{errors:[],warnings:[],touched:!1,validating:!1,name:[],validated:!1}}let td=function(e){let{name:t,noStyle:n,className:o,dependencies:i,prefixCls:l,shouldUpdate:u,rules:d,children:f,required:p,label:m,messageVariables:g,trigger:h="onChange",validateTrigger:v,hidden:b,help:y}=e,{getPrefixCls:x}=c.useContext(T.E_),{name:w}=c.useContext(s.q3),E=function(e){if("function"==typeof e)return e;let t=(0,eo.Z)(e);return t.length<=1?t[0]:t}(f),C="function"==typeof E,S=c.useContext(s.qI),{validateTrigger:O}=c.useContext(I.zb),Z=void 0!==v?v:O,k=null!=t,j=x("form",l),P=(0,M.Z)(j),[N,A,F]=R(j,P);(0,er.ln)("Form.Item");let z=c.useContext(I.ZM),L=c.useRef(),[_,B]=function(e){let[t,n]=c.useState(e),r=(0,c.useRef)(null),o=(0,c.useRef)([]),a=(0,c.useRef)(!1);return c.useEffect(()=>(a.current=!1,()=>{a.current=!0,ei.Z.cancel(r.current),r.current=null}),[]),[t,function(e){a.current||(null===r.current&&(o.current=[],r.current=(0,ei.Z)(()=>{r.current=null,n(e=>{let t=e;return o.current.forEach(e=>{t=e(t)}),t})})),o.current.push(e))}]}({}),[H,D]=(0,ee.Z)(()=>tu()),W=(e,t)=>{B(n=>{let o=Object.assign({},n),a=[].concat((0,r.Z)(e.name.slice(0,-1)),(0,r.Z)(t)).join("__SPLIT__");return e.destroy?delete o[a]:o[a]=e,o})},[V,q]=c.useMemo(()=>{let e=(0,r.Z)(H.errors),t=(0,r.Z)(H.warnings);return Object.values(_).forEach(n=>{e.push.apply(e,(0,r.Z)(n.errors||[])),t.push.apply(t,(0,r.Z)(n.warnings||[]))}),[e,t]},[_,H.errors,H.warnings]),U=function(){let{itemRef:e}=c.useContext(s.q3),t=c.useRef({});return function(n,r){let o=r&&"object"==typeof r&&r.ref,a=n.join("_");return(t.current.name!==a||t.current.originRef!==o)&&(t.current.name=a,t.current.originRef=o,t.current.ref=(0,et.sQ)(e(n),o)),t.current.ref}}();function K(t,r,i){return n&&!b?c.createElement(ti,{prefixCls:j,hasFeedback:e.hasFeedback,validateStatus:e.validateStatus,meta:H,errors:V,warnings:q,noStyle:!0},t):c.createElement(tl,Object.assign({key:"row"},e,{className:a()(o,F,P,A),prefixCls:j,fieldId:r,isRequired:i,errors:V,warnings:q,meta:H,onSubItemMetaChange:W}),t)}if(!k&&!C&&!i)return N(K(E));let $={};return"string"==typeof m?$.label=m:t&&($.label=String(t)),g&&($=Object.assign(Object.assign({},$),g)),N(c.createElement(I.gN,Object.assign({},e,{messageVariables:$,trigger:h,validateTrigger:Z,onMetaChange:e=>{let t=null==z?void 0:z.getKey(e.name);if(D(e.destroy?tu():e,!0),n&&!1!==y&&S){let n=e.name;if(e.destroy)n=L.current||n;else if(void 0!==t){let[e,o]=t;n=[e].concat((0,r.Z)(o)),L.current=n}S(e,n)}}}),(n,o,a)=>{let l=X(t).length&&o?o.name:[],s=G(l,w),f=void 0!==p?p:!!(d&&d.some(e=>{if(e&&"object"==typeof e&&e.required&&!e.warningOnly)return!0;if("function"==typeof e){let t=e(a);return t&&t.required&&!t.warningOnly}return!1})),m=Object.assign({},n),g=null;if(Array.isArray(E)&&k)g=E;else if(C&&(!(u||i)||k));else if(!i||C||k){if((0,en.l$)(E)){let t=Object.assign(Object.assign({},E.props),m);if(t.id||(t.id=s),y||V.length>0||q.length>0||e.extra){let n=[];(y||V.length>0)&&n.push("".concat(s,"_help")),e.extra&&n.push("".concat(s,"_extra")),t["aria-describedby"]=n.join(" ")}V.length>0&&(t["aria-invalid"]="true"),f&&(t["aria-required"]="true"),(0,et.Yr)(E)&&(t.ref=U(l,E)),new Set([].concat((0,r.Z)(X(h)),(0,r.Z)(X(Z)))).forEach(e=>{t[e]=function(){for(var t,n,r,o=arguments.length,a=Array(o),i=0;it.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};J.Item=td,J.List=e=>{var{prefixCls:t,children:n}=e,r=tf(e,["prefixCls","children"]);let{getPrefixCls:o}=c.useContext(T.E_),a=o("form",t),i=c.useMemo(()=>({prefixCls:a,status:"error"}),[a]);return c.createElement(I.aV,Object.assign({},r),(e,t,r)=>c.createElement(s.Rk.Provider,{value:i},n(e.map(e=>Object.assign(Object.assign({},e),{fieldKey:e.key})),t,{errors:r.errors,warnings:r.warnings})))},J.ErrorList=N,J.useForm=$,J.useFormInstance=function(){let{form:e}=(0,c.useContext)(s.q3);return e},J.useWatch=I.qo,J.Provider=s.RV,J.create=()=>{};var tp=J},2519:function(e,t,n){var r=n(4090);t.Z=(0,r.createContext)(void 0)},8707:function(e,t,n){n.d(t,{Z:function(){return em}});var r=n(4090),o=n(383),a=n(2110),i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M890.5 755.3L537.9 269.2c-12.8-17.6-39-17.6-51.7 0L133.5 755.3A8 8 0 00140 768h75c5.1 0 9.9-2.5 12.9-6.6L512 369.8l284.1 391.6c3 4.1 7.8 6.6 12.9 6.6h75c6.5 0 10.3-7.4 6.5-12.7z"}}]},name:"up",theme:"outlined"},c=n(688),l=r.forwardRef(function(e,t){return r.createElement(c.Z,(0,a.Z)({},e,{ref:t,icon:i}))}),s=n(6480),u=n.n(s),d=n(833),f=n(6976),p=n(406),m=n(6787),g=n(7365),h=n(5127);function v(){return"function"==typeof BigInt}function b(e){return!e&&0!==e&&!Number.isNaN(e)||!String(e).trim()}function y(e){var t=e.trim(),n=t.startsWith("-");n&&(t=t.slice(1)),(t=t.replace(/(\.\d*[^0])0*$/,"$1").replace(/\.0*$/,"").replace(/^0+/,"")).startsWith(".")&&(t="0".concat(t));var r=t||"0",o=r.split("."),a=o[0]||"0",i=o[1]||"0";"0"===a&&"0"===i&&(n=!1);var c=n?"-":"";return{negative:n,negativeStr:c,trimStr:r,integerStr:a,decimalStr:i,fullStr:"".concat(c).concat(r)}}function x(e){var t=String(e);return!Number.isNaN(Number(t))&&t.includes("e")}function w(e){var t=String(e);if(x(e)){var n=Number(t.slice(t.indexOf("e-")+2)),r=t.match(/\.(\d+)/);return null!=r&&r[1]&&(n+=r[1].length),n}return t.includes(".")&&C(t)?t.length-t.indexOf(".")-1:0}function E(e){var t=String(e);if(x(e)){if(e>Number.MAX_SAFE_INTEGER)return String(v()?BigInt(e).toString():Number.MAX_SAFE_INTEGER);if(e=this.add(e.negate().toString()).toNumber()}},{key:"toNumber",value:function(){return this.isNaN()?NaN:Number(this.toString())}},{key:"toString",value:function(){var e=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return e?this.isInvalidate()?"":y("".concat(this.getMark()).concat(this.getIntegerStr(),".").concat(this.getDecimalStr())).fullStr:this.origin}}]),e}(),O=function(){function e(t){if((0,g.Z)(this,e),(0,d.Z)(this,"origin",""),(0,d.Z)(this,"number",void 0),(0,d.Z)(this,"empty",void 0),b(t)){this.empty=!0;return}this.origin=String(t),this.number=Number(t)}return(0,h.Z)(e,[{key:"negate",value:function(){return new e(-this.toNumber())}},{key:"add",value:function(t){if(this.isInvalidate())return new e(t);var n=Number(t);if(Number.isNaN(n))return this;var r=this.number+n;if(r>Number.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(rNumber.MAX_SAFE_INTEGER)return new e(Number.MAX_SAFE_INTEGER);if(r=this.add(e.negate().toString()).toNumber()}},{key:"toNumber",value:function(){return this.number}},{key:"toString",value:function(){var e=!(arguments.length>0)||void 0===arguments[0]||arguments[0];return e?this.isInvalidate()?"":E(this.number):this.origin}}]),e}();function Z(e){return v()?new S(e):new O(e)}function k(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(""===e)return"";var o=y(e),a=o.negativeStr,i=o.integerStr,c=o.decimalStr,l="".concat(t).concat(c),s="".concat(a).concat(i);if(n>=0){var u=Number(c[n]);return u>=5&&!r?k(Z(e).add("".concat(a,"0.").concat("0".repeat(n)).concat(10-u)).toString(),t,n,r):0===n?s:"".concat(s).concat(t).concat(c.padEnd(n,"0").slice(0,n))}return".0"===l?s:"".concat(s).concat(l)}var R=n(89),M=n(4800),j=n(4084),P=n(3850),N=n(6158),I=function(){var e=(0,r.useState)(!1),t=(0,p.Z)(e,2),n=t[0],o=t[1];return(0,M.Z)(function(){o((0,N.Z)())},[]),n},T=n(9223);function A(e){var t=e.prefixCls,n=e.upNode,o=e.downNode,i=e.upDisabled,c=e.downDisabled,l=e.onStep,s=r.useRef(),f=r.useRef([]),p=r.useRef();p.current=l;var m=function(){clearTimeout(s.current)},g=function(e,t){e.preventDefault(),m(),p.current(t),s.current=setTimeout(function e(){p.current(t),s.current=setTimeout(e,200)},600)};if(r.useEffect(function(){return function(){m(),f.current.forEach(function(e){return T.Z.cancel(e)})}},[]),I())return null;var h="".concat(t,"-handler"),v=u()(h,"".concat(h,"-up"),(0,d.Z)({},"".concat(h,"-up-disabled"),i)),b=u()(h,"".concat(h,"-down"),(0,d.Z)({},"".concat(h,"-down-disabled"),c)),y=function(){return f.current.push((0,T.Z)(m))},x={unselectable:"on",role:"button",onMouseUp:y,onMouseLeave:y};return r.createElement("div",{className:"".concat(h,"-wrap")},r.createElement("span",(0,a.Z)({},x,{onMouseDown:function(e){g(e,!0)},"aria-label":"Increase Value","aria-disabled":i,className:v}),n||r.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-up-inner")})),r.createElement("span",(0,a.Z)({},x,{onMouseDown:function(e){g(e,!1)},"aria-label":"Decrease Value","aria-disabled":c,className:b}),o||r.createElement("span",{unselectable:"on",className:"".concat(t,"-handler-down-inner")})))}function F(e){var t="number"==typeof e?E(e):y(e).fullStr;return t.includes(".")?y(t.replace(/(\d)\.(\d)/g,"$1$2.")).fullStr:e+"0"}var z=n(8002),L=["prefixCls","className","style","min","max","step","defaultValue","value","disabled","readOnly","upHandler","downHandler","keyboard","wheel","controls","classNames","stringMode","parser","formatter","precision","decimalSeparator","onChange","onInput","onPressEnter","onStep","changeOnBlur"],_=["disabled","style","prefixCls","value","prefix","suffix","addonBefore","addonAfter","className","classNames"],B=function(e,t){return e||t.isEmpty()?t.toString():t.toNumber()},H=function(e){var t=Z(e);return t.isInvalidate()?null:t},D=r.forwardRef(function(e,t){var n,o,i,c,l,s=e.prefixCls,g=void 0===s?"rc-input-number":s,h=e.className,v=e.style,b=e.min,y=e.max,x=e.step,S=void 0===x?1:x,O=e.defaultValue,R=e.value,N=e.disabled,I=e.readOnly,z=e.upHandler,_=e.downHandler,D=e.keyboard,W=e.wheel,V=e.controls,q=(e.classNames,e.stringMode),X=e.parser,G=e.formatter,U=e.precision,K=e.decimalSeparator,$=e.onChange,Y=e.onInput,Q=e.onPressEnter,J=e.onStep,ee=e.changeOnBlur,et=void 0===ee||ee,en=(0,m.Z)(e,L),er="".concat(g,"-input"),eo=r.useRef(null),ea=r.useState(!1),ei=(0,p.Z)(ea,2),ec=ei[0],el=ei[1],es=r.useRef(!1),eu=r.useRef(!1),ed=r.useRef(!1),ef=r.useState(function(){return Z(null!=R?R:O)}),ep=(0,p.Z)(ef,2),em=ep[0],eg=ep[1],eh=r.useCallback(function(e,t){return t?void 0:U>=0?U:Math.max(w(e),w(S))},[U,S]),ev=r.useCallback(function(e){var t=String(e);if(X)return X(t);var n=t;return K&&(n=n.replace(K,".")),n.replace(/[^\w.-]+/g,"")},[X,K]),eb=r.useRef(""),ey=r.useCallback(function(e,t){if(G)return G(e,{userTyping:t,input:String(eb.current)});var n="number"==typeof e?E(e):e;if(!t){var r=eh(n,t);C(n)&&(K||r>=0)&&(n=k(n,K||".",r))}return n},[G,eh,K]),ex=r.useState(function(){var e=null!=O?O:R;return em.isInvalidate()&&["string","number"].includes((0,f.Z)(e))?Number.isNaN(e)?"":e:ey(em.toString(),!1)}),ew=(0,p.Z)(ex,2),eE=ew[0],eC=ew[1];function eS(e,t){eC(ey(e.isInvalidate()?e.toString(!1):e.toString(!t),t))}eb.current=eE;var eO=r.useMemo(function(){return H(y)},[y,U]),eZ=r.useMemo(function(){return H(b)},[b,U]),ek=r.useMemo(function(){return!(!eO||!em||em.isInvalidate())&&eO.lessEquals(em)},[eO,em]),eR=r.useMemo(function(){return!(!eZ||!em||em.isInvalidate())&&em.lessEquals(eZ)},[eZ,em]),eM=(n=eo.current,o=(0,r.useRef)(null),[function(){try{var e=n.selectionStart,t=n.selectionEnd,r=n.value,a=r.substring(0,e),i=r.substring(t);o.current={start:e,end:t,value:r,beforeTxt:a,afterTxt:i}}catch(e){}},function(){if(n&&o.current&&ec)try{var e=n.value,t=o.current,r=t.beforeTxt,a=t.afterTxt,i=t.start,c=e.length;if(e.endsWith(a))c=e.length-o.current.afterTxt.length;else if(e.startsWith(r))c=r.length;else{var l=r[i-1],s=e.indexOf(l,i-1);-1!==s&&(c=s+1)}n.setSelectionRange(c,c)}catch(e){(0,P.ZP)(!1,"Something warning of cursor restore. Please fire issue about this: ".concat(e.message))}}]),ej=(0,p.Z)(eM,2),eP=ej[0],eN=ej[1],eI=function(e){return eO&&!e.lessEquals(eO)?eO:eZ&&!eZ.lessEquals(e)?eZ:null},eT=function(e){return!eI(e)},eA=function(e,t){var n=e,r=eT(n)||n.isEmpty();if(n.isEmpty()||t||(n=eI(n)||n,r=!0),!I&&!N&&r){var o,a=n.toString(),i=eh(a,t);return i>=0&&!eT(n=Z(k(a,".",i)))&&(n=Z(k(a,".",i,!0))),n.equals(em)||(o=n,void 0===R&&eg(o),null==$||$(n.isEmpty()?null:B(q,n)),void 0===R&&eS(n,t)),n}return em},eF=(i=(0,r.useRef)(0),c=function(){T.Z.cancel(i.current)},(0,r.useEffect)(function(){return c},[]),function(e){c(),i.current=(0,T.Z)(function(){e()})}),ez=function e(t){if(eP(),eb.current=t,eC(t),!eu.current){var n=Z(ev(t));n.isNaN()||eA(n,!0)}null==Y||Y(t),eF(function(){var n=t;X||(n=t.replace(/。/g,".")),n!==t&&e(n)})},eL=function(e){if((!e||!ek)&&(e||!eR)){es.current=!1;var t,n=Z(ed.current?F(S):S);e||(n=n.negate());var r=eA((em||Z(0)).add(n.toString()),!1);null==J||J(B(q,r),{offset:ed.current?F(S):S,type:e?"up":"down"}),null===(t=eo.current)||void 0===t||t.focus()}},e_=function(e){var t=Z(ev(eE)),n=t;n=t.isNaN()?eA(em,e):eA(t,e),void 0!==R?eS(em,!1):n.isNaN()||eS(n,!1)};return r.useEffect(function(){var e=function(e){!1!==W&&(eL(e.deltaY<0),e.preventDefault())},t=eo.current;if(t)return t.addEventListener("wheel",e),function(){return t.removeEventListener("wheel",e)}},[eL]),(0,M.o)(function(){em.isInvalidate()||eS(em,!1)},[U,G]),(0,M.o)(function(){var e=Z(R);eg(e);var t=Z(ev(eE));e.equals(t)&&es.current&&!G||eS(e,es.current)},[R]),(0,M.o)(function(){G&&eN()},[eE]),r.createElement("div",{className:u()(g,h,(l={},(0,d.Z)(l,"".concat(g,"-focused"),ec),(0,d.Z)(l,"".concat(g,"-disabled"),N),(0,d.Z)(l,"".concat(g,"-readonly"),I),(0,d.Z)(l,"".concat(g,"-not-a-number"),em.isNaN()),(0,d.Z)(l,"".concat(g,"-out-of-range"),!em.isInvalidate()&&!eT(em)),l)),style:v,onFocus:function(){el(!0)},onBlur:function(){et&&e_(!1),el(!1),es.current=!1},onKeyDown:function(e){var t=e.key,n=e.shiftKey;es.current=!0,ed.current=n,"Enter"===t&&(eu.current||(es.current=!1),e_(!1),null==Q||Q(e)),!1!==D&&!eu.current&&["Up","ArrowUp","Down","ArrowDown"].includes(t)&&(eL("Up"===t||"ArrowUp"===t),e.preventDefault())},onKeyUp:function(){es.current=!1,ed.current=!1},onCompositionStart:function(){eu.current=!0},onCompositionEnd:function(){eu.current=!1,ez(eo.current.value)},onBeforeInput:function(){es.current=!0}},(void 0===V||V)&&r.createElement(A,{prefixCls:g,upNode:z,downNode:_,upDisabled:ek,downDisabled:eR,onStep:eL}),r.createElement("div",{className:"".concat(er,"-wrap")},r.createElement("input",(0,a.Z)({autoComplete:"off",role:"spinbutton","aria-valuemin":b,"aria-valuemax":y,"aria-valuenow":em.isInvalidate()?null:em.toString(),step:S},en,{ref:(0,j.sQ)(eo,t),className:er,value:eE,onChange:function(e){ez(e.target.value)},disabled:N,readOnly:I}))))}),W=r.forwardRef(function(e,t){var n=e.disabled,o=e.style,i=e.prefixCls,c=e.value,l=e.prefix,s=e.suffix,u=e.addonBefore,d=e.addonAfter,f=e.className,p=e.classNames,g=(0,m.Z)(e,_),h=r.useRef(null);return r.createElement(R.Q,{className:f,triggerFocus:function(e){h.current&&(0,z.nH)(h.current,e)},prefixCls:i,value:c,disabled:n,style:o,prefix:l,suffix:s,addonAfter:d,addonBefore:u,classNames:p,components:{affixWrapper:"div",groupWrapper:"div",wrapper:"div",groupAddon:"div"}},r.createElement(D,(0,a.Z)({prefixCls:i,disabled:n,ref:(0,j.sQ)(h,t),className:null==p?void 0:p.input},g)))});W.displayName="InputNumber";var V=n(7794),q=n(7499),X=n(4165),G=n(7094),U=n(2935),K=n(4629),$=n(7137),Y=n(8443),Q=n(2801),J=n(8985),ee=n(4759),et=n(5980),en=n(1892),er=n(1303),eo=n(2288),ea=n(6585),ei=n(316),ec=n(6336);let el=(e,t)=>{let{componentCls:n,borderRadiusSM:r,borderRadiusLG:o}=e,a="lg"===t?o:r;return{["&-".concat(t)]:{["".concat(n,"-handler-wrap")]:{borderStartEndRadius:a,borderEndEndRadius:a},["".concat(n,"-handler-up")]:{borderStartEndRadius:a},["".concat(n,"-handler-down")]:{borderEndEndRadius:a}}}},es=e=>{let{componentCls:t,lineWidth:n,lineType:r,borderRadius:o,fontSizeLG:a,controlHeightLG:i,controlHeightSM:c,colorError:l,paddingInlineSM:s,paddingBlockSM:u,paddingBlockLG:d,paddingInlineLG:f,colorTextDescription:p,motionDurationMid:m,handleHoverColor:g,paddingInline:h,paddingBlock:v,handleBg:b,handleActiveBg:y,colorTextDisabled:x,borderRadiusSM:w,borderRadiusLG:E,controlWidth:C,handleOpacity:S,handleBorderColor:O,filledHandleBg:Z,lineHeightLG:k,calc:R}=e;return[{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,er.Wf)(e)),(0,ee.ik)(e)),{display:"inline-block",width:C,margin:0,padding:0,borderRadius:o}),(0,en.qG)(e,{["".concat(t,"-handler-wrap")]:{background:b,["".concat(t,"-handler-down")]:{borderBlockStart:"".concat((0,J.bf)(n)," ").concat(r," ").concat(O)}}})),(0,en.H8)(e,{["".concat(t,"-handler-wrap")]:{background:Z,["".concat(t,"-handler-down")]:{borderBlockStart:"".concat((0,J.bf)(n)," ").concat(r," ").concat(O)}},"&:focus-within":{["".concat(t,"-handler-wrap")]:{background:b}}})),(0,en.Mu)(e)),{"&-rtl":{direction:"rtl",["".concat(t,"-input")]:{direction:"rtl"}},"&-lg":{padding:0,fontSize:a,lineHeight:k,borderRadius:E,["input".concat(t,"-input")]:{height:R(i).sub(R(n).mul(2)).equal(),padding:"".concat((0,J.bf)(d)," ").concat((0,J.bf)(f))}},"&-sm":{padding:0,borderRadius:w,["input".concat(t,"-input")]:{height:R(c).sub(R(n).mul(2)).equal(),padding:"".concat((0,J.bf)(u)," ").concat((0,J.bf)(s))}},"&-out-of-range":{["".concat(t,"-input-wrap")]:{input:{color:l}}},"&-group":Object.assign(Object.assign(Object.assign({},(0,er.Wf)(e)),(0,ee.s7)(e)),{"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",textAlign:"start",verticalAlign:"top",["".concat(t,"-affix-wrapper")]:{width:"100%"},"&-lg":{["".concat(t,"-group-addon")]:{borderRadius:E,fontSize:e.fontSizeLG}},"&-sm":{["".concat(t,"-group-addon")]:{borderRadius:w}}},(0,en.ir)(e)),(0,en.S5)(e)),{["&:not(".concat(t,"-compact-first-item):not(").concat(t,"-compact-last-item)").concat(t,"-compact-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderRadius:0}},["&:not(".concat(t,"-compact-last-item)").concat(t,"-compact-first-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartEndRadius:0,borderEndEndRadius:0}},["&:not(".concat(t,"-compact-first-item)").concat(t,"-compact-last-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartStartRadius:0,borderEndStartRadius:0}}})}),["&-disabled ".concat(t,"-input")]:{cursor:"not-allowed"},[t]:{"&-input":Object.assign(Object.assign(Object.assign(Object.assign({},(0,er.Wf)(e)),{width:"100%",padding:"".concat((0,J.bf)(v)," ").concat((0,J.bf)(h)),textAlign:"start",backgroundColor:"transparent",border:0,borderRadius:o,outline:0,transition:"all ".concat(m," linear"),appearance:"textfield",fontSize:"inherit"}),(0,ee.nz)(e.colorTextPlaceholder)),{'&[type="number"]::-webkit-inner-spin-button, &[type="number"]::-webkit-outer-spin-button':{margin:0,webkitAppearance:"none",appearance:"none"}})}})},{[t]:Object.assign(Object.assign(Object.assign({["&:hover ".concat(t,"-handler-wrap, &-focused ").concat(t,"-handler-wrap")]:{opacity:1},["".concat(t,"-handler-wrap")]:{position:"absolute",insetBlockStart:0,insetInlineEnd:0,width:e.handleWidth,height:"100%",borderStartStartRadius:0,borderStartEndRadius:o,borderEndEndRadius:o,borderEndStartRadius:0,opacity:S,display:"flex",flexDirection:"column",alignItems:"stretch",transition:"opacity ".concat(m," linear ").concat(m),["".concat(t,"-handler")]:{display:"flex",alignItems:"center",justifyContent:"center",flex:"auto",height:"40%",["\n ".concat(t,"-handler-up-inner,\n ").concat(t,"-handler-down-inner\n ")]:{marginInlineEnd:0,fontSize:e.handleFontSize}}},["".concat(t,"-handler")]:{height:"50%",overflow:"hidden",color:p,fontWeight:"bold",lineHeight:0,textAlign:"center",cursor:"pointer",borderInlineStart:"".concat((0,J.bf)(n)," ").concat(r," ").concat(O),transition:"all ".concat(m," linear"),"&:active":{background:y},"&:hover":{height:"60%",["\n ".concat(t,"-handler-up-inner,\n ").concat(t,"-handler-down-inner\n ")]:{color:g}},"&-up-inner, &-down-inner":Object.assign(Object.assign({},(0,er.Ro)()),{color:p,transition:"all ".concat(m," linear"),userSelect:"none"})},["".concat(t,"-handler-up")]:{borderStartEndRadius:o},["".concat(t,"-handler-down")]:{borderEndEndRadius:o}},el(e,"lg")),el(e,"sm")),{"&-disabled, &-readonly":{["".concat(t,"-handler-wrap")]:{display:"none"},["".concat(t,"-input")]:{color:"inherit"}},["\n ".concat(t,"-handler-up-disabled,\n ").concat(t,"-handler-down-disabled\n ")]:{cursor:"not-allowed"},["\n ".concat(t,"-handler-up-disabled:hover &-handler-up-inner,\n ").concat(t,"-handler-down-disabled:hover &-handler-down-inner\n ")]:{color:x}})}]},eu=e=>{let{componentCls:t,paddingBlock:n,paddingInline:r,inputAffixPadding:o,controlWidth:a,borderRadiusLG:i,borderRadiusSM:c,paddingInlineLG:l,paddingInlineSM:s,paddingBlockLG:u,paddingBlockSM:d}=e;return{["".concat(t,"-affix-wrapper")]:Object.assign(Object.assign({["input".concat(t,"-input")]:{padding:"".concat((0,J.bf)(n)," 0")}},(0,ee.ik)(e)),{position:"relative",display:"inline-flex",width:a,padding:0,paddingInlineStart:r,"&-lg":{borderRadius:i,paddingInlineStart:l,["input".concat(t,"-input")]:{padding:"".concat((0,J.bf)(u)," 0")}},"&-sm":{borderRadius:c,paddingInlineStart:s,["input".concat(t,"-input")]:{padding:"".concat((0,J.bf)(d)," 0")}},["&:not(".concat(t,"-disabled):hover")]:{zIndex:1},"&-focused, &:focus":{zIndex:1},["&-disabled > ".concat(t,"-disabled")]:{background:"transparent"},["> div".concat(t)]:{width:"100%",border:"none",outline:"none",["&".concat(t,"-focused")]:{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},["".concat(t,"-handler-wrap")]:{zIndex:2},[t]:{color:"inherit","&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center",pointerEvents:"none"},"&-prefix":{marginInlineEnd:o},"&-suffix":{position:"absolute",insetBlockStart:0,insetInlineEnd:0,zIndex:1,height:"100%",marginInlineEnd:r,marginInlineStart:o}}})}};var ed=(0,ea.I$)("InputNumber",e=>{let t=(0,ei.TS)(e,(0,et.e)(e));return[es(t),eu(t),(0,eo.c)(t)]},e=>{var t;let n=null!==(t=e.handleVisible)&&void 0!==t?t:"auto";return Object.assign(Object.assign({},(0,et.T)(e)),{controlWidth:90,handleWidth:e.controlHeightSM-2*e.lineWidth,handleFontSize:e.fontSize/2,handleVisible:n,handleActiveBg:e.colorFillAlter,handleBg:e.colorBgContainer,filledHandleBg:new ec.C(e.colorFillSecondary).onBackground(e.colorBgContainer).toHexString(),handleHoverColor:e.colorPrimary,handleBorderColor:e.colorBorder,handleOpacity:!0===n?1:0})},{unitless:{handleOpacity:!0}}),ef=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let ep=r.forwardRef((e,t)=>{let{getPrefixCls:n,direction:a}=r.useContext(q.E_),i=r.useRef(null);r.useImperativeHandle(t,()=>i.current);let{className:c,rootClassName:s,size:d,disabled:f,prefixCls:p,addonBefore:m,addonAfter:g,prefix:h,bordered:v,readOnly:b,status:y,controls:x,variant:w}=e,E=ef(e,["className","rootClassName","size","disabled","prefixCls","addonBefore","addonAfter","prefix","bordered","readOnly","status","controls","variant"]),C=n("input-number",p),S=(0,U.Z)(C),[O,Z,k]=ed(C,S),{compactSize:R,compactItemClassnames:M}=(0,Q.ri)(C,a),j=r.createElement(l,{className:"".concat(C,"-handler-up-inner")}),P=r.createElement(o.Z,{className:"".concat(C,"-handler-down-inner")});"object"==typeof x&&(j=void 0===x.upIcon?j:r.createElement("span",{className:"".concat(C,"-handler-up-inner")},x.upIcon),P=void 0===x.downIcon?P:r.createElement("span",{className:"".concat(C,"-handler-down-inner")},x.downIcon));let{hasFeedback:N,status:I,isFormItemInput:T,feedbackIcon:A}=r.useContext($.aM),F=(0,V.F)(I,y),z=(0,K.Z)(e=>{var t;return null!==(t=null!=d?d:R)&&void 0!==t?t:e}),L=r.useContext(G.Z),[_,B]=(0,Y.Z)(w,v),H=N&&r.createElement(r.Fragment,null,A),D=u()({["".concat(C,"-lg")]:"large"===z,["".concat(C,"-sm")]:"small"===z,["".concat(C,"-rtl")]:"rtl"===a,["".concat(C,"-in-form-item")]:T},Z),X="".concat(C,"-group");return O(r.createElement(W,Object.assign({ref:i,disabled:null!=f?f:L,className:u()(k,S,c,s,M),upHandler:j,downHandler:P,prefixCls:C,readOnly:b,controls:"boolean"==typeof x?x:void 0,prefix:h,suffix:H,addonAfter:g&&r.createElement(Q.BR,null,r.createElement($.Ux,{override:!0,status:!0},g)),addonBefore:m&&r.createElement(Q.BR,null,r.createElement($.Ux,{override:!0,status:!0},m)),classNames:{input:D,variant:u()({["".concat(C,"-").concat(_)]:B},(0,V.Z)(C,F,N)),affixWrapper:u()({["".concat(C,"-affix-wrapper-sm")]:"small"===z,["".concat(C,"-affix-wrapper-lg")]:"large"===z,["".concat(C,"-affix-wrapper-rtl")]:"rtl"===a},Z),wrapper:u()({["".concat(X,"-rtl")]:"rtl"===a},Z),groupWrapper:u()({["".concat(C,"-group-wrapper-sm")]:"small"===z,["".concat(C,"-group-wrapper-lg")]:"large"===z,["".concat(C,"-group-wrapper-rtl")]:"rtl"===a,["".concat(C,"-group-wrapper-").concat(_)]:B},(0,V.Z)("".concat(C,"-group-wrapper"),F,N),Z)}},E)))});ep._InternalPanelDoNotUseOrYouWillBeFired=e=>r.createElement(X.ZP,{theme:{components:{InputNumber:{handleVisible:!0}}}},r.createElement(ep,Object.assign({},e)));var em=ep},9714:function(e,t,n){n.d(t,{Z:function(){return ea}});var r,o=n(4090),a=n(6480),i=n.n(a),c=n(7499),l=n(7137),s=n(4759),u=n(89),d=n(4084),f=n(7794),p=n(7094),m=n(4629),g=n(2801);function h(e,t){let n=(0,o.useRef)([]),r=()=>{n.current.push(setTimeout(()=>{var t,n,r,o;(null===(t=e.current)||void 0===t?void 0:t.input)&&(null===(n=e.current)||void 0===n?void 0:n.input.getAttribute("type"))==="password"&&(null===(r=e.current)||void 0===r?void 0:r.input.hasAttribute("value"))&&(null===(o=e.current)||void 0===o||o.input.removeAttribute("value"))}))};return(0,o.useEffect)(()=>(t&&r(),()=>n.current.forEach(e=>{e&&clearTimeout(e)})),[]),r}var v=n(2935),b=n(8443),y=n(7136),x=e=>{let t;return"object"==typeof e&&(null==e?void 0:e.clearIcon)?t=e:e&&(t={clearIcon:o.createElement(y.Z,null)}),t},w=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let E=(0,o.forwardRef)((e,t)=>{var n;let{prefixCls:r,bordered:a=!0,status:y,size:E,disabled:C,onBlur:S,onFocus:O,suffix:Z,allowClear:k,addonAfter:R,addonBefore:M,className:j,style:P,styles:N,rootClassName:I,onChange:T,classNames:A,variant:F}=e,z=w(e,["prefixCls","bordered","status","size","disabled","onBlur","onFocus","suffix","allowClear","addonAfter","addonBefore","className","style","styles","rootClassName","onChange","classNames","variant"]),{getPrefixCls:L,direction:_,input:B}=o.useContext(c.E_),H=L("input",r),D=(0,o.useRef)(null),W=(0,v.Z)(H),[V,q,X]=(0,s.ZP)(H,W),{compactSize:G,compactItemClassnames:U}=(0,g.ri)(H,_),K=(0,m.Z)(e=>{var t;return null!==(t=null!=E?E:G)&&void 0!==t?t:e}),$=o.useContext(p.Z),{status:Y,hasFeedback:Q,feedbackIcon:J}=(0,o.useContext)(l.aM),ee=(0,f.F)(Y,y),et=!!(e.prefix||e.suffix||e.allowClear||e.showCount)||!!Q;(0,o.useRef)(et);let en=h(D,!0),er=(Q||Z)&&o.createElement(o.Fragment,null,Z,Q&&J),eo=x(k),[ea,ei]=(0,b.Z)(F,a);return V(o.createElement(u.Z,Object.assign({ref:(0,d.sQ)(t,D),prefixCls:H,autoComplete:null==B?void 0:B.autoComplete},z,{disabled:null!=C?C:$,onBlur:e=>{en(),null==S||S(e)},onFocus:e=>{en(),null==O||O(e)},style:Object.assign(Object.assign({},null==B?void 0:B.style),P),styles:Object.assign(Object.assign({},null==B?void 0:B.styles),N),suffix:er,allowClear:eo,className:i()(j,I,X,W,U,null==B?void 0:B.className),onChange:e=>{en(),null==T||T(e)},addonAfter:R&&o.createElement(g.BR,null,o.createElement(l.Ux,{override:!0,status:!0},R)),addonBefore:M&&o.createElement(g.BR,null,o.createElement(l.Ux,{override:!0,status:!0},M)),classNames:Object.assign(Object.assign(Object.assign({},A),null==B?void 0:B.classNames),{input:i()({["".concat(H,"-sm")]:"small"===K,["".concat(H,"-lg")]:"large"===K,["".concat(H,"-rtl")]:"rtl"===_},null==A?void 0:A.input,null===(n=null==B?void 0:B.classNames)||void 0===n?void 0:n.input,q),variant:i()({["".concat(H,"-").concat(ea)]:ei},(0,f.Z)(H,ee)),affixWrapper:i()({["".concat(H,"-affix-wrapper-sm")]:"small"===K,["".concat(H,"-affix-wrapper-lg")]:"large"===K,["".concat(H,"-affix-wrapper-rtl")]:"rtl"===_},q),wrapper:i()({["".concat(H,"-group-rtl")]:"rtl"===_},q),groupWrapper:i()({["".concat(H,"-group-wrapper-sm")]:"small"===K,["".concat(H,"-group-wrapper-lg")]:"large"===K,["".concat(H,"-group-wrapper-rtl")]:"rtl"===_,["".concat(H,"-group-wrapper-").concat(ea)]:ei},(0,f.Z)("".concat(H,"-group-wrapper"),ee,Q),q)})})))});var C=n(2110),S={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2Q889.47 375.11 816.7 305l-50.88 50.88C807.31 395.53 843.45 447.4 874.7 512 791.5 684.2 673.4 766 512 766q-72.67 0-133.87-22.38L323 798.75Q408 838 512 838q288.3 0 430.2-300.3a60.29 60.29 0 000-51.5zm-63.57-320.64L836 122.88a8 8 0 00-11.32 0L715.31 232.2Q624.86 186 512 186q-288.3 0-430.2 300.3a60.3 60.3 0 000 51.5q56.69 119.4 136.5 191.41L112.48 835a8 8 0 000 11.31L155.17 889a8 8 0 0011.31 0l712.15-712.12a8 8 0 000-11.32zM149.3 512C232.6 339.8 350.7 258 512 258c54.54 0 104.13 9.36 149.12 28.39l-70.3 70.3a176 176 0 00-238.13 238.13l-83.42 83.42C223.1 637.49 183.3 582.28 149.3 512zm246.7 0a112.11 112.11 0 01146.2-106.69L401.31 546.2A112 112 0 01396 512z"}},{tag:"path",attrs:{d:"M508 624c-3.46 0-6.87-.16-10.25-.47l-52.82 52.82a176.09 176.09 0 00227.42-227.42l-52.82 52.82c.31 3.38.47 6.79.47 10.25a111.94 111.94 0 01-112 112z"}}]},name:"eye-invisible",theme:"outlined"},O=n(688),Z=o.forwardRef(function(e,t){return o.createElement(O.Z,(0,C.Z)({},e,{ref:t,icon:S}))}),k={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"},R=o.forwardRef(function(e,t){return o.createElement(O.Z,(0,C.Z)({},e,{ref:t,icon:k}))}),M=n(5704),j=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let P=e=>e?o.createElement(R,null):o.createElement(Z,null),N={click:"onClick",hover:"onMouseOver"},I=o.forwardRef((e,t)=>{let{visibilityToggle:n=!0}=e,r="object"==typeof n&&void 0!==n.visible,[a,l]=(0,o.useState)(()=>!!r&&n.visible),s=(0,o.useRef)(null);o.useEffect(()=>{r&&l(n.visible)},[r,n]);let u=h(s),f=()=>{let{disabled:t}=e;t||(a&&u(),l(e=>{var t;let r=!e;return"object"==typeof n&&(null===(t=n.onVisibleChange)||void 0===t||t.call(n,r)),r}))},{className:p,prefixCls:m,inputPrefixCls:g,size:v}=e,b=j(e,["className","prefixCls","inputPrefixCls","size"]),{getPrefixCls:y}=o.useContext(c.E_),x=y("input",g),w=y("input-password",m),C=n&&(t=>{let{action:n="click",iconRender:r=P}=e,i=N[n]||"",c=r(a);return o.cloneElement(o.isValidElement(c)?c:o.createElement("span",null,c),{[i]:f,className:"".concat(t,"-icon"),key:"passwordIcon",onMouseDown:e=>{e.preventDefault()},onMouseUp:e=>{e.preventDefault()}})})(w),S=i()(w,p,{["".concat(w,"-").concat(v)]:!!v}),O=Object.assign(Object.assign({},(0,M.Z)(b,["suffix","iconRender","visibilityToggle"])),{type:a?"text":"password",className:S,prefixCls:x,suffix:C});return v&&(O.size=v),o.createElement(E,Object.assign({ref:(0,d.sQ)(t,s)},O))});var T=n(6871),A=n(5823),F=n(1861),z=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let L=o.forwardRef((e,t)=>{let n;let{prefixCls:r,inputPrefixCls:a,className:l,size:s,suffix:u,enterButton:f=!1,addonAfter:p,loading:h,disabled:v,onSearch:b,onChange:y,onCompositionStart:x,onCompositionEnd:w}=e,C=z(e,["prefixCls","inputPrefixCls","className","size","suffix","enterButton","addonAfter","loading","disabled","onSearch","onChange","onCompositionStart","onCompositionEnd"]),{getPrefixCls:S,direction:O}=o.useContext(c.E_),Z=o.useRef(!1),k=S("input-search",r),R=S("input",a),{compactSize:M}=(0,g.ri)(k,O),j=(0,m.Z)(e=>{var t;return null!==(t=null!=s?s:M)&&void 0!==t?t:e}),P=o.useRef(null),N=e=>{var t;document.activeElement===(null===(t=P.current)||void 0===t?void 0:t.input)&&e.preventDefault()},I=e=>{var t,n;b&&b(null===(n=null===(t=P.current)||void 0===t?void 0:t.input)||void 0===n?void 0:n.value,e,{source:"input"})},L="boolean"==typeof f?o.createElement(T.Z,null):null,_="".concat(k,"-button"),B=f||{},H=B.type&&!0===B.type.__ANT_BUTTON;n=H||"button"===B.type?(0,A.Tm)(B,Object.assign({onMouseDown:N,onClick:e=>{var t,n;null===(n=null===(t=null==B?void 0:B.props)||void 0===t?void 0:t.onClick)||void 0===n||n.call(t,e),I(e)},key:"enterButton"},H?{className:_,size:j}:{})):o.createElement(F.ZP,{className:_,type:f?"primary":void 0,size:j,disabled:v,key:"enterButton",onMouseDown:N,onClick:I,loading:h,icon:L},f),p&&(n=[n,(0,A.Tm)(p,{key:"addonAfter"})]);let D=i()(k,{["".concat(k,"-rtl")]:"rtl"===O,["".concat(k,"-").concat(j)]:!!j,["".concat(k,"-with-button")]:!!f},l);return o.createElement(E,Object.assign({ref:(0,d.sQ)(P,t),onPressEnter:e=>{Z.current||h||I(e)}},C,{size:j,onCompositionStart:e=>{Z.current=!0,null==x||x(e)},onCompositionEnd:e=>{Z.current=!1,null==w||w(e)},prefixCls:R,addonAfter:n,suffix:u,onChange:e=>{e&&e.target&&"click"===e.type&&b&&b(e.target.value,e,{source:"clear"}),y&&y(e)},className:D,disabled:v}))});var _=n(833),B=n(5239),H=n(3787),D=n(406),W=n(6787),V=n(4607),q=n(8002),X=n(4329),G=n(6976),U=n(6505),K=n(4800),$=n(9223),Y=["letter-spacing","line-height","padding-top","padding-bottom","font-family","font-weight","font-size","font-variant","text-rendering","text-transform","width","text-indent","padding-left","padding-right","border-width","box-sizing","word-break","white-space"],Q={},J=["prefixCls","onPressEnter","defaultValue","value","autoSize","onResize","className","style","disabled","onChange","onInternalAutoSize"],ee=o.forwardRef(function(e,t){var n=e.prefixCls,a=(e.onPressEnter,e.defaultValue),c=e.value,l=e.autoSize,s=e.onResize,u=e.className,d=e.style,f=e.disabled,p=e.onChange,m=(e.onInternalAutoSize,(0,W.Z)(e,J)),g=(0,X.Z)(a,{value:c,postState:function(e){return null!=e?e:""}}),h=(0,D.Z)(g,2),v=h[0],b=h[1],y=o.useRef();o.useImperativeHandle(t,function(){return{textArea:y.current}});var x=o.useMemo(function(){return l&&"object"===(0,G.Z)(l)?[l.minRows,l.maxRows]:[]},[l]),w=(0,D.Z)(x,2),E=w[0],S=w[1],O=!!l,Z=function(){try{if(document.activeElement===y.current){var e=y.current,t=e.selectionStart,n=e.selectionEnd,r=e.scrollTop;y.current.setSelectionRange(t,n),y.current.scrollTop=r}}catch(e){}},k=o.useState(2),R=(0,D.Z)(k,2),M=R[0],j=R[1],P=o.useState(),N=(0,D.Z)(P,2),I=N[0],T=N[1],A=function(){j(0)};(0,K.Z)(function(){O&&A()},[c,E,S,O]),(0,K.Z)(function(){if(0===M)j(1);else if(1===M){var e=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;r||((r=document.createElement("textarea")).setAttribute("tab-index","-1"),r.setAttribute("aria-hidden","true"),document.body.appendChild(r)),e.getAttribute("wrap")?r.setAttribute("wrap",e.getAttribute("wrap")):r.removeAttribute("wrap");var i=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.getAttribute("id")||e.getAttribute("data-reactid")||e.getAttribute("name");if(t&&Q[n])return Q[n];var r=window.getComputedStyle(e),o=r.getPropertyValue("box-sizing")||r.getPropertyValue("-moz-box-sizing")||r.getPropertyValue("-webkit-box-sizing"),a=parseFloat(r.getPropertyValue("padding-bottom"))+parseFloat(r.getPropertyValue("padding-top")),i=parseFloat(r.getPropertyValue("border-bottom-width"))+parseFloat(r.getPropertyValue("border-top-width")),c={sizingStyle:Y.map(function(e){return"".concat(e,":").concat(r.getPropertyValue(e))}).join(";"),paddingSize:a,borderSize:i,boxSizing:o};return t&&n&&(Q[n]=c),c}(e,n),c=i.paddingSize,l=i.borderSize,s=i.boxSizing,u=i.sizingStyle;r.setAttribute("style","".concat(u,";").concat("\n min-height:0 !important;\n max-height:none !important;\n height:0 !important;\n visibility:hidden !important;\n overflow:hidden !important;\n position:absolute !important;\n z-index:-1000 !important;\n top:0 !important;\n right:0 !important;\n pointer-events: none !important;\n")),r.value=e.value||e.placeholder||"";var d=void 0,f=void 0,p=r.scrollHeight;if("border-box"===s?p+=l:"content-box"===s&&(p-=c),null!==o||null!==a){r.value=" ";var m=r.scrollHeight-c;null!==o&&(d=m*o,"border-box"===s&&(d=d+c+l),p=Math.max(d,p)),null!==a&&(f=m*a,"border-box"===s&&(f=f+c+l),t=p>f?"":"hidden",p=Math.min(f,p))}var g={height:p,overflowY:t,resize:"none"};return d&&(g.minHeight=d),f&&(g.maxHeight=f),g}(y.current,!1,E,S);j(2),T(e)}else Z()},[M]);var F=o.useRef(),z=function(){$.Z.cancel(F.current)};o.useEffect(function(){return z},[]);var L=(0,B.Z)((0,B.Z)({},d),O?I:null);return(0===M||1===M)&&(L.overflowY="hidden",L.overflowX="hidden"),o.createElement(U.Z,{onResize:function(e){2===M&&(null==s||s(e),l&&(z(),F.current=(0,$.Z)(function(){A()})))},disabled:!(l||s)},o.createElement("textarea",(0,C.Z)({},m,{ref:y,style:L,className:i()(n,u,(0,_.Z)({},"".concat(n,"-disabled"),f)),disabled:f,value:v,onChange:function(e){b(e.target.value),null==p||p(e)}})))}),et=["defaultValue","value","onFocus","onBlur","onChange","allowClear","maxLength","onCompositionStart","onCompositionEnd","suffix","prefixCls","showCount","count","className","style","disabled","hidden","classNames","styles","onResize"],en=o.forwardRef(function(e,t){var n,r,a,c=e.defaultValue,l=e.value,s=e.onFocus,d=e.onBlur,f=e.onChange,p=e.allowClear,m=e.maxLength,g=e.onCompositionStart,h=e.onCompositionEnd,v=e.suffix,b=e.prefixCls,y=void 0===b?"rc-textarea":b,x=e.showCount,w=e.count,E=e.className,S=e.style,O=e.disabled,Z=e.hidden,k=e.classNames,R=e.styles,M=e.onResize,j=(0,W.Z)(e,et),P=(0,X.Z)(c,{value:l,defaultValue:c}),N=(0,D.Z)(P,2),I=N[0],T=N[1],A=null==I?"":String(I),F=o.useState(!1),z=(0,D.Z)(F,2),L=z[0],G=z[1],U=o.useRef(!1),K=o.useState(null),$=(0,D.Z)(K,2),Y=$[0],Q=$[1],J=(0,o.useRef)(null),en=function(){var e;return null===(e=J.current)||void 0===e?void 0:e.textArea},er=function(){en().focus()};(0,o.useImperativeHandle)(t,function(){return{resizableTextArea:J.current,focus:er,blur:function(){en().blur()}}}),(0,o.useEffect)(function(){G(function(e){return!O&&e})},[O]);var eo=o.useState(null),ea=(0,D.Z)(eo,2),ei=ea[0],ec=ea[1];o.useEffect(function(){if(ei){var e;(e=en()).setSelectionRange.apply(e,(0,H.Z)(ei))}},[ei]);var el=(0,V.Z)(w,x),es=null!==(n=el.max)&&void 0!==n?n:m,eu=Number(es)>0,ed=el.strategy(A),ef=!!es&&ed>es,ep=function(e,t){var n=t;!U.current&&el.exceedFormatter&&el.max&&el.strategy(t)>el.max&&(n=el.exceedFormatter(t,{max:el.max}),t!==n&&ec([en().selectionStart||0,en().selectionEnd||0])),T(n),(0,q.rJ)(e.currentTarget,e,f,n)},em=v;el.show&&(a=el.showFormatter?el.showFormatter({value:A,count:ed,maxLength:es}):"".concat(ed).concat(eu?" / ".concat(es):""),em=o.createElement(o.Fragment,null,em,o.createElement("span",{className:i()("".concat(y,"-data-count"),null==k?void 0:k.count),style:null==R?void 0:R.count},a)));var eg=!j.autoSize&&!x&&!p;return o.createElement(u.Q,{value:A,allowClear:p,handleReset:function(e){T(""),er(),(0,q.rJ)(en(),e,f)},suffix:em,prefixCls:y,classNames:(0,B.Z)((0,B.Z)({},k),{},{affixWrapper:i()(null==k?void 0:k.affixWrapper,(r={},(0,_.Z)(r,"".concat(y,"-show-count"),x),(0,_.Z)(r,"".concat(y,"-textarea-allow-clear"),p),r))}),disabled:O,focused:L,className:i()(E,ef&&"".concat(y,"-out-of-range")),style:(0,B.Z)((0,B.Z)({},S),Y&&!eg?{height:"auto"}:{}),dataAttrs:{affixWrapper:{"data-count":"string"==typeof a?a:void 0}},hidden:Z},o.createElement(ee,(0,C.Z)({},j,{maxLength:m,onKeyDown:function(e){var t=j.onPressEnter,n=j.onKeyDown;"Enter"===e.key&&t&&t(e),null==n||n(e)},onChange:function(e){ep(e,e.target.value)},onFocus:function(e){G(!0),null==s||s(e)},onBlur:function(e){G(!1),null==d||d(e)},onCompositionStart:function(e){U.current=!0,null==g||g(e)},onCompositionEnd:function(e){U.current=!1,ep(e,e.currentTarget.value),null==h||h(e)},className:i()(null==k?void 0:k.textarea),style:(0,B.Z)((0,B.Z)({},null==R?void 0:R.textarea),{},{resize:null==S?void 0:S.resize}),disabled:O,prefixCls:y,onResize:function(e){var t;null==M||M(e),null!==(t=en())&&void 0!==t&&t.style.height&&Q(!0)},ref:J})))}),er=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let eo=(0,o.forwardRef)((e,t)=>{var n;let r;let{prefixCls:a,bordered:u=!0,size:d,disabled:g,status:h,allowClear:x,classNames:w,rootClassName:E,className:C,variant:S}=e,O=er(e,["prefixCls","bordered","size","disabled","status","allowClear","classNames","rootClassName","className","variant"]),{getPrefixCls:Z,direction:k}=o.useContext(c.E_),R=(0,m.Z)(d),M=o.useContext(p.Z),{status:j,hasFeedback:P,feedbackIcon:N}=o.useContext(l.aM),I=(0,f.F)(j,h),T=o.useRef(null);o.useImperativeHandle(t,()=>{var e;return{resizableTextArea:null===(e=T.current)||void 0===e?void 0:e.resizableTextArea,focus:e=>{var t,n;!function(e,t){if(!e)return;e.focus(t);let{cursor:n}=t||{};if(n){let t=e.value.length;switch(n){case"start":e.setSelectionRange(0,0);break;case"end":e.setSelectionRange(t,t);break;default:e.setSelectionRange(0,t)}}}(null===(n=null===(t=T.current)||void 0===t?void 0:t.resizableTextArea)||void 0===n?void 0:n.textArea,e)},blur:()=>{var e;return null===(e=T.current)||void 0===e?void 0:e.blur()}}});let A=Z("input",a);"object"==typeof x&&(null==x?void 0:x.clearIcon)?r=x:x&&(r={clearIcon:o.createElement(y.Z,null)});let F=(0,v.Z)(A),[z,L,_]=(0,s.ZP)(A,F),[B,H]=(0,b.Z)(S,u);return z(o.createElement(en,Object.assign({},O,{disabled:null!=g?g:M,allowClear:r,className:i()(_,F,C,E),classNames:Object.assign(Object.assign({},w),{textarea:i()({["".concat(A,"-sm")]:"small"===R,["".concat(A,"-lg")]:"large"===R},L,null==w?void 0:w.textarea),variant:i()({["".concat(A,"-").concat(B)]:H},(0,f.Z)(A,I)),affixWrapper:i()("".concat(A,"-textarea-affix-wrapper"),{["".concat(A,"-affix-wrapper-rtl")]:"rtl"===k,["".concat(A,"-affix-wrapper-sm")]:"small"===R,["".concat(A,"-affix-wrapper-lg")]:"large"===R,["".concat(A,"-textarea-show-count")]:e.showCount||(null===(n=e.count)||void 0===n?void 0:n.show)},L)}),prefixCls:A,suffix:P&&o.createElement("span",{className:"".concat(A,"-textarea-suffix")},N),ref:T})))});E.Group=e=>{let{getPrefixCls:t,direction:n}=(0,o.useContext)(c.E_),{prefixCls:r,className:a}=e,u=t("input-group",r),d=t("input"),[f,p]=(0,s.ZP)(d),m=i()(u,{["".concat(u,"-lg")]:"large"===e.size,["".concat(u,"-sm")]:"small"===e.size,["".concat(u,"-compact")]:e.compact,["".concat(u,"-rtl")]:"rtl"===n},p,a),g=(0,o.useContext)(l.aM),h=(0,o.useMemo)(()=>Object.assign(Object.assign({},g),{isFormItemInput:!1}),[g]);return f(o.createElement("span",{className:m,style:e.style,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,onFocus:e.onFocus,onBlur:e.onBlur},o.createElement(l.aM.Provider,{value:h},e.children)))},E.Search=L,E.TextArea=eo,E.Password=I;var ea=E},4759:function(e,t,n){n.d(t,{ik:function(){return p},nz:function(){return u},s7:function(){return m}});var r=n(8985),o=n(1303),a=n(2288),i=n(6585),c=n(316),l=n(5980),s=n(1892);let u=e=>({"&::-moz-placeholder":{opacity:1},"&::placeholder":{color:e,userSelect:"none"},"&:placeholder-shown":{textOverflow:"ellipsis"}}),d=e=>{let{paddingBlockLG:t,lineHeightLG:n,borderRadiusLG:o,paddingInlineLG:a}=e;return{padding:"".concat((0,r.bf)(t)," ").concat((0,r.bf)(a)),fontSize:e.inputFontSizeLG,lineHeight:n,borderRadius:o}},f=e=>({padding:"".concat((0,r.bf)(e.paddingBlockSM)," ").concat((0,r.bf)(e.paddingInlineSM)),fontSize:e.inputFontSizeSM,borderRadius:e.borderRadiusSM}),p=e=>Object.assign(Object.assign({position:"relative",display:"inline-block",width:"100%",minWidth:0,padding:"".concat((0,r.bf)(e.paddingBlock)," ").concat((0,r.bf)(e.paddingInline)),color:e.colorText,fontSize:e.inputFontSize,lineHeight:e.lineHeight,borderRadius:e.borderRadius,transition:"all ".concat(e.motionDurationMid)},u(e.colorTextPlaceholder)),{"textarea&":{maxWidth:"100%",height:"auto",minHeight:e.controlHeight,lineHeight:e.lineHeight,verticalAlign:"bottom",transition:"all ".concat(e.motionDurationSlow,", height 0s"),resize:"vertical"},"&-lg":Object.assign({},d(e)),"&-sm":Object.assign({},f(e)),"&-rtl":{direction:"rtl"},"&-textarea-rtl":{direction:"rtl"}}),m=e=>{let{componentCls:t,antCls:n}=e;return{position:"relative",display:"table",width:"100%",borderCollapse:"separate",borderSpacing:0,"&[class*='col-']":{paddingInlineEnd:e.paddingXS,"&:last-child":{paddingInlineEnd:0}},["&-lg ".concat(t,", &-lg > ").concat(t,"-group-addon")]:Object.assign({},d(e)),["&-sm ".concat(t,", &-sm > ").concat(t,"-group-addon")]:Object.assign({},f(e)),["&-lg ".concat(n,"-select-single ").concat(n,"-select-selector")]:{height:e.controlHeightLG},["&-sm ".concat(n,"-select-single ").concat(n,"-select-selector")]:{height:e.controlHeightSM},["> ".concat(t)]:{display:"table-cell","&:not(:first-child):not(:last-child)":{borderRadius:0}},["".concat(t,"-group")]:{"&-addon, &-wrap":{display:"table-cell",width:1,whiteSpace:"nowrap",verticalAlign:"middle","&:not(:first-child):not(:last-child)":{borderRadius:0}},"&-wrap > *":{display:"block !important"},"&-addon":{position:"relative",padding:"0 ".concat((0,r.bf)(e.paddingInline)),color:e.colorText,fontWeight:"normal",fontSize:e.inputFontSize,textAlign:"center",borderRadius:e.borderRadius,transition:"all ".concat(e.motionDurationSlow),lineHeight:1,["".concat(n,"-select")]:{margin:"".concat((0,r.bf)(e.calc(e.paddingBlock).add(1).mul(-1).equal())," ").concat((0,r.bf)(e.calc(e.paddingInline).mul(-1).equal())),["&".concat(n,"-select-single:not(").concat(n,"-select-customize-input):not(").concat(n,"-pagination-size-changer)")]:{["".concat(n,"-select-selector")]:{backgroundColor:"inherit",border:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," transparent"),boxShadow:"none"}},"&-open, &-focused":{["".concat(n,"-select-selector")]:{color:e.colorPrimary}}},["".concat(n,"-cascader-picker")]:{margin:"-9px ".concat((0,r.bf)(e.calc(e.paddingInline).mul(-1).equal())),backgroundColor:"transparent",["".concat(n,"-cascader-input")]:{textAlign:"start",border:0,boxShadow:"none"}}}},["".concat(t)]:{width:"100%",marginBottom:0,textAlign:"inherit","&:focus":{zIndex:1,borderInlineEndWidth:1},"&:hover":{zIndex:1,borderInlineEndWidth:1,["".concat(t,"-search-with-button &")]:{zIndex:0}}},["> ".concat(t,":first-child, ").concat(t,"-group-addon:first-child")]:{borderStartEndRadius:0,borderEndEndRadius:0,["".concat(n,"-select ").concat(n,"-select-selector")]:{borderStartEndRadius:0,borderEndEndRadius:0}},["> ".concat(t,"-affix-wrapper")]:{["&:not(:first-child) ".concat(t)]:{borderStartStartRadius:0,borderEndStartRadius:0},["&:not(:last-child) ".concat(t)]:{borderStartEndRadius:0,borderEndEndRadius:0}},["> ".concat(t,":last-child, ").concat(t,"-group-addon:last-child")]:{borderStartStartRadius:0,borderEndStartRadius:0,["".concat(n,"-select ").concat(n,"-select-selector")]:{borderStartStartRadius:0,borderEndStartRadius:0}},["".concat(t,"-affix-wrapper")]:{"&:not(:last-child)":{borderStartEndRadius:0,borderEndEndRadius:0,["".concat(t,"-search &")]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius}},["&:not(:first-child), ".concat(t,"-search &:not(:first-child)")]:{borderStartStartRadius:0,borderEndStartRadius:0}},["&".concat(t,"-group-compact")]:Object.assign(Object.assign({display:"block"},(0,o.dF)()),{["".concat(t,"-group-addon, ").concat(t,"-group-wrap, > ").concat(t)]:{"&:not(:first-child):not(:last-child)":{borderInlineEndWidth:e.lineWidth,"&:hover":{zIndex:1},"&:focus":{zIndex:1}}},"& > *":{display:"inline-block",float:"none",verticalAlign:"top",borderRadius:0},["\n & > ".concat(t,"-affix-wrapper,\n & > ").concat(t,"-number-affix-wrapper,\n & > ").concat(n,"-picker-range\n ")]:{display:"inline-flex"},"& > *:not(:last-child)":{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderInlineEndWidth:e.lineWidth},["".concat(t)]:{float:"none"},["& > ".concat(n,"-select > ").concat(n,"-select-selector,\n & > ").concat(n,"-select-auto-complete ").concat(t,",\n & > ").concat(n,"-cascader-picker ").concat(t,",\n & > ").concat(t,"-group-wrapper ").concat(t)]:{borderInlineEndWidth:e.lineWidth,borderRadius:0,"&:hover":{zIndex:1},"&:focus":{zIndex:1}},["& > ".concat(n,"-select-focused")]:{zIndex:1},["& > ".concat(n,"-select > ").concat(n,"-select-arrow")]:{zIndex:1},["& > *:first-child,\n & > ".concat(n,"-select:first-child > ").concat(n,"-select-selector,\n & > ").concat(n,"-select-auto-complete:first-child ").concat(t,",\n & > ").concat(n,"-cascader-picker:first-child ").concat(t)]:{borderStartStartRadius:e.borderRadius,borderEndStartRadius:e.borderRadius},["& > *:last-child,\n & > ".concat(n,"-select:last-child > ").concat(n,"-select-selector,\n & > ").concat(n,"-cascader-picker:last-child ").concat(t,",\n & > ").concat(n,"-cascader-picker-focused:last-child ").concat(t)]:{borderInlineEndWidth:e.lineWidth,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius},["& > ".concat(n,"-select-auto-complete ").concat(t)]:{verticalAlign:"top"},["".concat(t,"-group-wrapper + ").concat(t,"-group-wrapper")]:{marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),["".concat(t,"-affix-wrapper")]:{borderRadius:0}},["".concat(t,"-group-wrapper:not(:last-child)")]:{["&".concat(t,"-search > ").concat(t,"-group")]:{["& > ".concat(t,"-group-addon > ").concat(t,"-search-button")]:{borderRadius:0},["& > ".concat(t)]:{borderStartStartRadius:e.borderRadius,borderStartEndRadius:0,borderEndEndRadius:0,borderEndStartRadius:e.borderRadius}}}})}},g=e=>{let{componentCls:t,controlHeightSM:n,lineWidth:r,calc:a}=e,i=a(n).sub(a(r).mul(2)).sub(16).div(2).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,o.Wf)(e)),p(e)),(0,s.qG)(e)),(0,s.H8)(e)),(0,s.Mu)(e)),{'&[type="color"]':{height:e.controlHeight,["&".concat(t,"-lg")]:{height:e.controlHeightLG},["&".concat(t,"-sm")]:{height:n,paddingTop:i,paddingBottom:i}},'&[type="search"]::-webkit-search-cancel-button, &[type="search"]::-webkit-search-decoration':{"-webkit-appearance":"none"}})}},h=e=>{let{componentCls:t}=e;return{["".concat(t,"-clear-icon")]:{margin:0,color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,verticalAlign:-1,cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"&:hover":{color:e.colorTextTertiary},"&:active":{color:e.colorText},"&-hidden":{visibility:"hidden"},"&-has-suffix":{margin:"0 ".concat((0,r.bf)(e.inputAffixPadding))}}}},v=e=>{let{componentCls:t,inputAffixPadding:n,colorTextDescription:r,motionDurationSlow:o,colorIcon:a,colorIconHover:i,iconCls:c}=e;return{["".concat(t,"-affix-wrapper")]:Object.assign(Object.assign(Object.assign(Object.assign({},p(e)),{display:"inline-flex",["&:not(".concat(t,"-disabled):hover")]:{zIndex:1,["".concat(t,"-search-with-button &")]:{zIndex:0}},"&-focused, &:focus":{zIndex:1},["> input".concat(t)]:{padding:0,fontSize:"inherit",border:"none",borderRadius:0,outline:"none",background:"transparent",color:"inherit","&::-ms-reveal":{display:"none"},"&:focus":{boxShadow:"none !important"}},"&::before":{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'},["".concat(t)]:{"&-prefix, &-suffix":{display:"flex",flex:"none",alignItems:"center","> *:not(:last-child)":{marginInlineEnd:e.paddingXS}},"&-show-count-suffix":{color:r},"&-show-count-has-suffix":{marginInlineEnd:e.paddingXXS},"&-prefix":{marginInlineEnd:n},"&-suffix":{marginInlineStart:n}}}),h(e)),{["".concat(c).concat(t,"-password-icon")]:{color:a,cursor:"pointer",transition:"all ".concat(o),"&:hover":{color:i}}})}},b=e=>{let{componentCls:t,borderRadiusLG:n,borderRadiusSM:r}=e;return{["".concat(t,"-group")]:Object.assign(Object.assign(Object.assign({},(0,o.Wf)(e)),m(e)),{"&-rtl":{direction:"rtl"},"&-wrapper":Object.assign(Object.assign(Object.assign({display:"inline-block",width:"100%",textAlign:"start",verticalAlign:"top","&-rtl":{direction:"rtl"},"&-lg":{["".concat(t,"-group-addon")]:{borderRadius:n,fontSize:e.inputFontSizeLG}},"&-sm":{["".concat(t,"-group-addon")]:{borderRadius:r}}},(0,s.ir)(e)),(0,s.S5)(e)),{["&:not(".concat(t,"-compact-first-item):not(").concat(t,"-compact-last-item)").concat(t,"-compact-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderRadius:0}},["&:not(".concat(t,"-compact-last-item)").concat(t,"-compact-first-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartEndRadius:0,borderEndEndRadius:0}},["&:not(".concat(t,"-compact-first-item)").concat(t,"-compact-last-item")]:{["".concat(t,", ").concat(t,"-group-addon")]:{borderStartStartRadius:0,borderEndStartRadius:0}}})})}},y=e=>{let{componentCls:t,antCls:n}=e,r="".concat(t,"-search");return{[r]:{["".concat(t)]:{"&:hover, &:focus":{borderColor:e.colorPrimaryHover,["+ ".concat(t,"-group-addon ").concat(r,"-button:not(").concat(n,"-btn-primary)")]:{borderInlineStartColor:e.colorPrimaryHover}}},["".concat(t,"-affix-wrapper")]:{borderRadius:0},["".concat(t,"-lg")]:{lineHeight:e.calc(e.lineHeightLG).sub(2e-4).equal({unit:!1})},["> ".concat(t,"-group")]:{["> ".concat(t,"-group-addon:last-child")]:{insetInlineStart:-1,padding:0,border:0,["".concat(r,"-button")]:{paddingTop:0,paddingBottom:0,borderStartStartRadius:0,borderStartEndRadius:e.borderRadius,borderEndEndRadius:e.borderRadius,borderEndStartRadius:0,boxShadow:"none"},["".concat(r,"-button:not(").concat(n,"-btn-primary)")]:{color:e.colorTextDescription,"&:hover":{color:e.colorPrimaryHover},"&:active":{color:e.colorPrimaryActive},["&".concat(n,"-btn-loading::before")]:{insetInlineStart:0,insetInlineEnd:0,insetBlockStart:0,insetBlockEnd:0}}}},["".concat(r,"-button")]:{height:e.controlHeight,"&:hover, &:focus":{zIndex:1}},["&-large ".concat(r,"-button")]:{height:e.controlHeightLG},["&-small ".concat(r,"-button")]:{height:e.controlHeightSM},"&-rtl":{direction:"rtl"},["&".concat(t,"-compact-item")]:{["&:not(".concat(t,"-compact-last-item)")]:{["".concat(t,"-group-addon")]:{["".concat(t,"-search-button")]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal(),borderRadius:0}}},["&:not(".concat(t,"-compact-first-item)")]:{["".concat(t,",").concat(t,"-affix-wrapper")]:{borderRadius:0}},["> ".concat(t,"-group-addon ").concat(t,"-search-button,\n > ").concat(t,",\n ").concat(t,"-affix-wrapper")]:{"&:hover,&:focus,&:active":{zIndex:2}},["> ".concat(t,"-affix-wrapper-focused")]:{zIndex:2}}}}},x=e=>{let{componentCls:t,paddingLG:n}=e,r="".concat(t,"-textarea");return{[r]:{position:"relative","&-show-count":{["> ".concat(t)]:{height:"100%"},["".concat(t,"-data-count")]:{position:"absolute",bottom:e.calc(e.fontSize).mul(e.lineHeight).mul(-1).equal(),insetInlineEnd:0,color:e.colorTextDescription,whiteSpace:"nowrap",pointerEvents:"none"}},"&-allow-clear":{["> ".concat(t)]:{paddingInlineEnd:n}},["&-affix-wrapper".concat(r,"-has-feedback")]:{["".concat(t)]:{paddingInlineEnd:n}},["&-affix-wrapper".concat(t,"-affix-wrapper")]:{padding:0,["> textarea".concat(t)]:{fontSize:"inherit",border:"none",outline:"none",background:"transparent","&:focus":{boxShadow:"none !important"}},["".concat(t,"-suffix")]:{margin:0,"> *:not(:last-child)":{marginInline:0},["".concat(t,"-clear-icon")]:{position:"absolute",insetInlineEnd:e.paddingXS,insetBlockStart:e.paddingXS},["".concat(r,"-suffix")]:{position:"absolute",top:0,insetInlineEnd:e.paddingInline,bottom:0,zIndex:1,display:"inline-flex",alignItems:"center",margin:"auto",pointerEvents:"none"}}}}}},w=e=>{let{componentCls:t}=e;return{["".concat(t,"-out-of-range")]:{["&, & input, & textarea, ".concat(t,"-show-count-suffix, ").concat(t,"-data-count")]:{color:e.colorError}}}};t.ZP=(0,i.I$)("Input",e=>{let t=(0,c.TS)(e,(0,l.e)(e));return[g(t),x(t),v(t),b(t),y(t),w(t),(0,a.c)(t)]},l.T)},5980:function(e,t,n){n.d(t,{T:function(){return a},e:function(){return o}});var r=n(316);function o(e){return(0,r.TS)(e,{inputAffixPadding:e.paddingXXS})}let a=e=>{let{controlHeight:t,fontSize:n,lineHeight:r,lineWidth:o,controlHeightSM:a,controlHeightLG:i,fontSizeLG:c,lineHeightLG:l,paddingSM:s,controlPaddingHorizontalSM:u,controlPaddingHorizontal:d,colorFillAlter:f,colorPrimaryHover:p,colorPrimary:m,controlOutlineWidth:g,controlOutline:h,colorErrorOutline:v,colorWarningOutline:b,colorBgContainer:y}=e;return{paddingBlock:Math.max(Math.round((t-n*r)/2*10)/10-o,0),paddingBlockSM:Math.max(Math.round((a-n*r)/2*10)/10-o,0),paddingBlockLG:Math.ceil((i-c*l)/2*10)/10-o,paddingInline:s-o,paddingInlineSM:u-o,paddingInlineLG:d-o,addonBg:f,activeBorderColor:m,hoverBorderColor:p,activeShadow:"0 0 0 ".concat(g,"px ").concat(h),errorActiveShadow:"0 0 0 ".concat(g,"px ").concat(v),warningActiveShadow:"0 0 0 ".concat(g,"px ").concat(b),hoverBg:y,activeBg:y,inputFontSize:n,inputFontSizeLG:c,inputFontSizeSM:n}}},1892:function(e,t,n){n.d(t,{H8:function(){return g},Mu:function(){return f},S5:function(){return v},ir:function(){return d},qG:function(){return s}});var r=n(8985),o=n(316);let a=e=>({borderColor:e.hoverBorderColor,backgroundColor:e.hoverBg}),i=e=>({color:e.colorTextDisabled,backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,boxShadow:"none",cursor:"not-allowed",opacity:1,"&:hover:not([disabled])":Object.assign({},a((0,o.TS)(e,{hoverBorderColor:e.colorBorder,hoverBg:e.colorBgContainerDisabled})))}),c=(e,t)=>({background:e.colorBgContainer,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:t.borderColor,"&:hover":{borderColor:t.hoverBorderColor,backgroundColor:e.hoverBg},"&:focus, &:focus-within":{borderColor:t.activeBorderColor,boxShadow:t.activeShadow,outline:0,backgroundColor:e.activeBg}}),l=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status,":not(").concat(e.componentCls,"-disabled)")]:Object.assign(Object.assign({},c(e,t)),{["".concat(e.componentCls,"-prefix, ").concat(e.componentCls,"-suffix")]:{color:t.affixColor}})}),s=(e,t)=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c(e,{borderColor:e.colorBorder,hoverBorderColor:e.colorPrimaryHover,activeBorderColor:e.colorPrimary,activeShadow:e.activeShadow})),{["&".concat(e.componentCls,"-disabled, &[disabled]")]:Object.assign({},i(e))}),l(e,{status:"error",borderColor:e.colorError,hoverBorderColor:e.colorErrorBorderHover,activeBorderColor:e.colorError,activeShadow:e.errorActiveShadow,affixColor:e.colorError})),l(e,{status:"warning",borderColor:e.colorWarning,hoverBorderColor:e.colorWarningBorderHover,activeBorderColor:e.colorWarning,activeShadow:e.warningActiveShadow,affixColor:e.colorWarning})),t)}),u=(e,t)=>({["&".concat(e.componentCls,"-group-wrapper-status-").concat(t.status)]:{["".concat(e.componentCls,"-group-addon")]:{borderColor:t.addonBorderColor,color:t.addonColor}}}),d=e=>({"&-outlined":Object.assign(Object.assign(Object.assign({["".concat(e.componentCls,"-group")]:{"&-addon":{background:e.addonBg,border:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)},"&-addon:first-child":{borderInlineEnd:0},"&-addon:last-child":{borderInlineStart:0}}},u(e,{status:"error",addonBorderColor:e.colorError,addonColor:e.colorErrorText})),u(e,{status:"warning",addonBorderColor:e.colorWarning,addonColor:e.colorWarningText})),{["&".concat(e.componentCls,"-group-wrapper-disabled")]:{["".concat(e.componentCls,"-group-addon")]:Object.assign({},i(e))}})}),f=(e,t)=>({"&-borderless":Object.assign({background:"transparent",border:"none","&:focus, &:focus-within":{outline:"none"},["&".concat(e.componentCls,"-disabled, &[disabled]")]:{color:e.colorTextDisabled}},t)}),p=(e,t)=>({background:t.bg,borderWidth:e.lineWidth,borderStyle:e.lineType,borderColor:"transparent","input&, & input, textarea&, & textarea":{color:null==t?void 0:t.inputColor},"&:hover":{background:t.hoverBg},"&:focus, &:focus-within":{outline:0,borderColor:t.activeBorderColor,backgroundColor:e.activeBg}}),m=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status,":not(").concat(e.componentCls,"-disabled)")]:Object.assign(Object.assign({},p(e,t)),{["".concat(e.componentCls,"-prefix, ").concat(e.componentCls,"-suffix")]:{color:t.affixColor}})}),g=(e,t)=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},p(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.colorPrimary})),{["&".concat(e.componentCls,"-disabled, &[disabled]")]:Object.assign({},i(e))}),m(e,{status:"error",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,inputColor:e.colorErrorText,affixColor:e.colorError})),m(e,{status:"warning",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,inputColor:e.colorWarningText,affixColor:e.colorWarning})),t)}),h=(e,t)=>({["&".concat(e.componentCls,"-group-wrapper-status-").concat(t.status)]:{["".concat(e.componentCls,"-group-addon")]:{background:t.addonBg,color:t.addonColor}}}),v=e=>({"&-filled":Object.assign(Object.assign(Object.assign({["".concat(e.componentCls,"-group")]:{"&-addon":{background:e.colorFillTertiary},["".concat(e.componentCls,"-filled:not(:focus):not(:focus-within)")]:{"&:not(:first-child)":{borderInlineStart:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit)},"&:not(:last-child)":{borderInlineEnd:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit)}}}},h(e,{status:"error",addonBg:e.colorErrorBg,addonColor:e.colorErrorText})),h(e,{status:"warning",addonBg:e.colorWarningBg,addonColor:e.colorWarningText})),{["&".concat(e.componentCls,"-group-wrapper-disabled")]:{["".concat(e.componentCls,"-group")]:{"&-addon":{background:e.colorFillTertiary,color:e.colorTextDisabled},"&-addon:first-child":{borderInlineStart:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderTop:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderBottom:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)},"&-addon:last-child":{borderInlineEnd:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderTop:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder),borderBottom:"".concat((0,r.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorBorder)}}}})})},3302:function(e,t,n){let r=(0,n(4090).createContext)(void 0);t.Z=r},9474:function(e,t,n){n.d(t,{Z:function(){return i}});var r={placeholder:"Select time",rangePlaceholder:["Start time","End time"]};let o={lang:Object.assign({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},{locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"OK",clear:"Clear",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"}),timePickerLocale:Object.assign({},r)},a="${label} is not a valid ${type}";var i={locale:"en",Pagination:{items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"Page",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages",page_size:"Page Size"},DatePicker:o,TimePicker:r,Calendar:o,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckall:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Tour:{Next:"Next",Previous:"Previous",Finish:"Finish"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:a,method:a,array:a,object:a,number:a,date:a,boolean:a,integer:a,float:a,regexp:a,email:a,url:a,hex:a},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"},QRCode:{expired:"QR code expired",refresh:"Refresh",scanned:"Scanned"},ColorPicker:{presetEmpty:"Empty"}}},595:function(e,t,n){var r=n(4090),o=n(3302),a=n(9474);t.Z=(e,t)=>{let n=r.useContext(o.Z);return[r.useMemo(()=>{var r;let o=t||a.Z[e],i=null!==(r=null==n?void 0:n[e])&&void 0!==r?r:{};return Object.assign(Object.assign({},"function"==typeof o?o():o),i||{})},[e,t,n]),r.useMemo(()=>{let e=null==n?void 0:n.locale;return(null==n?void 0:n.exist)&&!e?a.Z.locale:e},[n])]}},588:function(e,t,n){n.d(t,{ZP:function(){return eu}});var r=n(3787),o=n(4090),a=n(7274);let i=o.createContext({});var c=n(7499),l=n(4165),s=n(9537),u=n(7136),d=n(653),f=n(388),p=n(9334),m=n(6480),g=n.n(m),h=n(406),v=n(6787),b=n(5239),y=n(9542),x=n(2110),w=n(833),E=n(9367),C=n(4295),S=o.forwardRef(function(e,t){var n=e.prefixCls,r=e.style,a=e.className,i=e.duration,c=void 0===i?4.5:i,l=e.eventKey,s=e.content,u=e.closable,d=e.closeIcon,f=e.props,p=e.onClick,m=e.onNoticeClose,v=e.times,b=e.hovering,y=o.useState(!1),E=(0,h.Z)(y,2),S=E[0],O=E[1],Z=b||S,k=function(){m(l)};o.useEffect(function(){if(!Z&&c>0){var e=setTimeout(function(){k()},1e3*c);return function(){clearTimeout(e)}}},[c,Z,v]);var R="".concat(n,"-notice");return o.createElement("div",(0,x.Z)({},f,{ref:t,className:g()(R,a,(0,w.Z)({},"".concat(R,"-closable"),u)),style:r,onMouseEnter:function(e){var t;O(!0),null==f||null===(t=f.onMouseEnter)||void 0===t||t.call(f,e)},onMouseLeave:function(e){var t;O(!1),null==f||null===(t=f.onMouseLeave)||void 0===t||t.call(f,e)},onClick:p}),o.createElement("div",{className:"".concat(R,"-content")},s),u&&o.createElement("a",{tabIndex:0,className:"".concat(R,"-close"),onKeyDown:function(e){("Enter"===e.key||"Enter"===e.code||e.keyCode===C.Z.ENTER)&&k()},onClick:function(e){e.preventDefault(),e.stopPropagation(),k()}},void 0===d?"x":d))}),O=o.createContext({}),Z=function(e){var t=e.children,n=e.classNames;return o.createElement(O.Provider,{value:{classNames:n}},t)},k=n(6976),R=function(e){var t,n,r,o={offset:8,threshold:3,gap:16};return e&&"object"===(0,k.Z)(e)&&(o.offset=null!==(t=e.offset)&&void 0!==t?t:8,o.threshold=null!==(n=e.threshold)&&void 0!==n?n:3,o.gap=null!==(r=e.gap)&&void 0!==r?r:16),[!!e,o]},M=["className","style","classNames","styles"],j=function(e){var t,n=e.configList,a=e.placement,i=e.prefixCls,c=e.className,l=e.style,s=e.motion,u=e.onAllNoticeRemoved,d=e.onNoticeClose,f=e.stack,p=(0,o.useContext)(O).classNames,m=(0,o.useRef)({}),y=(0,o.useState)(null),C=(0,h.Z)(y,2),Z=C[0],k=C[1],j=(0,o.useState)([]),P=(0,h.Z)(j,2),N=P[0],I=P[1],T=n.map(function(e){return{config:e,key:String(e.key)}}),A=R(f),F=(0,h.Z)(A,2),z=F[0],L=F[1],_=L.offset,B=L.threshold,H=L.gap,D=z&&(N.length>0||T.length<=B),W="function"==typeof s?s(a):s;return(0,o.useEffect)(function(){z&&N.length>1&&I(function(e){return e.filter(function(e){return T.some(function(t){return e===t.key})})})},[N,T,z]),(0,o.useEffect)(function(){var e,t;z&&m.current[null===(e=T[T.length-1])||void 0===e?void 0:e.key]&&k(m.current[null===(t=T[T.length-1])||void 0===t?void 0:t.key])},[T,z]),o.createElement(E.V4,(0,x.Z)({key:a,className:g()(i,"".concat(i,"-").concat(a),null==p?void 0:p.list,c,(t={},(0,w.Z)(t,"".concat(i,"-stack"),!!z),(0,w.Z)(t,"".concat(i,"-stack-expanded"),D),t)),style:l,keys:T,motionAppear:!0},W,{onAllRemoved:function(){u(a)}}),function(e,t){var n=e.config,c=e.className,l=e.style,s=e.index,u=n.key,f=n.times,h=String(u),y=n.className,w=n.style,E=n.classNames,C=n.styles,O=(0,v.Z)(n,M),k=T.findIndex(function(e){return e.key===h}),R={};if(z){var j=T.length-1-(k>-1?k:s-1),P="top"===a||"bottom"===a?"-50%":"0";if(j>0){R.height=D?null===(A=m.current[h])||void 0===A?void 0:A.offsetHeight:null==Z?void 0:Z.offsetHeight;for(var A,F,L,B,W=0,V=0;V-1?m.current[h]=e:delete m.current[h]},prefixCls:i,classNames:E,styles:C,className:g()(y,null==p?void 0:p.notice),style:w,times:f,key:u,eventKey:u,onNoticeClose:d,hovering:z&&N.length>0})))})},P=o.forwardRef(function(e,t){var n=e.prefixCls,a=void 0===n?"rc-notification":n,i=e.container,c=e.motion,l=e.maxCount,s=e.className,u=e.style,d=e.onAllRemoved,f=e.stack,p=e.renderNotifications,m=o.useState([]),g=(0,h.Z)(m,2),v=g[0],x=g[1],w=function(e){var t,n=v.find(function(t){return t.key===e});null==n||null===(t=n.onClose)||void 0===t||t.call(n),x(function(t){return t.filter(function(t){return t.key!==e})})};o.useImperativeHandle(t,function(){return{open:function(e){x(function(t){var n,o=(0,r.Z)(t),a=o.findIndex(function(t){return t.key===e.key}),i=(0,b.Z)({},e);return a>=0?(i.times=((null===(n=t[a])||void 0===n?void 0:n.times)||0)+1,o[a]=i):(i.times=0,o.push(i)),l>0&&o.length>l&&(o=o.slice(-l)),o})},close:function(e){w(e)},destroy:function(){x([])}}});var E=o.useState({}),C=(0,h.Z)(E,2),S=C[0],O=C[1];o.useEffect(function(){var e={};v.forEach(function(t){var n=t.placement,r=void 0===n?"topRight":n;r&&(e[r]=e[r]||[],e[r].push(t))}),Object.keys(S).forEach(function(t){e[t]=e[t]||[]}),O(e)},[v]);var Z=function(e){O(function(t){var n=(0,b.Z)({},t);return(n[e]||[]).length||delete n[e],n})},k=o.useRef(!1);if(o.useEffect(function(){Object.keys(S).length>0?k.current=!0:k.current&&(null==d||d(),k.current=!1)},[S]),!i)return null;var R=Object.keys(S);return(0,y.createPortal)(o.createElement(o.Fragment,null,R.map(function(e){var t=S[e],n=o.createElement(j,{key:e,configList:t,placement:e,prefixCls:a,className:null==s?void 0:s(e),style:null==u?void 0:u(e),motion:c,onNoticeClose:w,onAllNoticeRemoved:Z,stack:f});return p?p(n,{prefixCls:a,key:e}):n})),i)}),N=["getContainer","motion","prefixCls","maxCount","className","style","onAllRemoved","stack","renderNotifications"],I=function(){return document.body},T=0,A=n(8985),F=n(1761),z=n(1303),L=n(6585),_=n(316);let B=e=>{let{componentCls:t,iconCls:n,boxShadow:r,colorText:o,colorSuccess:a,colorError:i,colorWarning:c,colorInfo:l,fontSizeLG:s,motionEaseInOutCirc:u,motionDurationSlow:d,marginXS:f,paddingXS:p,borderRadiusLG:m,zIndexPopup:g,contentPadding:h,contentBg:v}=e,b="".concat(t,"-notice"),y=new A.E4("MessageMoveIn",{"0%":{padding:0,transform:"translateY(-100%)",opacity:0},"100%":{padding:p,transform:"translateY(0)",opacity:1}}),x=new A.E4("MessageMoveOut",{"0%":{maxHeight:e.height,padding:p,opacity:1},"100%":{maxHeight:0,padding:0,opacity:0}}),w={padding:p,textAlign:"center",["".concat(t,"-custom-content > ").concat(n)]:{verticalAlign:"text-bottom",marginInlineEnd:f,fontSize:s},["".concat(b,"-content")]:{display:"inline-block",padding:h,background:v,borderRadius:m,boxShadow:r,pointerEvents:"all"},["".concat(t,"-success > ").concat(n)]:{color:a},["".concat(t,"-error > ").concat(n)]:{color:i},["".concat(t,"-warning > ").concat(n)]:{color:c},["".concat(t,"-info > ").concat(n,",\n ").concat(t,"-loading > ").concat(n)]:{color:l}};return[{[t]:Object.assign(Object.assign({},(0,z.Wf)(e)),{color:o,position:"fixed",top:f,width:"100%",pointerEvents:"none",zIndex:g,["".concat(t,"-move-up")]:{animationFillMode:"forwards"},["\n ".concat(t,"-move-up-appear,\n ").concat(t,"-move-up-enter\n ")]:{animationName:y,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["\n ".concat(t,"-move-up-appear").concat(t,"-move-up-appear-active,\n ").concat(t,"-move-up-enter").concat(t,"-move-up-enter-active\n ")]:{animationPlayState:"running"},["".concat(t,"-move-up-leave")]:{animationName:x,animationDuration:d,animationPlayState:"paused",animationTimingFunction:u},["".concat(t,"-move-up-leave").concat(t,"-move-up-leave-active")]:{animationPlayState:"running"},"&-rtl":{direction:"rtl",span:{direction:"rtl"}}})},{[t]:{["".concat(b,"-wrapper")]:Object.assign({},w)}},{["".concat(t,"-notice-pure-panel")]:Object.assign(Object.assign({},w),{padding:0,textAlign:"start"})}]};var H=(0,L.I$)("Message",e=>[B((0,_.TS)(e,{height:150}))],e=>({zIndexPopup:e.zIndexPopupBase+F.u6+10,contentBg:e.colorBgElevated,contentPadding:"".concat((e.controlHeightLG-e.fontSize*e.lineHeight)/2,"px ").concat(e.paddingSM,"px")})),D=n(2935),W=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let V={info:o.createElement(f.Z,null),success:o.createElement(s.Z,null),error:o.createElement(u.Z,null),warning:o.createElement(d.Z,null),loading:o.createElement(p.Z,null)},q=e=>{let{prefixCls:t,type:n,icon:r,children:a}=e;return o.createElement("div",{className:g()("".concat(t,"-custom-content"),"".concat(t,"-").concat(n))},r||V[n],o.createElement("span",null,a))};var X=n(1183),G=n(9233);function U(e){let t;let n=new Promise(n=>{t=e(()=>{n(!0)})}),r=()=>{null==t||t()};return r.then=(e,t)=>n.then(e,t),r.promise=n,r}var K=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let $=e=>{let{children:t,prefixCls:n}=e,r=(0,D.Z)(n),[a,i,c]=H(n,r);return a(o.createElement(Z,{classNames:{list:g()(i,c,r)}},t))},Y=(e,t)=>{let{prefixCls:n,key:r}=t;return o.createElement($,{prefixCls:n,key:r},e)},Q=o.forwardRef((e,t)=>{let{top:n,prefixCls:a,getContainer:i,maxCount:l,duration:s=3,rtl:u,transitionName:d,onAllRemoved:f}=e,{getPrefixCls:p,getPopupContainer:m,message:b,direction:y}=o.useContext(c.E_),x=a||p("message"),w=o.createElement("span",{className:"".concat(x,"-close-x")},o.createElement(X.Z,{className:"".concat(x,"-close-icon")})),[E,C]=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.getContainer,n=void 0===t?I:t,a=e.motion,i=e.prefixCls,c=e.maxCount,l=e.className,s=e.style,u=e.onAllRemoved,d=e.stack,f=e.renderNotifications,p=(0,v.Z)(e,N),m=o.useState(),g=(0,h.Z)(m,2),b=g[0],y=g[1],x=o.useRef(),w=o.createElement(P,{container:b,ref:x,prefixCls:i,motion:a,maxCount:c,className:l,style:s,onAllRemoved:u,stack:d,renderNotifications:f}),E=o.useState([]),C=(0,h.Z)(E,2),S=C[0],O=C[1],Z=o.useMemo(function(){return{open:function(e){var t=function(){for(var e={},t=arguments.length,n=Array(t),r=0;r({left:"50%",transform:"translateX(-50%)",top:null!=n?n:8}),className:()=>g()({["".concat(x,"-rtl")]:null!=u?u:"rtl"===y}),motion:()=>({motionName:null!=d?d:"".concat(x,"-move-up")}),closable:!1,closeIcon:w,duration:s,getContainer:()=>(null==i?void 0:i())||(null==m?void 0:m())||document.body,maxCount:l,onAllRemoved:f,renderNotifications:Y});return o.useImperativeHandle(t,()=>Object.assign(Object.assign({},E),{prefixCls:x,message:b})),C}),J=0;function ee(e){let t=o.useRef(null);return(0,G.ln)("Message"),[o.useMemo(()=>{let e=e=>{var n;null===(n=t.current)||void 0===n||n.close(e)},n=n=>{if(!t.current){let e=()=>{};return e.then=()=>{},e}let{open:r,prefixCls:a,message:i}=t.current,c="".concat(a,"-notice"),{content:l,icon:s,type:u,key:d,className:f,style:p,onClose:m}=n,h=K(n,["content","icon","type","key","className","style","onClose"]),v=d;return null==v&&(J+=1,v="antd-message-".concat(J)),U(t=>(r(Object.assign(Object.assign({},h),{key:v,content:o.createElement(q,{prefixCls:a,type:u,icon:s},l),placement:"top",className:g()(u&&"".concat(c,"-").concat(u),f,null==i?void 0:i.className),style:Object.assign(Object.assign({},null==i?void 0:i.style),p),onClose:()=>{null==m||m(),t()}})),()=>{e(v)}))},r={open:n,destroy:n=>{var r;void 0!==n?e(n):null===(r=t.current)||void 0===r||r.destroy()}};return["info","success","warning","error","loading"].forEach(e=>{r[e]=(t,r,o)=>{let a,i;return"function"==typeof r?i=r:(a=r,i=o),n(Object.assign(Object.assign({onClose:i,duration:a},t&&"object"==typeof t&&"content"in t?t:{content:t}),{type:e}))}}),r},[]),o.createElement(Q,Object.assign({key:"message-holder"},e,{ref:t}))]}let et=null,en=e=>e(),er=[],eo={};function ea(){let{getContainer:e,duration:t,rtl:n,maxCount:r,top:o}=eo,a=(null==e?void 0:e())||document.body;return{getContainer:()=>a,duration:t,rtl:n,maxCount:r,top:o}}let ei=o.forwardRef((e,t)=>{let{messageConfig:n,sync:r}=e,{getPrefixCls:a}=(0,o.useContext)(c.E_),l=eo.prefixCls||a("message"),s=(0,o.useContext)(i),[u,d]=ee(Object.assign(Object.assign(Object.assign({},n),{prefixCls:l}),s.message));return o.useImperativeHandle(t,()=>{let e=Object.assign({},u);return Object.keys(e).forEach(t=>{e[t]=function(){return r(),u[t].apply(u,arguments)}}),{instance:e,sync:r}}),d}),ec=o.forwardRef((e,t)=>{let[n,r]=o.useState(ea),a=()=>{r(ea)};o.useEffect(a,[]);let i=(0,l.w6)(),c=i.getRootPrefixCls(),s=i.getIconPrefixCls(),u=i.getTheme(),d=o.createElement(ei,{ref:t,sync:a,messageConfig:n});return o.createElement(l.ZP,{prefixCls:c,iconPrefixCls:s,theme:u},i.holderRender?i.holderRender(d):d)});function el(){if(!et){let e=document.createDocumentFragment(),t={fragment:e};et=t,en(()=>{(0,a.s)(o.createElement(ec,{ref:e=>{let{instance:n,sync:r}=e||{};Promise.resolve().then(()=>{!t.instance&&n&&(t.instance=n,t.sync=r,el())})}}),e)});return}et.instance&&(er.forEach(e=>{let{type:t,skipped:n}=e;if(!n)switch(t){case"open":en(()=>{let t=et.instance.open(Object.assign(Object.assign({},eo),e.config));null==t||t.then(e.resolve),e.setCloseFn(t)});break;case"destroy":en(()=>{null==et||et.instance.destroy(e.key)});break;default:en(()=>{var n;let o=(n=et.instance)[t].apply(n,(0,r.Z)(e.args));null==o||o.then(e.resolve),e.setCloseFn(o)})}}),er=[])}let es={open:function(e){let t=U(t=>{let n;let r={type:"open",config:e,resolve:t,setCloseFn:e=>{n=e}};return er.push(r),()=>{n?en(()=>{n()}):r.skipped=!0}});return el(),t},destroy:function(e){er.push({type:"destroy",key:e}),el()},config:function(e){eo=Object.assign(Object.assign({},eo),e),en(()=>{var e;null===(e=null==et?void 0:et.sync)||void 0===e||e.call(et)})},useMessage:function(e){return ee(e)},_InternalPanelDoNotUseOrYouWillBeFired:e=>{let{prefixCls:t,className:n,type:r,icon:a,content:i}=e,l=W(e,["prefixCls","className","type","icon","content"]),{getPrefixCls:s}=o.useContext(c.E_),u=t||s("message"),d=(0,D.Z)(u),[f,p,m]=H(u,d);return f(o.createElement(S,Object.assign({},l,{prefixCls:u,className:g()(n,p,"".concat(u,"-notice-pure-panel"),m,d),eventKey:"pure",duration:null,content:o.createElement(q,{prefixCls:u,type:r,icon:a},i)})))}};["success","info","warning","error","loading"].forEach(e=>{es[e]=function(){for(var t=arguments.length,n=Array(t),r=0;r{let r;let o={type:e,args:t,resolve:n,setCloseFn:e=>{r=e}};return er.push(o),()=>{r?en(()=>{r()}):o.skipped=!0}});return el(),n}(e,n)}});var eu=es},7171:function(e,t,n){let r;n.d(t,{Z:function(){return eY}});var o=n(3787),a=n(4090),i=n(7274),c=n(7499),l=n(4165),s=n(9537),u=n(7136),d=n(653),f=n(388),p=n(6480),m=n.n(p),g=n(1761),h=n(7387),v=n(595),b=n(4750),y=n(9211),x=n(1861),w=n(1350),E=e=>{let{type:t,children:n,prefixCls:r,buttonProps:o,close:i,autoFocus:c,emitEvent:l,isSilent:s,quitOnNullishReturnValue:u,actionFn:d}=e,f=a.useRef(!1),p=a.useRef(null),[m,g]=(0,y.Z)(!1),h=function(){null==i||i.apply(void 0,arguments)};a.useEffect(()=>{let e=null;return c&&(e=setTimeout(()=>{var e;null===(e=p.current)||void 0===e||e.focus()})),()=>{e&&clearTimeout(e)}},[]);let v=e=>{e&&e.then&&(g(!0),e.then(function(){g(!1,!0),h.apply(void 0,arguments),f.current=!1},e=>{if(g(!1,!0),f.current=!1,null==s||!s())return Promise.reject(e)}))};return a.createElement(x.ZP,Object.assign({},(0,w.nx)(t),{onClick:e=>{let t;if(!f.current){if(f.current=!0,!d){h();return}if(l){var n;if(t=d(e),u&&!((n=t)&&n.then)){f.current=!1,h(e);return}}else if(d.length)t=d(i),f.current=!1;else if(!(t=d())){h();return}v(t)}},loading:m,prefixCls:r},o,{ref:p}),n)};let C=a.createContext({}),{Provider:S}=C;var O=()=>{let{autoFocusButton:e,cancelButtonProps:t,cancelTextLocale:n,isSilent:r,mergedOkCancel:o,rootPrefixCls:i,close:c,onCancel:l,onConfirm:s}=(0,a.useContext)(C);return o?a.createElement(E,{isSilent:r,actionFn:l,close:function(){null==c||c.apply(void 0,arguments),null==s||s(!1)},autoFocus:"cancel"===e,buttonProps:t,prefixCls:"".concat(i,"-btn")},n):null},Z=()=>{let{autoFocusButton:e,close:t,isSilent:n,okButtonProps:r,rootPrefixCls:o,okTextLocale:i,okType:c,onConfirm:l,onOk:s}=(0,a.useContext)(C);return a.createElement(E,{isSilent:n,type:c||"primary",actionFn:s,close:function(){null==t||t.apply(void 0,arguments),null==l||l(!0)},autoFocus:"ok"===e,buttonProps:r,prefixCls:"".concat(o,"-btn")},i)},k=n(1183),R=n(2110),M=n(406),j=n(8804),P=a.createContext({}),N=n(5239),I=n(1506),T=n(1010),A=n(4295),F=n(2480);function z(e,t,n){var r=t;return!r&&n&&(r="".concat(e,"-").concat(n)),r}function L(e,t){var n=e["page".concat(t?"Y":"X","Offset")],r="scroll".concat(t?"Top":"Left");if("number"!=typeof n){var o=e.document;"number"!=typeof(n=o.documentElement[r])&&(n=o.body[r])}return n}var _=n(9367),B=n(4084),H=a.memo(function(e){return e.children},function(e,t){return!t.shouldUpdate}),D={width:0,height:0,overflow:"hidden",outline:"none"},W=a.forwardRef(function(e,t){var n,r,o,i=e.prefixCls,c=e.className,l=e.style,s=e.title,u=e.ariaId,d=e.footer,f=e.closable,p=e.closeIcon,g=e.onClose,h=e.children,v=e.bodyStyle,b=e.bodyProps,y=e.modalRender,x=e.onMouseDown,w=e.onMouseUp,E=e.holderRef,C=e.visible,S=e.forceRender,O=e.width,Z=e.height,k=e.classNames,M=e.styles,j=a.useContext(P).panel,I=(0,B.x1)(E,j),T=(0,a.useRef)(),A=(0,a.useRef)();a.useImperativeHandle(t,function(){return{focus:function(){var e;null===(e=T.current)||void 0===e||e.focus()},changeActive:function(e){var t=document.activeElement;e&&t===A.current?T.current.focus():e||t!==T.current||A.current.focus()}}});var F={};void 0!==O&&(F.width=O),void 0!==Z&&(F.height=Z),d&&(n=a.createElement("div",{className:m()("".concat(i,"-footer"),null==k?void 0:k.footer),style:(0,N.Z)({},null==M?void 0:M.footer)},d)),s&&(r=a.createElement("div",{className:m()("".concat(i,"-header"),null==k?void 0:k.header),style:(0,N.Z)({},null==M?void 0:M.header)},a.createElement("div",{className:"".concat(i,"-title"),id:u},s))),f&&(o=a.createElement("button",{type:"button",onClick:g,"aria-label":"Close",className:"".concat(i,"-close")},p||a.createElement("span",{className:"".concat(i,"-close-x")})));var z=a.createElement("div",{className:m()("".concat(i,"-content"),null==k?void 0:k.content),style:null==M?void 0:M.content},o,r,a.createElement("div",(0,R.Z)({className:m()("".concat(i,"-body"),null==k?void 0:k.body),style:(0,N.Z)((0,N.Z)({},v),null==M?void 0:M.body)},b),h),n);return a.createElement("div",{key:"dialog-element",role:"dialog","aria-labelledby":s?u:null,"aria-modal":"true",ref:I,style:(0,N.Z)((0,N.Z)({},l),F),className:m()(i,c),onMouseDown:x,onMouseUp:w},a.createElement("div",{tabIndex:0,ref:T,style:D,"aria-hidden":"true"}),a.createElement(H,{shouldUpdate:C||S},y?y(z):z),a.createElement("div",{tabIndex:0,ref:A,style:D,"aria-hidden":"true"}))}),V=a.forwardRef(function(e,t){var n=e.prefixCls,r=e.title,o=e.style,i=e.className,c=e.visible,l=e.forceRender,s=e.destroyOnClose,u=e.motionName,d=e.ariaId,f=e.onVisibleChanged,p=e.mousePosition,g=(0,a.useRef)(),h=a.useState(),v=(0,M.Z)(h,2),b=v[0],y=v[1],x={};function w(){var e,t,n,r,o,a=(n={left:(t=(e=g.current).getBoundingClientRect()).left,top:t.top},o=(r=e.ownerDocument).defaultView||r.parentWindow,n.left+=L(o),n.top+=L(o,!0),n);y(p?"".concat(p.x-a.left,"px ").concat(p.y-a.top,"px"):"")}return b&&(x.transformOrigin=b),a.createElement(_.ZP,{visible:c,onVisibleChanged:f,onAppearPrepare:w,onEnterPrepare:w,forceRender:l,motionName:u,removeOnLeave:s,ref:g},function(c,l){var s=c.className,u=c.style;return a.createElement(W,(0,R.Z)({},e,{ref:t,title:r,ariaId:d,prefixCls:n,holderRef:l,style:(0,N.Z)((0,N.Z)((0,N.Z)({},u),o),x),className:m()(i,s)}))})});function q(e){var t=e.prefixCls,n=e.style,r=e.visible,o=e.maskProps,i=e.motionName,c=e.className;return a.createElement(_.ZP,{key:"mask",visible:r,motionName:i,leavedClassName:"".concat(t,"-mask-hidden")},function(e,r){var i=e.className,l=e.style;return a.createElement("div",(0,R.Z)({ref:r,style:(0,N.Z)((0,N.Z)({},l),n),className:m()("".concat(t,"-mask"),i,c)},o))})}function X(e){var t=e.prefixCls,n=void 0===t?"rc-dialog":t,r=e.zIndex,o=e.visible,i=void 0!==o&&o,c=e.keyboard,l=void 0===c||c,s=e.focusTriggerAfterClose,u=void 0===s||s,d=e.wrapStyle,f=e.wrapClassName,p=e.wrapProps,g=e.onClose,h=e.afterOpenChange,v=e.afterClose,b=e.transitionName,y=e.animation,x=e.closable,w=e.mask,E=void 0===w||w,C=e.maskTransitionName,S=e.maskAnimation,O=e.maskClosable,Z=e.maskStyle,k=e.maskProps,j=e.rootClassName,P=e.classNames,L=e.styles,_=(0,a.useRef)(),B=(0,a.useRef)(),H=(0,a.useRef)(),D=a.useState(i),W=(0,M.Z)(D,2),X=W[0],G=W[1],U=(0,T.Z)();function K(e){null==g||g(e)}var $=(0,a.useRef)(!1),Y=(0,a.useRef)(),Q=null;return(void 0===O||O)&&(Q=function(e){$.current?$.current=!1:B.current===e.target&&K(e)}),(0,a.useEffect)(function(){i&&(G(!0),(0,I.Z)(B.current,document.activeElement)||(_.current=document.activeElement))},[i]),(0,a.useEffect)(function(){return function(){clearTimeout(Y.current)}},[]),a.createElement("div",(0,R.Z)({className:m()("".concat(n,"-root"),j)},(0,F.Z)(e,{data:!0})),a.createElement(q,{prefixCls:n,visible:E&&i,motionName:z(n,C,S),style:(0,N.Z)((0,N.Z)({zIndex:r},Z),null==L?void 0:L.mask),maskProps:k,className:null==P?void 0:P.mask}),a.createElement("div",(0,R.Z)({tabIndex:-1,onKeyDown:function(e){if(l&&e.keyCode===A.Z.ESC){e.stopPropagation(),K(e);return}i&&e.keyCode===A.Z.TAB&&H.current.changeActive(!e.shiftKey)},className:m()("".concat(n,"-wrap"),f,null==P?void 0:P.wrapper),ref:B,onClick:Q,style:(0,N.Z)((0,N.Z)((0,N.Z)({zIndex:r},d),null==L?void 0:L.wrapper),{},{display:X?null:"none"})},p),a.createElement(V,(0,R.Z)({},e,{onMouseDown:function(){clearTimeout(Y.current),$.current=!0},onMouseUp:function(){Y.current=setTimeout(function(){$.current=!1})},ref:H,closable:void 0===x||x,ariaId:U,prefixCls:n,visible:i&&X,onClose:K,onVisibleChanged:function(e){if(e)!function(){if(!(0,I.Z)(B.current,document.activeElement)){var e;null===(e=H.current)||void 0===e||e.focus()}}();else{if(G(!1),E&&_.current&&u){try{_.current.focus({preventScroll:!0})}catch(e){}_.current=null}X&&(null==v||v())}null==h||h(e)},motionName:z(n,b,y)}))))}V.displayName="Content",n(3850);var G=function(e){var t=e.visible,n=e.getContainer,r=e.forceRender,o=e.destroyOnClose,i=void 0!==o&&o,c=e.afterClose,l=e.panelRef,s=a.useState(t),u=(0,M.Z)(s,2),d=u[0],f=u[1],p=a.useMemo(function(){return{panel:l}},[l]);return(a.useEffect(function(){t&&f(!0)},[t]),r||!i||d)?a.createElement(P.Provider,{value:p},a.createElement(j.Z,{open:t||r||d,autoDestroy:!1,getContainer:n,autoLock:t||d},a.createElement(X,(0,R.Z)({},e,{destroyOnClose:i,afterClose:function(){null==c||c(),f(!1)}})))):null};G.displayName="Dialog";var U=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:a.createElement(k.Z,null),o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if("boolean"==typeof e?!e:void 0===t?!o:!1===t||null===t)return[!1,null];let i="boolean"==typeof t||null==t?r:t;return[!0,n?n(i):i]},K=n(2127),$=n(6718),Y=n(7137),Q=n(2801),J=n(8563);function ee(){}let et=a.createContext({add:ee,remove:ee});var en=n(7094),er=()=>{let{cancelButtonProps:e,cancelTextLocale:t,onCancel:n}=(0,a.useContext)(C);return a.createElement(x.ZP,Object.assign({onClick:n},e),t)},eo=()=>{let{confirmLoading:e,okButtonProps:t,okType:n,okTextLocale:r,onOk:o}=(0,a.useContext)(C);return a.createElement(x.ZP,Object.assign({},(0,w.nx)(n),{loading:e,onClick:o},t),r)},ea=n(4678);function ei(e,t){return a.createElement("span",{className:"".concat(e,"-close-x")},t||a.createElement(k.Z,{className:"".concat(e,"-close-icon")}))}let ec=e=>{let t;let{okText:n,okType:r="primary",cancelText:i,confirmLoading:c,onOk:l,onCancel:s,okButtonProps:u,cancelButtonProps:d,footer:f}=e,[p]=(0,v.Z)("Modal",(0,ea.A)()),m={confirmLoading:c,okButtonProps:u,cancelButtonProps:d,okTextLocale:n||(null==p?void 0:p.okText),cancelTextLocale:i||(null==p?void 0:p.cancelText),okType:r,onOk:l,onCancel:s},g=a.useMemo(()=>m,(0,o.Z)(Object.values(m)));return"function"==typeof f||void 0===f?(t=a.createElement(a.Fragment,null,a.createElement(er,null),a.createElement(eo,null)),"function"==typeof f&&(t=f(t,{OkBtn:eo,CancelBtn:er})),t=a.createElement(S,{value:g},t)):t=f,a.createElement(en.n,{disabled:!1},t)};var el=n(1303),es=n(8985),eu=n(9353);let ed=new es.E4("antFadeIn",{"0%":{opacity:0},"100%":{opacity:1}}),ef=new es.E4("antFadeOut",{"0%":{opacity:1},"100%":{opacity:0}}),ep=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{antCls:n}=e,r="".concat(n,"-fade"),o=t?"&":"";return[(0,eu.R)(r,ed,ef,e.motionDurationMid,t),{["\n ".concat(o).concat(r,"-enter,\n ").concat(o).concat(r,"-appear\n ")]:{opacity:0,animationTimingFunction:"linear"},["".concat(o).concat(r,"-leave")]:{animationTimingFunction:"linear"}}]};var em=n(8854),eg=n(316),eh=n(6585);function ev(e){return{position:e,inset:0}}let eb=e=>{let{componentCls:t,antCls:n}=e;return[{["".concat(t,"-root")]:{["".concat(t).concat(n,"-zoom-enter, ").concat(t).concat(n,"-zoom-appear")]:{transform:"none",opacity:0,animationDuration:e.motionDurationSlow,userSelect:"none"},["".concat(t).concat(n,"-zoom-leave ").concat(t,"-content")]:{pointerEvents:"none"},["".concat(t,"-mask")]:Object.assign(Object.assign({},ev("fixed")),{zIndex:e.zIndexPopupBase,height:"100%",backgroundColor:e.colorBgMask,pointerEvents:"none",["".concat(t,"-hidden")]:{display:"none"}}),["".concat(t,"-wrap")]:Object.assign(Object.assign({},ev("fixed")),{zIndex:e.zIndexPopupBase,overflow:"auto",outline:0,WebkitOverflowScrolling:"touch",["&:has(".concat(t).concat(n,"-zoom-enter), &:has(").concat(t).concat(n,"-zoom-appear)")]:{pointerEvents:"none"}})}},{["".concat(t,"-root")]:ep(e)}]},ey=e=>{let{componentCls:t}=e;return[{["".concat(t,"-root")]:{["".concat(t,"-wrap-rtl")]:{direction:"rtl"},["".concat(t,"-centered")]:{textAlign:"center","&::before":{display:"inline-block",width:0,height:"100%",verticalAlign:"middle",content:'""'},[t]:{top:0,display:"inline-block",paddingBottom:0,textAlign:"start",verticalAlign:"middle"}},["@media (max-width: ".concat(e.screenSMMax,"px)")]:{[t]:{maxWidth:"calc(100vw - 16px)",margin:"".concat((0,es.bf)(e.marginXS)," auto")},["".concat(t,"-centered")]:{[t]:{flex:1}}}}},{[t]:Object.assign(Object.assign({},(0,el.Wf)(e)),{pointerEvents:"none",position:"relative",top:100,width:"auto",maxWidth:"calc(100vw - ".concat((0,es.bf)(e.calc(e.margin).mul(2).equal()),")"),margin:"0 auto",paddingBottom:e.paddingLG,["".concat(t,"-title")]:{margin:0,color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.titleFontSize,lineHeight:e.titleLineHeight,wordWrap:"break-word"},["".concat(t,"-content")]:{position:"relative",backgroundColor:e.contentBg,backgroundClip:"padding-box",border:0,borderRadius:e.borderRadiusLG,boxShadow:e.boxShadow,pointerEvents:"auto",padding:e.contentPadding},["".concat(t,"-close")]:Object.assign({position:"absolute",top:e.calc(e.modalHeaderHeight).sub(e.modalCloseBtnSize).div(2).equal(),insetInlineEnd:e.calc(e.modalHeaderHeight).sub(e.modalCloseBtnSize).div(2).equal(),zIndex:e.calc(e.zIndexPopupBase).add(10).equal(),padding:0,color:e.modalCloseIconColor,fontWeight:e.fontWeightStrong,lineHeight:1,textDecoration:"none",background:"transparent",borderRadius:e.borderRadiusSM,width:e.modalCloseBtnSize,height:e.modalCloseBtnSize,border:0,outline:0,cursor:"pointer",transition:"color ".concat(e.motionDurationMid,", background-color ").concat(e.motionDurationMid),"&-x":{display:"flex",fontSize:e.fontSizeLG,fontStyle:"normal",lineHeight:"".concat((0,es.bf)(e.modalCloseBtnSize)),justifyContent:"center",textTransform:"none",textRendering:"auto"},"&:hover":{color:e.modalIconHoverColor,backgroundColor:e.closeBtnHoverBg,textDecoration:"none"},"&:active":{backgroundColor:e.closeBtnActiveBg}},(0,el.Qy)(e)),["".concat(t,"-header")]:{color:e.colorText,background:e.headerBg,borderRadius:"".concat((0,es.bf)(e.borderRadiusLG)," ").concat((0,es.bf)(e.borderRadiusLG)," 0 0"),marginBottom:e.headerMarginBottom,padding:e.headerPadding,borderBottom:e.headerBorderBottom},["".concat(t,"-body")]:{fontSize:e.fontSize,lineHeight:e.lineHeight,wordWrap:"break-word",padding:e.bodyPadding},["".concat(t,"-footer")]:{textAlign:"end",background:e.footerBg,marginTop:e.footerMarginTop,padding:e.footerPadding,borderTop:e.footerBorderTop,borderRadius:e.footerBorderRadius,["> ".concat(e.antCls,"-btn + ").concat(e.antCls,"-btn")]:{marginInlineStart:e.marginXS}},["".concat(t,"-open")]:{overflow:"hidden"}})},{["".concat(t,"-pure-panel")]:{top:"auto",padding:0,display:"flex",flexDirection:"column",["".concat(t,"-content,\n ").concat(t,"-body,\n ").concat(t,"-confirm-body-wrapper")]:{display:"flex",flexDirection:"column",flex:"auto"},["".concat(t,"-confirm-body")]:{marginBottom:"auto"}}}]},ex=e=>{let{componentCls:t}=e;return{["".concat(t,"-root")]:{["".concat(t,"-wrap-rtl")]:{direction:"rtl",["".concat(t,"-confirm-body")]:{direction:"rtl"}}}}},ew=e=>{let t=e.padding,n=e.fontSizeHeading5,r=e.lineHeightHeading5;return(0,eg.TS)(e,{modalHeaderHeight:e.calc(e.calc(r).mul(n).equal()).add(e.calc(t).mul(2).equal()).equal(),modalFooterBorderColorSplit:e.colorSplit,modalFooterBorderStyle:e.lineType,modalFooterBorderWidth:e.lineWidth,modalIconHoverColor:e.colorIconHover,modalCloseIconColor:e.colorIcon,modalCloseBtnSize:e.fontHeight,modalConfirmIconSize:e.fontHeight,modalTitleHeight:e.calc(e.titleFontSize).mul(e.titleLineHeight).equal()})},eE=e=>({footerBg:"transparent",headerBg:e.colorBgElevated,titleLineHeight:e.lineHeightHeading5,titleFontSize:e.fontSizeHeading5,contentBg:e.colorBgElevated,titleColor:e.colorTextHeading,closeBtnHoverBg:e.wireframe?"transparent":e.colorFillContent,closeBtnActiveBg:e.wireframe?"transparent":e.colorFillContentHover,contentPadding:e.wireframe?0:"".concat((0,es.bf)(e.paddingMD)," ").concat((0,es.bf)(e.paddingContentHorizontalLG)),headerPadding:e.wireframe?"".concat((0,es.bf)(e.padding)," ").concat((0,es.bf)(e.paddingLG)):0,headerBorderBottom:e.wireframe?"".concat((0,es.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit):"none",headerMarginBottom:e.wireframe?0:e.marginXS,bodyPadding:e.wireframe?e.paddingLG:0,footerPadding:e.wireframe?"".concat((0,es.bf)(e.paddingXS)," ").concat((0,es.bf)(e.padding)):0,footerBorderTop:e.wireframe?"".concat((0,es.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit):"none",footerBorderRadius:e.wireframe?"0 0 ".concat((0,es.bf)(e.borderRadiusLG)," ").concat((0,es.bf)(e.borderRadiusLG)):0,footerMarginTop:e.wireframe?0:e.marginSM,confirmBodyPadding:e.wireframe?"".concat((0,es.bf)(2*e.padding)," ").concat((0,es.bf)(2*e.padding)," ").concat((0,es.bf)(e.paddingLG)):0,confirmIconMarginInlineEnd:e.wireframe?e.margin:e.marginSM,confirmBtnsMarginTop:e.wireframe?e.marginLG:e.marginSM});var eC=(0,eh.I$)("Modal",e=>{let t=ew(e);return[ey(t),ex(t),eb(t),(0,em._y)(t,"zoom")]},eE,{unitless:{titleLineHeight:!0}}),eS=n(2935),eO=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};(0,K.Z)()&&window.document.documentElement&&document.documentElement.addEventListener("click",e=>{r={x:e.pageX,y:e.pageY},setTimeout(()=>{r=null},100)},!0);var eZ=e=>{var t;let{getPopupContainer:n,getPrefixCls:o,direction:i,modal:l}=a.useContext(c.E_),s=t=>{let{onCancel:n}=e;null==n||n(t)},{prefixCls:u,className:d,rootClassName:f,open:p,wrapClassName:v,centered:b,getContainer:y,closeIcon:x,closable:w,focusTriggerAfterClose:E=!0,style:C,visible:S,width:O=520,footer:Z,classNames:R,styles:M}=e,j=eO(e,["prefixCls","className","rootClassName","open","wrapClassName","centered","getContainer","closeIcon","closable","focusTriggerAfterClose","style","visible","width","footer","classNames","styles"]),P=o("modal",u),N=o(),I=(0,eS.Z)(P),[T,A,F]=eC(P,I),z=m()(v,{["".concat(P,"-centered")]:!!b,["".concat(P,"-wrap-rtl")]:"rtl"===i}),L=null!==Z&&a.createElement(ec,Object.assign({},e,{onOk:t=>{let{onOk:n}=e;null==n||n(t)},onCancel:s})),[_,B]=U(w,x,e=>ei(P,e),a.createElement(k.Z,{className:"".concat(P,"-close-icon")}),!0),H=function(e){let t=a.useContext(et),n=a.useRef();return(0,J.zX)(r=>{if(r){let o=e?r.querySelector(e):r;t.add(o),n.current=o}else t.remove(n.current)})}(".".concat(P,"-content")),[D,W]=(0,g.Cn)("Modal",j.zIndex);return T(a.createElement(Q.BR,null,a.createElement(Y.Ux,{status:!0,override:!0},a.createElement($.Z.Provider,{value:W},a.createElement(G,Object.assign({width:O},j,{zIndex:D,getContainer:void 0===y?n:y,prefixCls:P,rootClassName:m()(A,f,F,I),footer:L,visible:null!=p?p:S,mousePosition:null!==(t=j.mousePosition)&&void 0!==t?t:r,onClose:s,closable:_,closeIcon:B,focusTriggerAfterClose:E,transitionName:(0,h.m)(N,"zoom",e.transitionName),maskTransitionName:(0,h.m)(N,"fade",e.maskTransitionName),className:m()(A,d,null==l?void 0:l.className),style:Object.assign(Object.assign({},null==l?void 0:l.style),C),classNames:Object.assign(Object.assign({wrapper:z},null==l?void 0:l.classNames),R),styles:Object.assign(Object.assign({},null==l?void 0:l.styles),M),panelRef:H}))))))};let ek=e=>{let{componentCls:t,titleFontSize:n,titleLineHeight:r,modalConfirmIconSize:o,fontSize:a,lineHeight:i,modalTitleHeight:c,fontHeight:l,confirmBodyPadding:s}=e,u="".concat(t,"-confirm");return{[u]:{"&-rtl":{direction:"rtl"},["".concat(e.antCls,"-modal-header")]:{display:"none"},["".concat(u,"-body-wrapper")]:Object.assign({},(0,el.dF)()),["&".concat(t," ").concat(t,"-body")]:{padding:s},["".concat(u,"-body")]:{display:"flex",flexWrap:"nowrap",alignItems:"start",["> ".concat(e.iconCls)]:{flex:"none",fontSize:o,marginInlineEnd:e.confirmIconMarginInlineEnd,marginTop:e.calc(e.calc(l).sub(o).equal()).div(2).equal()},["&-has-title > ".concat(e.iconCls)]:{marginTop:e.calc(e.calc(c).sub(o).equal()).div(2).equal()}},["".concat(u,"-paragraph")]:{display:"flex",flexDirection:"column",flex:"auto",rowGap:e.marginXS,maxWidth:"calc(100% - ".concat((0,es.bf)(e.calc(e.modalConfirmIconSize).add(e.marginSM).equal()),")")},["".concat(u,"-title")]:{color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:n,lineHeight:r},["".concat(u,"-content")]:{color:e.colorText,fontSize:a,lineHeight:i},["".concat(u,"-btns")]:{textAlign:"end",marginTop:e.confirmBtnsMarginTop,["".concat(e.antCls,"-btn + ").concat(e.antCls,"-btn")]:{marginBottom:0,marginInlineStart:e.marginXS}}},["".concat(u,"-error ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorError},["".concat(u,"-warning ").concat(u,"-body > ").concat(e.iconCls,",\n ").concat(u,"-confirm ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorWarning},["".concat(u,"-info ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorInfo},["".concat(u,"-success ").concat(u,"-body > ").concat(e.iconCls)]:{color:e.colorSuccess}}};var eR=(0,eh.bk)(["Modal","confirm"],e=>[ek(ew(e))],eE,{order:-1e3}),eM=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function ej(e){let{prefixCls:t,icon:n,okText:r,cancelText:i,confirmPrefixCls:c,type:l,okCancel:p,footer:g,locale:h}=e,b=eM(e,["prefixCls","icon","okText","cancelText","confirmPrefixCls","type","okCancel","footer","locale"]),y=n;if(!n&&null!==n)switch(l){case"info":y=a.createElement(f.Z,null);break;case"success":y=a.createElement(s.Z,null);break;case"error":y=a.createElement(u.Z,null);break;default:y=a.createElement(d.Z,null)}let x=null!=p?p:"confirm"===l,w=null!==e.autoFocusButton&&(e.autoFocusButton||"ok"),[E]=(0,v.Z)("Modal"),C=h||E,k=r||(x?null==C?void 0:C.okText:null==C?void 0:C.justOkText),R=Object.assign({autoFocusButton:w,cancelTextLocale:i||(null==C?void 0:C.cancelText),okTextLocale:k,mergedOkCancel:x},b),M=a.useMemo(()=>R,(0,o.Z)(Object.values(R))),j=a.createElement(a.Fragment,null,a.createElement(O,null),a.createElement(Z,null)),P=void 0!==e.title&&null!==e.title,N="".concat(c,"-body");return a.createElement("div",{className:"".concat(c,"-body-wrapper")},a.createElement("div",{className:m()(N,{["".concat(N,"-has-title")]:P})},y,a.createElement("div",{className:"".concat(c,"-paragraph")},P&&a.createElement("span",{className:"".concat(c,"-title")},e.title),a.createElement("div",{className:"".concat(c,"-content")},e.content))),void 0===g||"function"==typeof g?a.createElement(S,{value:M},a.createElement("div",{className:"".concat(c,"-btns")},"function"==typeof g?g(j,{OkBtn:Z,CancelBtn:O}):j)):g,a.createElement(eR,{prefixCls:t}))}let eP=e=>{let{close:t,zIndex:n,afterClose:r,open:o,keyboard:i,centered:c,getContainer:l,maskStyle:s,direction:u,prefixCls:d,wrapClassName:f,rootPrefixCls:p,bodyStyle:v,closable:y=!1,closeIcon:x,modalRender:w,focusTriggerAfterClose:E,onConfirm:C,styles:S}=e,O="".concat(d,"-confirm"),Z=e.width||416,k=e.style||{},R=void 0===e.mask||e.mask,M=void 0!==e.maskClosable&&e.maskClosable,j=m()(O,"".concat(O,"-").concat(e.type),{["".concat(O,"-rtl")]:"rtl"===u},e.className),[,P]=(0,b.ZP)(),N=a.useMemo(()=>void 0!==n?n:P.zIndexPopupBase+g.u6,[n,P]);return a.createElement(eZ,{prefixCls:d,className:j,wrapClassName:m()({["".concat(O,"-centered")]:!!e.centered},f),onCancel:()=>{null==t||t({triggerCancel:!0}),null==C||C(!1)},open:o,title:"",footer:null,transitionName:(0,h.m)(p||"","zoom",e.transitionName),maskTransitionName:(0,h.m)(p||"","fade",e.maskTransitionName),mask:R,maskClosable:M,style:k,styles:Object.assign({body:v,mask:s},S),width:Z,zIndex:N,afterClose:r,keyboard:i,centered:c,getContainer:l,closable:y,closeIcon:x,modalRender:w,focusTriggerAfterClose:E},a.createElement(ej,Object.assign({},e,{confirmPrefixCls:O})))};var eN=e=>{let{rootPrefixCls:t,iconPrefixCls:n,direction:r,theme:o}=e;return a.createElement(l.ZP,{prefixCls:t,iconPrefixCls:n,direction:r,theme:o},a.createElement(eP,Object.assign({},e)))},eI=[];let eT="",eA=e=>{var t,n;let{prefixCls:r,getContainer:o,direction:i}=e,l=(0,ea.A)(),s=(0,a.useContext)(c.E_),u=eT||s.getPrefixCls(),d=r||"".concat(u,"-modal"),f=o;return!1===f&&(f=void 0),a.createElement(eN,Object.assign({},e,{rootPrefixCls:u,prefixCls:d,iconPrefixCls:s.iconPrefixCls,theme:s.theme,direction:null!=i?i:s.direction,locale:null!==(n=null===(t=s.locale)||void 0===t?void 0:t.Modal)&&void 0!==n?n:l,getContainer:f}))};function eF(e){let t;let n=(0,l.w6)(),r=document.createDocumentFragment(),c=Object.assign(Object.assign({},e),{close:d,open:!0});function s(){for(var t=arguments.length,n=Array(t),a=0;ae&&e.triggerCancel);e.onCancel&&c&&e.onCancel.apply(e,[()=>{}].concat((0,o.Z)(n.slice(1))));for(let e=0;e{let t=n.getPrefixCls(void 0,eT),o=n.getIconPrefixCls(),c=n.getTheme(),s=a.createElement(eA,Object.assign({},e));(0,i.s)(a.createElement(l.ZP,{prefixCls:t,iconPrefixCls:o,theme:c},n.holderRender?n.holderRender(s):s),r)})}function d(){for(var t=arguments.length,n=Array(t),r=0;r{"function"==typeof e.afterClose&&e.afterClose(),s.apply(this,n)}})).visible&&delete c.visible,u(c)}return u(c),eI.push(d),{destroy:d,update:function(e){u(c="function"==typeof e?e(c):Object.assign(Object.assign({},c),e))}}}function ez(e){return Object.assign(Object.assign({},e),{type:"warning"})}function eL(e){return Object.assign(Object.assign({},e),{type:"info"})}function e_(e){return Object.assign(Object.assign({},e),{type:"success"})}function eB(e){return Object.assign(Object.assign({},e),{type:"error"})}function eH(e){return Object.assign(Object.assign({},e),{type:"confirm"})}var eD=n(1467),eW=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},eV=(0,eD.i)(e=>{let{prefixCls:t,className:n,closeIcon:r,closable:o,type:i,title:l,children:s,footer:u}=e,d=eW(e,["prefixCls","className","closeIcon","closable","type","title","children","footer"]),{getPrefixCls:f}=a.useContext(c.E_),p=f(),g=t||f("modal"),h=(0,eS.Z)(p),[v,b,y]=eC(g,h),x="".concat(g,"-confirm"),w={};return w=i?{closable:null!=o&&o,title:"",footer:"",children:a.createElement(ej,Object.assign({},e,{prefixCls:g,confirmPrefixCls:x,rootPrefixCls:p,content:s}))}:{closable:null==o||o,title:l,footer:null!==u&&a.createElement(ec,Object.assign({},e)),children:s},v(a.createElement(W,Object.assign({prefixCls:g,className:m()(b,"".concat(g,"-pure-panel"),i&&x,i&&"".concat(x,"-").concat(i),n,y,h)},d,{closeIcon:ei(g,r),closable:o},w)))}),eq=n(9474),eX=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n},eG=a.forwardRef((e,t)=>{var n,{afterClose:r,config:i}=e,l=eX(e,["afterClose","config"]);let[s,u]=a.useState(!0),[d,f]=a.useState(i),{direction:p,getPrefixCls:m}=a.useContext(c.E_),g=m("modal"),h=m(),b=function(){u(!1);for(var e=arguments.length,t=Array(e),n=0;ne&&e.triggerCancel);d.onCancel&&r&&d.onCancel.apply(d,[()=>{}].concat((0,o.Z)(t.slice(1))))};a.useImperativeHandle(t,()=>({destroy:b,update:e=>{f(t=>Object.assign(Object.assign({},t),e))}}));let y=null!==(n=d.okCancel)&&void 0!==n?n:"confirm"===d.type,[x]=(0,v.Z)("Modal",eq.Z.Modal);return a.createElement(eN,Object.assign({prefixCls:g,rootPrefixCls:h},d,{close:b,open:s,afterClose:()=>{var e;r(),null===(e=d.afterClose)||void 0===e||e.call(d)},okText:d.okText||(y?null==x?void 0:x.okText:null==x?void 0:x.justOkText),direction:d.direction||p,cancelText:d.cancelText||(null==x?void 0:x.cancelText)},l))});let eU=0,eK=a.memo(a.forwardRef((e,t)=>{let[n,r]=function(){let[e,t]=a.useState([]);return[e,a.useCallback(e=>(t(t=>[].concat((0,o.Z)(t),[e])),()=>{t(t=>t.filter(t=>t!==e))}),[])]}();return a.useImperativeHandle(t,()=>({patchElement:r}),[]),a.createElement(a.Fragment,null,n)}));function e$(e){return eF(ez(e))}eZ.useModal=function(){let e=a.useRef(null),[t,n]=a.useState([]);a.useEffect(()=>{t.length&&((0,o.Z)(t).forEach(e=>{e()}),n([]))},[t]);let r=a.useCallback(t=>function(r){var i;let c,l;eU+=1;let s=a.createRef(),u=new Promise(e=>{c=e}),d=!1,f=a.createElement(eG,{key:"modal-".concat(eU),config:t(r),ref:s,afterClose:()=>{null==l||l()},isSilent:()=>d,onConfirm:e=>{c(e)}});return(l=null===(i=e.current)||void 0===i?void 0:i.patchElement(f))&&eI.push(l),{destroy:()=>{function e(){var e;null===(e=s.current)||void 0===e||e.destroy()}s.current?e():n(t=>[].concat((0,o.Z)(t),[e]))},update:e=>{function t(){var t;null===(t=s.current)||void 0===t||t.update(e)}s.current?t():n(e=>[].concat((0,o.Z)(e),[t]))},then:e=>(d=!0,u.then(e))}},[]);return[a.useMemo(()=>({info:r(eL),success:r(e_),error:r(eB),warning:r(ez),confirm:r(eH)}),[]),a.createElement(eK,{key:"modal-holder",ref:e})]},eZ.info=function(e){return eF(eL(e))},eZ.success=function(e){return eF(e_(e))},eZ.error=function(e){return eF(eB(e))},eZ.warning=e$,eZ.warn=e$,eZ.confirm=function(e){return eF(eH(e))},eZ.destroyAll=function(){for(;eI.length;){let e=eI.pop();e&&e()}},eZ.config=function(e){let{rootPrefixCls:t}=e;eT=t},eZ._InternalPanelDoNotUseOrYouWillBeFired=eV;var eY=eZ},4678:function(e,t,n){n.d(t,{A:function(){return l},f:function(){return c}});var r=n(9474);let o=Object.assign({},r.Z.Modal),a=[],i=()=>a.reduce((e,t)=>Object.assign(Object.assign({},e),t),r.Z.Modal);function c(e){if(e){let t=Object.assign({},e);return a.push(t),o=i(),()=>{a=a.filter(e=>e!==t),o=i()}}o=Object.assign({},r.Z.Modal)}function l(){return o}},6776:function(e,t,n){n.d(t,{default:function(){return t4}});var r=n(4090),o=n(6480),a=n.n(o),i=n(2110),c=n(3787),l=n(833),s=n(5239),u=n(406),d=n(6787),f=n(6976),p=n(4329),m=n(3850),g=n(4800),h=n(6158),v=n(4295),b=n(4084),y=function(e){var t=e.className,n=e.customizeIcon,o=e.customizeIconProps,i=e.children,c=e.onMouseDown,l=e.onClick,s="function"==typeof n?n(o):n;return r.createElement("span",{className:t,onMouseDown:function(e){e.preventDefault(),null==c||c(e)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:l,"aria-hidden":!0},void 0!==s?s:r.createElement("span",{className:a()(t.split(/\s+/).map(function(e){return"".concat(e,"-icon")}))},i))},x=function(e,t,n,o,a){var i=arguments.length>5&&void 0!==arguments[5]&&arguments[5],c=arguments.length>6?arguments[6]:void 0,l=arguments.length>7?arguments[7]:void 0,s=r.useMemo(function(){return"object"===(0,f.Z)(o)?o.clearIcon:a||void 0},[o,a]);return{allowClear:r.useMemo(function(){return!i&&!!o&&(!!n.length||!!c)&&!("combobox"===l&&""===c)},[o,i,n.length,c,l]),clearIcon:r.createElement(y,{className:"".concat(e,"-clear"),onMouseDown:t,customizeIcon:s},"\xd7")}},w=r.createContext(null);function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:250,t=r.useRef(null),n=r.useRef(null);return r.useEffect(function(){return function(){window.clearTimeout(n.current)}},[]),[function(){return t.current},function(r){(r||null===t.current)&&(t.current=r),window.clearTimeout(n.current),n.current=window.setTimeout(function(){t.current=null},e)}]}var C=n(2480),S=n(6505),O=["prefixCls","invalidate","item","renderItem","responsive","responsiveDisabled","registerSize","itemKey","className","style","children","display","order","component"],Z=void 0,k=r.forwardRef(function(e,t){var n,o=e.prefixCls,c=e.invalidate,l=e.item,u=e.renderItem,f=e.responsive,p=e.responsiveDisabled,m=e.registerSize,g=e.itemKey,h=e.className,v=e.style,b=e.children,y=e.display,x=e.order,w=e.component,E=(0,d.Z)(e,O),C=f&&!y;r.useEffect(function(){return function(){m(g,null)}},[]);var k=u&&l!==Z?u(l):b;c||(n={opacity:C?0:1,height:C?0:Z,overflowY:C?"hidden":Z,order:f?x:Z,pointerEvents:C?"none":Z,position:C?"absolute":Z});var R={};C&&(R["aria-hidden"]=!0);var M=r.createElement(void 0===w?"div":w,(0,i.Z)({className:a()(!c&&o,h),style:(0,s.Z)((0,s.Z)({},n),v)},R,E,{ref:t}),k);return f&&(M=r.createElement(S.Z,{onResize:function(e){m(g,e.offsetWidth)},disabled:p},M)),M});k.displayName="Item";var R=n(4811),M=n(9542),j=n(9223);function P(e,t){var n=r.useState(t),o=(0,u.Z)(n,2),a=o[0],i=o[1];return[a,(0,R.Z)(function(t){e(function(){i(t)})})]}var N=r.createContext(null),I=["component"],T=["className"],A=["className"],F=r.forwardRef(function(e,t){var n=r.useContext(N);if(!n){var o=e.component,c=(0,d.Z)(e,I);return r.createElement(void 0===o?"div":o,(0,i.Z)({},c,{ref:t}))}var l=n.className,s=(0,d.Z)(n,T),u=e.className,f=(0,d.Z)(e,A);return r.createElement(N.Provider,{value:null},r.createElement(k,(0,i.Z)({ref:t,className:a()(l,u)},s,f)))});F.displayName="RawItem";var z=["prefixCls","data","renderItem","renderRawItem","itemKey","itemWidth","ssr","style","className","maxCount","renderRest","renderRawRest","suffix","component","itemComponent","onVisibleChange"],L="responsive",_="invalidate";function B(e){return"+ ".concat(e.length," ...")}var H=r.forwardRef(function(e,t){var n,o,c=e.prefixCls,l=void 0===c?"rc-overflow":c,f=e.data,p=void 0===f?[]:f,m=e.renderItem,h=e.renderRawItem,v=e.itemKey,b=e.itemWidth,y=void 0===b?10:b,x=e.ssr,w=e.style,E=e.className,C=e.maxCount,O=e.renderRest,Z=e.renderRawRest,R=e.suffix,I=e.component,T=e.itemComponent,A=e.onVisibleChange,F=(0,d.Z)(e,z),H="full"===x,D=(n=r.useRef(null),function(e){n.current||(n.current=[],function(e){if("undefined"==typeof MessageChannel)(0,j.Z)(e);else{var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(void 0)}}(function(){(0,M.unstable_batchedUpdates)(function(){n.current.forEach(function(e){e()}),n.current=null})})),n.current.push(e)}),W=P(D,null),V=(0,u.Z)(W,2),q=V[0],X=V[1],G=q||0,U=P(D,new Map),K=(0,u.Z)(U,2),$=K[0],Y=K[1],Q=P(D,0),J=(0,u.Z)(Q,2),ee=J[0],et=J[1],en=P(D,0),er=(0,u.Z)(en,2),eo=er[0],ea=er[1],ei=P(D,0),ec=(0,u.Z)(ei,2),el=ec[0],es=ec[1],eu=(0,r.useState)(null),ed=(0,u.Z)(eu,2),ef=ed[0],ep=ed[1],em=(0,r.useState)(null),eg=(0,u.Z)(em,2),eh=eg[0],ev=eg[1],eb=r.useMemo(function(){return null===eh&&H?Number.MAX_SAFE_INTEGER:eh||0},[eh,q]),ey=(0,r.useState)(!1),ex=(0,u.Z)(ey,2),ew=ex[0],eE=ex[1],eC="".concat(l,"-item"),eS=Math.max(ee,eo),eO=C===L,eZ=p.length&&eO,ek=C===_,eR=eZ||"number"==typeof C&&p.length>C,eM=(0,r.useMemo)(function(){var e=p;return eZ?e=null===q&&H?p:p.slice(0,Math.min(p.length,G/y)):"number"==typeof C&&(e=p.slice(0,C)),e},[p,y,q,C,eZ]),ej=(0,r.useMemo)(function(){return eZ?p.slice(eb+1):p.slice(eM.length)},[p,eM,eZ,eb]),eP=(0,r.useCallback)(function(e,t){var n;return"function"==typeof v?v(e):null!==(n=v&&(null==e?void 0:e[v]))&&void 0!==n?n:t},[v]),eN=(0,r.useCallback)(m||function(e){return e},[m]);function eI(e,t,n){(eh!==e||void 0!==t&&t!==ef)&&(ev(e),n||(eE(eG){eI(r-1,e-o-el+eo);break}}R&&eA(0)+el>G&&ep(null)}},[G,$,eo,el,eP,eM]);var eF=ew&&!!ej.length,ez={};null!==ef&&eZ&&(ez={position:"absolute",left:ef,top:0});var eL={prefixCls:eC,responsive:eZ,component:T,invalidate:ek},e_=h?function(e,t){var n=eP(e,t);return r.createElement(N.Provider,{key:n,value:(0,s.Z)((0,s.Z)({},eL),{},{order:t,item:e,itemKey:n,registerSize:eT,display:t<=eb})},h(e,t))}:function(e,t){var n=eP(e,t);return r.createElement(k,(0,i.Z)({},eL,{order:t,key:n,item:e,renderItem:eN,itemKey:n,registerSize:eT,display:t<=eb}))},eB={order:eF?eb:Number.MAX_SAFE_INTEGER,className:"".concat(eC,"-rest"),registerSize:function(e,t){ea(t),et(eo)},display:eF};if(Z)Z&&(o=r.createElement(N.Provider,{value:(0,s.Z)((0,s.Z)({},eL),eB)},Z(ej)));else{var eH=O||B;o=r.createElement(k,(0,i.Z)({},eL,eB),"function"==typeof eH?eH(ej):eH)}var eD=r.createElement(void 0===I?"div":I,(0,i.Z)({className:a()(!ek&&l,E),style:w,ref:t},F),eM.map(e_),eR?o:null,R&&r.createElement(k,(0,i.Z)({},eL,{responsive:eO,responsiveDisabled:!eZ,order:eb,className:"".concat(eC,"-suffix"),registerSize:function(e,t){es(t)},display:!0,style:ez}),R));return eO&&(eD=r.createElement(S.Z,{onResize:function(e,t){X(t.clientWidth)},disabled:!eZ},eD)),eD});H.displayName="Overflow",H.Item=F,H.RESPONSIVE=L,H.INVALIDATE=_;var D=r.forwardRef(function(e,t){var n,o=e.prefixCls,i=e.id,c=e.inputElement,l=e.disabled,u=e.tabIndex,d=e.autoFocus,f=e.autoComplete,p=e.editable,g=e.activeDescendantId,h=e.value,v=e.maxLength,y=e.onKeyDown,x=e.onMouseDown,w=e.onChange,E=e.onPaste,C=e.onCompositionStart,S=e.onCompositionEnd,O=e.open,Z=e.attrs,k=c||r.createElement("input",null),R=k,M=R.ref,j=R.props,P=j.onKeyDown,N=j.onChange,I=j.onMouseDown,T=j.onCompositionStart,A=j.onCompositionEnd,F=j.style;return(0,m.Kp)(!("maxLength"in k.props),"Passing 'maxLength' to input element directly may not work because input in BaseSelect is controlled."),k=r.cloneElement(k,(0,s.Z)((0,s.Z)((0,s.Z)({type:"search"},j),{},{id:i,ref:(0,b.sQ)(t,M),disabled:l,tabIndex:u,autoComplete:f||"off",autoFocus:d,className:a()("".concat(o,"-selection-search-input"),null===(n=k)||void 0===n||null===(n=n.props)||void 0===n?void 0:n.className),role:"combobox","aria-expanded":O||!1,"aria-haspopup":"listbox","aria-owns":"".concat(i,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(i,"_list"),"aria-activedescendant":O?g:void 0},Z),{},{value:p?h:"",maxLength:v,readOnly:!p,unselectable:p?null:"on",style:(0,s.Z)((0,s.Z)({},F),{},{opacity:p?null:0}),onKeyDown:function(e){y(e),P&&P(e)},onMouseDown:function(e){x(e),I&&I(e)},onChange:function(e){w(e),N&&N(e)},onCompositionStart:function(e){C(e),T&&T(e)},onCompositionEnd:function(e){S(e),A&&A(e)},onPaste:E}))});function W(e){return Array.isArray(e)?e:void 0!==e?[e]:[]}var V=window.document&&window.document.documentElement;function q(e){return["string","number"].includes((0,f.Z)(e))}function X(e){var t=void 0;return e&&(q(e.title)?t=e.title.toString():q(e.label)&&(t=e.label.toString())),t}function G(e){var t;return null!==(t=e.key)&&void 0!==t?t:e.value}var U=function(e){e.preventDefault(),e.stopPropagation()},K=function(e){var t,n,o=e.id,i=e.prefixCls,c=e.values,s=e.open,d=e.searchValue,f=e.autoClearSearchValue,p=e.inputRef,m=e.placeholder,g=e.disabled,h=e.mode,v=e.showSearch,b=e.autoFocus,x=e.autoComplete,w=e.activeDescendantId,E=e.tabIndex,S=e.removeIcon,O=e.maxTagCount,Z=e.maxTagTextLength,k=e.maxTagPlaceholder,R=void 0===k?function(e){return"+ ".concat(e.length," ...")}:k,M=e.tagRender,j=e.onToggleOpen,P=e.onRemove,N=e.onInputChange,I=e.onInputPaste,T=e.onInputKeyDown,A=e.onInputMouseDown,F=e.onInputCompositionStart,z=e.onInputCompositionEnd,L=r.useRef(null),_=(0,r.useState)(0),B=(0,u.Z)(_,2),W=B[0],q=B[1],K=(0,r.useState)(!1),$=(0,u.Z)(K,2),Y=$[0],Q=$[1],J="".concat(i,"-selection"),ee=s||"multiple"===h&&!1===f||"tags"===h?d:"",et="tags"===h||"multiple"===h&&!1===f||v&&(s||Y);t=function(){q(L.current.scrollWidth)},n=[ee],V?r.useLayoutEffect(t,n):r.useEffect(t,n);var en=function(e,t,n,o,i){return r.createElement("span",{title:X(e),className:a()("".concat(J,"-item"),(0,l.Z)({},"".concat(J,"-item-disabled"),n))},r.createElement("span",{className:"".concat(J,"-item-content")},t),o&&r.createElement(y,{className:"".concat(J,"-item-remove"),onMouseDown:U,onClick:i,customizeIcon:S},"\xd7"))},er=r.createElement("div",{className:"".concat(J,"-search"),style:{width:W},onFocus:function(){Q(!0)},onBlur:function(){Q(!1)}},r.createElement(D,{ref:p,open:s,prefixCls:i,id:o,inputElement:null,disabled:g,autoFocus:b,autoComplete:x,editable:et,activeDescendantId:w,value:ee,onKeyDown:T,onMouseDown:A,onChange:N,onPaste:I,onCompositionStart:F,onCompositionEnd:z,tabIndex:E,attrs:(0,C.Z)(e,!0)}),r.createElement("span",{ref:L,className:"".concat(J,"-search-mirror"),"aria-hidden":!0},ee,"\xa0")),eo=r.createElement(H,{prefixCls:"".concat(J,"-overflow"),data:c,renderItem:function(e){var t,n=e.disabled,o=e.label,a=e.value,i=!g&&!n,c=o;if("number"==typeof Z&&("string"==typeof o||"number"==typeof o)){var l=String(c);l.length>Z&&(c="".concat(l.slice(0,Z),"..."))}var u=function(t){t&&t.stopPropagation(),P(e)};return"function"==typeof M?(t=c,r.createElement("span",{onMouseDown:function(e){U(e),j(!s)}},M({label:t,value:a,disabled:n,closable:i,onClose:u}))):en(e,c,n,i,u)},renderRest:function(e){var t="function"==typeof R?R(e):R;return en({title:t},t,!1)},suffix:er,itemKey:G,maxCount:O});return r.createElement(r.Fragment,null,eo,!c.length&&!ee&&r.createElement("span",{className:"".concat(J,"-placeholder")},m))},$=function(e){var t=e.inputElement,n=e.prefixCls,o=e.id,a=e.inputRef,i=e.disabled,c=e.autoFocus,l=e.autoComplete,s=e.activeDescendantId,d=e.mode,f=e.open,p=e.values,m=e.placeholder,g=e.tabIndex,h=e.showSearch,v=e.searchValue,b=e.activeValue,y=e.maxLength,x=e.onInputKeyDown,w=e.onInputMouseDown,E=e.onInputChange,S=e.onInputPaste,O=e.onInputCompositionStart,Z=e.onInputCompositionEnd,k=e.title,R=r.useState(!1),M=(0,u.Z)(R,2),j=M[0],P=M[1],N="combobox"===d,I=N||h,T=p[0],A=v||"";N&&b&&!j&&(A=b),r.useEffect(function(){N&&P(!1)},[N,b]);var F=("combobox"===d||!!f||!!h)&&!!A,z=void 0===k?X(T):k,L=r.useMemo(function(){return T?null:r.createElement("span",{className:"".concat(n,"-selection-placeholder"),style:F?{visibility:"hidden"}:void 0},m)},[T,F,m,n]);return r.createElement(r.Fragment,null,r.createElement("span",{className:"".concat(n,"-selection-search")},r.createElement(D,{ref:a,prefixCls:n,id:o,open:f,inputElement:t,disabled:i,autoFocus:c,autoComplete:l,editable:I,activeDescendantId:s,value:A,onKeyDown:x,onMouseDown:w,onChange:function(e){P(!0),E(e)},onPaste:S,onCompositionStart:O,onCompositionEnd:Z,tabIndex:g,attrs:(0,C.Z)(e,!0),maxLength:N?y:void 0})),!N&&T?r.createElement("span",{className:"".concat(n,"-selection-item"),title:z,style:F?{visibility:"hidden"}:void 0},T.label):null,L)},Y=r.forwardRef(function(e,t){var n=(0,r.useRef)(null),o=(0,r.useRef)(!1),a=e.prefixCls,c=e.open,l=e.mode,s=e.showSearch,d=e.tokenWithEnter,f=e.autoClearSearchValue,p=e.onSearch,m=e.onSearchSubmit,g=e.onToggleOpen,h=e.onInputKeyDown,b=e.domRef;r.useImperativeHandle(t,function(){return{focus:function(){n.current.focus()},blur:function(){n.current.blur()}}});var y=E(0),x=(0,u.Z)(y,2),w=x[0],C=x[1],S=(0,r.useRef)(null),O=function(e){!1!==p(e,!0,o.current)&&g(!0)},Z={inputRef:n,onInputKeyDown:function(e){var t=e.which;(t===v.Z.UP||t===v.Z.DOWN)&&e.preventDefault(),h&&h(e),t!==v.Z.ENTER||"tags"!==l||o.current||c||null==m||m(e.target.value),[v.Z.ESC,v.Z.SHIFT,v.Z.BACKSPACE,v.Z.TAB,v.Z.WIN_KEY,v.Z.ALT,v.Z.META,v.Z.WIN_KEY_RIGHT,v.Z.CTRL,v.Z.SEMICOLON,v.Z.EQUALS,v.Z.CAPS_LOCK,v.Z.CONTEXT_MENU,v.Z.F1,v.Z.F2,v.Z.F3,v.Z.F4,v.Z.F5,v.Z.F6,v.Z.F7,v.Z.F8,v.Z.F9,v.Z.F10,v.Z.F11,v.Z.F12].includes(t)||g(!0)},onInputMouseDown:function(){C(!0)},onInputChange:function(e){var t=e.target.value;if(d&&S.current&&/[\r\n]/.test(S.current)){var n=S.current.replace(/[\r\n]+$/,"").replace(/\r\n/g," ").replace(/[\r\n]/g," ");t=t.replace(n,S.current)}S.current=null,O(t)},onInputPaste:function(e){var t=e.clipboardData,n=null==t?void 0:t.getData("text");S.current=n||""},onInputCompositionStart:function(){o.current=!0},onInputCompositionEnd:function(e){o.current=!1,"combobox"!==l&&O(e.target.value)}},k="multiple"===l||"tags"===l?r.createElement(K,(0,i.Z)({},e,Z)):r.createElement($,(0,i.Z)({},e,Z));return r.createElement("div",{ref:b,className:"".concat(a,"-selector"),onClick:function(e){e.target!==n.current&&(void 0!==document.body.style.msTouchAction?setTimeout(function(){n.current.focus()}):n.current.focus())},onMouseDown:function(e){var t=w();e.target===n.current||t||"combobox"===l||e.preventDefault(),("combobox"===l||s&&t)&&c||(c&&!1!==f&&p("",!0,!1),g())}},k)}),Q=n(1737),J=["prefixCls","disabled","visible","children","popupElement","animation","transitionName","dropdownStyle","dropdownClassName","direction","placement","builtinPlacements","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","getPopupContainer","empty","getTriggerDOMNode","onPopupVisibleChange","onPopupMouseEnter"],ee=function(e){var t=!0===e?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:t,adjustY:1},htmlRegion:"scroll"}}},et=r.forwardRef(function(e,t){var n=e.prefixCls,o=(e.disabled,e.visible),c=e.children,u=e.popupElement,f=e.animation,p=e.transitionName,m=e.dropdownStyle,g=e.dropdownClassName,h=e.direction,v=e.placement,b=e.builtinPlacements,y=e.dropdownMatchSelectWidth,x=e.dropdownRender,w=e.dropdownAlign,E=e.getPopupContainer,C=e.empty,S=e.getTriggerDOMNode,O=e.onPopupVisibleChange,Z=e.onPopupMouseEnter,k=(0,d.Z)(e,J),R="".concat(n,"-dropdown"),M=u;x&&(M=x(u));var j=r.useMemo(function(){return b||ee(y)},[b,y]),P=f?"".concat(R,"-").concat(f):p,N="number"==typeof y,I=r.useMemo(function(){return N?null:!1===y?"minWidth":"width"},[y,N]),T=m;N&&(T=(0,s.Z)((0,s.Z)({},T),{},{width:y}));var A=r.useRef(null);return r.useImperativeHandle(t,function(){return{getPopupElement:function(){return A.current}}}),r.createElement(Q.Z,(0,i.Z)({},k,{showAction:O?["click"]:[],hideAction:O?["click"]:[],popupPlacement:v||("rtl"===(void 0===h?"ltr":h)?"bottomRight":"bottomLeft"),builtinPlacements:j,prefixCls:R,popupTransitionName:P,popup:r.createElement("div",{ref:A,onMouseEnter:Z},M),stretch:I,popupAlign:w,popupVisible:o,getPopupContainer:E,popupClassName:a()(g,(0,l.Z)({},"".concat(R,"-empty"),C)),popupStyle:T,getTriggerDOMNode:S,onPopupVisibleChange:O}),c)}),en=n(6721);function er(e,t){var n,r=e.key;return("value"in e&&(n=e.value),null!=r)?r:void 0!==n?n:"rc-index-key-".concat(t)}function eo(e,t){var n=e||{},r=n.label,o=n.value,a=n.options,i=n.groupLabel,c=r||(t?"children":"label");return{label:c,value:o||"value",options:a||"options",groupLabel:i||c}}function ea(e){var t=(0,s.Z)({},e);return"props"in t||Object.defineProperty(t,"props",{get:function(){return(0,m.ZP)(!1,"Return type is option instead of Option instance. Please read value directly instead of reading from `props`."),t}}),t}var ei=function(e,t,n){if(!t||!t.length)return null;var r=!1,o=function e(t,n){var o=(0,en.Z)(n),a=o[0],i=o.slice(1);if(!a)return[t];var l=t.split(a);return r=r||l.length>1,l.reduce(function(t,n){return[].concat((0,c.Z)(t),(0,c.Z)(e(n,i)))},[]).filter(Boolean)}(e,t);return r?void 0!==n?o.slice(0,n):o:null},ec=r.createContext(null),el=["id","prefixCls","className","showSearch","tagRender","direction","omitDomProps","displayValues","onDisplayValuesChange","emptyOptions","notFoundContent","onClear","mode","disabled","loading","getInputElement","getRawInputElement","open","defaultOpen","onDropdownVisibleChange","activeValue","onActiveValueChange","activeDescendantId","searchValue","autoClearSearchValue","onSearch","onSearchSplit","tokenSeparators","allowClear","suffixIcon","clearIcon","OptionList","animation","transitionName","dropdownStyle","dropdownClassName","dropdownMatchSelectWidth","dropdownRender","dropdownAlign","placement","builtinPlacements","getPopupContainer","showAction","onFocus","onBlur","onKeyUp","onKeyDown","onMouseDown"],es=["value","onChange","removeIcon","placeholder","autoFocus","maxTagCount","maxTagTextLength","maxTagPlaceholder","choiceTransitionName","onInputKeyDown","onPopupScroll","tabIndex"],eu=function(e){return"tags"===e||"multiple"===e},ed=r.forwardRef(function(e,t){var n,o,m,C,S,O,Z,k,R=e.id,M=e.prefixCls,j=e.className,P=e.showSearch,N=e.tagRender,I=e.direction,T=e.omitDomProps,A=e.displayValues,F=e.onDisplayValuesChange,z=e.emptyOptions,L=e.notFoundContent,_=void 0===L?"Not Found":L,B=e.onClear,H=e.mode,D=e.disabled,W=e.loading,V=e.getInputElement,q=e.getRawInputElement,X=e.open,G=e.defaultOpen,U=e.onDropdownVisibleChange,K=e.activeValue,$=e.onActiveValueChange,Q=e.activeDescendantId,J=e.searchValue,ee=e.autoClearSearchValue,en=e.onSearch,er=e.onSearchSplit,eo=e.tokenSeparators,ea=e.allowClear,ed=e.suffixIcon,ef=e.clearIcon,ep=e.OptionList,em=e.animation,eg=e.transitionName,eh=e.dropdownStyle,ev=e.dropdownClassName,eb=e.dropdownMatchSelectWidth,ey=e.dropdownRender,ex=e.dropdownAlign,ew=e.placement,eE=e.builtinPlacements,eC=e.getPopupContainer,eS=e.showAction,eO=void 0===eS?[]:eS,eZ=e.onFocus,ek=e.onBlur,eR=e.onKeyUp,eM=e.onKeyDown,ej=e.onMouseDown,eP=(0,d.Z)(e,el),eN=eu(H),eI=(void 0!==P?P:eN)||"combobox"===H,eT=(0,s.Z)({},eP);es.forEach(function(e){delete eT[e]}),null==T||T.forEach(function(e){delete eT[e]});var eA=r.useState(!1),eF=(0,u.Z)(eA,2),ez=eF[0],eL=eF[1];r.useEffect(function(){eL((0,h.Z)())},[]);var e_=r.useRef(null),eB=r.useRef(null),eH=r.useRef(null),eD=r.useRef(null),eW=r.useRef(null),eV=r.useRef(!1),eq=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,t=r.useState(!1),n=(0,u.Z)(t,2),o=n[0],a=n[1],i=r.useRef(null),c=function(){window.clearTimeout(i.current)};return r.useEffect(function(){return c},[]),[o,function(t,n){c(),i.current=window.setTimeout(function(){a(t),n&&n()},e)},c]}(),eX=(0,u.Z)(eq,3),eG=eX[0],eU=eX[1],eK=eX[2];r.useImperativeHandle(t,function(){var e,t;return{focus:null===(e=eD.current)||void 0===e?void 0:e.focus,blur:null===(t=eD.current)||void 0===t?void 0:t.blur,scrollTo:function(e){var t;return null===(t=eW.current)||void 0===t?void 0:t.scrollTo(e)}}});var e$=r.useMemo(function(){if("combobox"!==H)return J;var e,t=null===(e=A[0])||void 0===e?void 0:e.value;return"string"==typeof t||"number"==typeof t?String(t):""},[J,H,A]),eY="combobox"===H&&"function"==typeof V&&V()||null,eQ="function"==typeof q&&q(),eJ=(0,b.x1)(eB,null==eQ||null===(C=eQ.props)||void 0===C?void 0:C.ref),e0=r.useState(!1),e1=(0,u.Z)(e0,2),e2=e1[0],e4=e1[1];(0,g.Z)(function(){e4(!0)},[]);var e5=(0,p.Z)(!1,{defaultValue:G,value:X}),e3=(0,u.Z)(e5,2),e6=e3[0],e8=e3[1],e9=!!e2&&e6,e7=!_&&z;(D||e7&&e9&&"combobox"===H)&&(e9=!1);var te=!e7&&e9,tt=r.useCallback(function(e){var t=void 0!==e?e:!e9;D||(e8(t),e9!==t&&(null==U||U(t)))},[D,e9,e8,U]),tn=r.useMemo(function(){return(eo||[]).some(function(e){return["\n","\r\n"].includes(e)})},[eo]),tr=r.useContext(ec)||{},to=tr.maxCount,ta=tr.rawValues,ti=function(e,t,n){if(!((null==ta?void 0:ta.size)>=to)){var r=!0,o=e;null==$||$(null);var a=ei(e,eo,to&&to-ta.size),i=n?null:a;return"combobox"!==H&&i&&(o="",null==er||er(i),tt(!1),r=!1),en&&e$!==o&&en(o,{source:t?"typing":"effect"}),r}};r.useEffect(function(){e9||eN||"combobox"===H||ti("",!1,!1)},[e9]),r.useEffect(function(){e6&&D&&e8(!1),D&&!eV.current&&eU(!1)},[D]);var tc=E(),tl=(0,u.Z)(tc,2),ts=tl[0],tu=tl[1],td=r.useRef(!1),tf=[];r.useEffect(function(){return function(){tf.forEach(function(e){return clearTimeout(e)}),tf.splice(0,tf.length)}},[]);var tp=r.useState({}),tm=(0,u.Z)(tp,2)[1];eQ&&(O=function(e){tt(e)}),n=function(){var e;return[e_.current,null===(e=eH.current)||void 0===e?void 0:e.getPopupElement()]},o=!!eQ,(m=r.useRef(null)).current={open:te,triggerOpen:tt,customizedTrigger:o},r.useEffect(function(){function e(e){if(null===(t=m.current)||void 0===t||!t.customizedTrigger){var t,r=e.target;r.shadowRoot&&e.composed&&(r=e.composedPath()[0]||r),m.current.open&&n().filter(function(e){return e}).every(function(e){return!e.contains(r)&&e!==r})&&m.current.triggerOpen(!1)}}return window.addEventListener("mousedown",e),function(){return window.removeEventListener("mousedown",e)}},[]);var tg=r.useMemo(function(){return(0,s.Z)((0,s.Z)({},e),{},{notFoundContent:_,open:e9,triggerOpen:te,id:R,showSearch:eI,multiple:eN,toggleOpen:tt})},[e,_,te,e9,R,eI,eN,tt]),th=!!ed||W;th&&(Z=r.createElement(y,{className:a()("".concat(M,"-arrow"),(0,l.Z)({},"".concat(M,"-arrow-loading"),W)),customizeIcon:ed,customizeIconProps:{loading:W,searchValue:e$,open:e9,focused:eG,showSearch:eI}}));var tv=x(M,function(){var e;null==B||B(),null===(e=eD.current)||void 0===e||e.focus(),F([],{type:"clear",values:A}),ti("",!1,!1)},A,ea,ef,D,e$,H),tb=tv.allowClear,ty=tv.clearIcon,tx=r.createElement(ep,{ref:eW}),tw=a()(M,j,(S={},(0,l.Z)(S,"".concat(M,"-focused"),eG),(0,l.Z)(S,"".concat(M,"-multiple"),eN),(0,l.Z)(S,"".concat(M,"-single"),!eN),(0,l.Z)(S,"".concat(M,"-allow-clear"),ea),(0,l.Z)(S,"".concat(M,"-show-arrow"),th),(0,l.Z)(S,"".concat(M,"-disabled"),D),(0,l.Z)(S,"".concat(M,"-loading"),W),(0,l.Z)(S,"".concat(M,"-open"),e9),(0,l.Z)(S,"".concat(M,"-customize-input"),eY),(0,l.Z)(S,"".concat(M,"-show-search"),eI),S)),tE=r.createElement(et,{ref:eH,disabled:D,prefixCls:M,visible:te,popupElement:tx,animation:em,transitionName:eg,dropdownStyle:eh,dropdownClassName:ev,direction:I,dropdownMatchSelectWidth:eb,dropdownRender:ey,dropdownAlign:ex,placement:ew,builtinPlacements:eE,getPopupContainer:eC,empty:z,getTriggerDOMNode:function(){return eB.current},onPopupVisibleChange:O,onPopupMouseEnter:function(){tm({})}},eQ?r.cloneElement(eQ,{ref:eJ}):r.createElement(Y,(0,i.Z)({},e,{domRef:eB,prefixCls:M,inputElement:eY,ref:eD,id:R,showSearch:eI,autoClearSearchValue:ee,mode:H,activeDescendantId:Q,tagRender:N,values:A,open:e9,onToggleOpen:tt,activeValue:K,searchValue:e$,onSearch:ti,onSearchSubmit:function(e){e&&e.trim()&&en(e,{source:"submit"})},onRemove:function(e){F(A.filter(function(t){return t!==e}),{type:"remove",values:[e]})},tokenWithEnter:tn})));return k=eQ?tE:r.createElement("div",(0,i.Z)({className:tw},eT,{ref:e_,onMouseDown:function(e){var t,n=e.target,r=null===(t=eH.current)||void 0===t?void 0:t.getPopupElement();if(r&&r.contains(n)){var o=setTimeout(function(){var e,t=tf.indexOf(o);-1!==t&&tf.splice(t,1),eK(),ez||r.contains(document.activeElement)||null===(e=eD.current)||void 0===e||e.focus()});tf.push(o)}for(var a=arguments.length,i=Array(a>1?a-1:0),c=1;c=0;i-=1){var l=o[i];if(!l.disabled){o.splice(i,1),a=l;break}}a&&F(o,{type:"remove",values:[a]})}for(var s=arguments.length,u=Array(s>1?s-1:0),d=1;d1?n-1:0),o=1;o0?null:"hidden"},Y={position:"absolute",background:"rgba(0, 0, 0, 0.5)",borderRadius:99,cursor:"pointer",userSelect:"none"};return g?($.height=8,$.left=0,$.right=0,$.bottom=0,Y.height="100%",Y.width=h,I?Y.left=V:Y.right=V):($.width=8,$.top=0,$.bottom=0,I?$.right=0:$.left=0,Y.width="100%",Y.height=h,Y.top=V),r.createElement("div",{ref:T,className:a()(K,(n={},(0,l.Z)(n,"".concat(K,"-horizontal"),g),(0,l.Z)(n,"".concat(K,"-vertical"),!g),(0,l.Z)(n,"".concat(K,"-visible"),L),n)),style:(0,s.Z)((0,s.Z)({},$),b),onMouseDown:function(e){e.stopPropagation(),e.preventDefault()},onMouseMove:H},r.createElement("div",{ref:A,className:a()("".concat(K,"-thumb"),(0,l.Z)({},"".concat(K,"-thumb-moving"),E)),style:(0,s.Z)((0,s.Z)({},Y),y),onMouseDown:X}))});function ey(e){var t=e.children,n=e.setRef,o=r.useCallback(function(e){n(e)},[]);return r.cloneElement(t,{ref:o})}var ex=n(7472),ew=n(7365),eE=n(5127),eC=function(){function e(){(0,ew.Z)(this,e),this.maps=void 0,this.id=0,this.maps=Object.create(null)}return(0,eE.Z)(e,[{key:"set",value:function(e,t){this.maps[e]=t,this.id+=1}},{key:"get",value:function(e){return this.maps[e]}}]),e}(),eS=n(8563),eO=("undefined"==typeof navigator?"undefined":(0,f.Z)(navigator))==="object"&&/Firefox/i.test(navigator.userAgent);function eZ(e,t){var n=(0,r.useRef)(!1),o=(0,r.useRef)(null),a=(0,r.useRef)({top:e,bottom:t});return a.current.top=e,a.current.bottom=t,function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e<0&&a.current.top||e>0&&a.current.bottom;return t&&r?(clearTimeout(o.current),n.current=!1):(!r||n.current)&&(clearTimeout(o.current),n.current=!0,o.current=setTimeout(function(){n.current=!1},50)),!n.current&&r}}var ek=14/15;function eR(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=e/t*100;return isNaN(n)&&(n=0),Math.floor(n=Math.min(n=Math.max(n,20),e/2))}var eM=["prefixCls","className","height","itemHeight","fullHeight","style","data","children","itemKey","virtual","direction","scrollWidth","component","onScroll","onVirtualScroll","onVisibleChange","innerProps","extraRender","styles"],ej=[],eP={overflowY:"auto",overflowAnchor:"none"},eN=r.forwardRef(function(e,t){var n,o,c,p,m,h,v,b,y,x,w,E,C,O,Z,k,R,P,N,I,T,A,F,z,L,_,B,H,D,W,V,q,X,G,U,K=e.prefixCls,$=void 0===K?"rc-virtual-list":K,Y=e.className,Q=e.height,J=e.itemHeight,ee=e.fullHeight,et=e.style,en=e.data,er=e.children,eo=e.itemKey,ea=e.virtual,ei=e.direction,ec=e.scrollWidth,el=e.component,es=e.onScroll,eu=e.onVirtualScroll,ed=e.onVisibleChange,ef=e.innerProps,ep=e.extraRender,em=e.styles,eg=(0,d.Z)(e,eM),ev=!!(!1!==ea&&Q&&J),ew=ev&&en&&(J*en.length>Q||!!ec),eE="rtl"===ei,eN=a()($,(0,l.Z)({},"".concat($,"-rtl"),eE),Y),eI=en||ej,eT=(0,r.useRef)(),eA=(0,r.useRef)(),eF=(0,r.useState)(0),ez=(0,u.Z)(eF,2),eL=ez[0],e_=ez[1],eB=(0,r.useState)(0),eH=(0,u.Z)(eB,2),eD=eH[0],eW=eH[1],eV=(0,r.useState)(!1),eq=(0,u.Z)(eV,2),eX=eq[0],eG=eq[1],eU=function(){eG(!0)},eK=function(){eG(!1)},e$=r.useCallback(function(e){return"function"==typeof eo?eo(e):null==e?void 0:e[eo]},[eo]);function eY(e){e_(function(t){var n,r=(n="function"==typeof e?e(t):e,Number.isNaN(tf.current)||(n=Math.min(n,tf.current)),n=Math.max(n,0));return eT.current.scrollTop=r,r})}var eQ=(0,r.useRef)({start:0,end:eI.length}),eJ=(0,r.useRef)(),e0=(o=r.useState(eI),p=(c=(0,u.Z)(o,2))[0],m=c[1],h=r.useState(null),b=(v=(0,u.Z)(h,2))[0],y=v[1],r.useEffect(function(){var e=function(e,t,n){var r,o,a=e.length,i=t.length;if(0===a&&0===i)return null;a0&&void 0!==arguments[0]&&arguments[0];f();var t=function(){l.current.forEach(function(e,t){if(e&&e.offsetParent){var n=(0,ex.Z)(e),r=n.offsetHeight;s.current.get(t)!==r&&s.current.set(t,n.offsetHeight)}}),c(function(e){return e+1})};e?t():d.current=(0,j.Z)(t)}return(0,r.useEffect)(function(){return f},[]),[function(r,o){var a=e(r),i=l.current.get(a);o?(l.current.set(a,o),p()):l.current.delete(a),!i!=!o&&(o?null==t||t(r):null==n||n(r))},p,s.current,i]}(e$,null,null),e4=(0,u.Z)(e2,4),e5=e4[0],e3=e4[1],e6=e4[2],e8=e4[3],e9=r.useMemo(function(){if(!ev)return{scrollHeight:void 0,start:0,end:eI.length-1,offset:void 0};if(!ew)return{scrollHeight:(null===(e=eA.current)||void 0===e?void 0:e.offsetHeight)||0,start:0,end:eI.length-1,offset:void 0};for(var e,t,n,r,o=0,a=eI.length,i=0;i=eL&&void 0===t&&(t=i,n=o),s>eL+Q&&void 0===r&&(r=i),o=s}return void 0===t&&(t=0,n=0,r=Math.ceil(Q/J)),void 0===r&&(r=eI.length-1),{scrollHeight:o,start:t,end:r=Math.min(r+1,eI.length-1),offset:n}},[ew,ev,eL,eI,e8,Q]),e7=e9.scrollHeight,te=e9.start,tt=e9.end,tn=e9.offset;eQ.current.start=te,eQ.current.end=tt;var tr=r.useState({width:0,height:Q}),to=(0,u.Z)(tr,2),ta=to[0],ti=to[1],tc=(0,r.useRef)(),tl=(0,r.useRef)(),ts=r.useMemo(function(){return eR(ta.width,ec)},[ta.width,ec]),tu=r.useMemo(function(){return eR(ta.height,e7)},[ta.height,e7]),td=e7-Q,tf=(0,r.useRef)(td);tf.current=td;var tp=eL<=0,tm=eL>=td,tg=eZ(tp,tm),th=function(){return{x:eE?-eD:eD,y:eL}},tv=(0,r.useRef)(th()),tb=(0,eS.zX)(function(){if(eu){var e=th();(tv.current.x!==e.x||tv.current.y!==e.y)&&(eu(e),tv.current=e)}});function ty(e,t){t?((0,M.flushSync)(function(){eW(e)}),tb()):eY(e)}var tx=function(e){var t=e,n=ec-ta.width;return Math.min(t=Math.max(t,0),n)},tw=(0,eS.zX)(function(e,t){t?((0,M.flushSync)(function(){eW(function(t){return tx(t+(eE?-e:e))})}),tb()):eY(function(t){return t+e})}),tE=(x=!!ec,w=(0,r.useRef)(0),E=(0,r.useRef)(null),C=(0,r.useRef)(null),O=(0,r.useRef)(!1),Z=eZ(tp,tm),k=(0,r.useRef)(null),R=(0,r.useRef)(null),[function(e){if(ev){j.Z.cancel(R.current),R.current=(0,j.Z)(function(){k.current=null},2);var t,n=e.deltaX,r=e.deltaY,o=e.shiftKey,a=n,i=r;("sx"===k.current||!k.current&&o&&r&&!n)&&(a=r,i=0,k.current="sx");var c=Math.abs(a),l=Math.abs(i);(null===k.current&&(k.current=x&&c>l?"x":"y"),"y"===k.current)?(t=i,j.Z.cancel(E.current),w.current+=t,C.current=t,Z(t)||(eO||e.preventDefault(),E.current=(0,j.Z)(function(){var e=O.current?10:1;tw(w.current*e),w.current=0}))):(tw(a,!0),eO||e.preventDefault())}},function(e){ev&&(O.current=e.detail===C.current)}]),tC=(0,u.Z)(tE,2),tS=tC[0],tO=tC[1];P=function(e,t){return!tg(e,t)&&(tS({preventDefault:function(){},deltaY:e}),!0)},I=(0,r.useRef)(!1),T=(0,r.useRef)(0),A=(0,r.useRef)(null),F=(0,r.useRef)(null),z=function(e){if(I.current){var t=Math.ceil(e.touches[0].pageY),n=T.current-t;T.current=t,P(n)&&e.preventDefault(),clearInterval(F.current),F.current=setInterval(function(){(!P(n*=ek,!0)||.1>=Math.abs(n))&&clearInterval(F.current)},16)}},L=function(){I.current=!1,N()},_=function(e){N(),1!==e.touches.length||I.current||(I.current=!0,T.current=Math.ceil(e.touches[0].pageY),A.current=e.target,A.current.addEventListener("touchmove",z),A.current.addEventListener("touchend",L))},N=function(){A.current&&(A.current.removeEventListener("touchmove",z),A.current.removeEventListener("touchend",L))},(0,g.Z)(function(){return ev&&eT.current.addEventListener("touchstart",_),function(){var e;null===(e=eT.current)||void 0===e||e.removeEventListener("touchstart",_),N(),clearInterval(F.current)}},[ev]),(0,g.Z)(function(){function e(e){ev&&e.preventDefault()}var t=eT.current;return t.addEventListener("wheel",tS),t.addEventListener("DOMMouseScroll",tO),t.addEventListener("MozMousePixelScroll",e),function(){t.removeEventListener("wheel",tS),t.removeEventListener("DOMMouseScroll",tO),t.removeEventListener("MozMousePixelScroll",e)}},[ev]),(0,g.Z)(function(){ec&&eW(function(e){return tx(e)})},[ta.width,ec]);var tZ=function(){var e,t;null===(e=tc.current)||void 0===e||e.delayHidden(),null===(t=tl.current)||void 0===t||t.delayHidden()},tk=(B=r.useRef(),H=r.useState(null),W=(D=(0,u.Z)(H,2))[0],V=D[1],(0,g.Z)(function(){if(W&&W.times<10){if(!eT.current){V(function(e){return(0,s.Z)({},e)});return}e3(!0);var e=W.targetAlign,t=W.originAlign,n=W.index,r=W.offset,o=eT.current.clientHeight,a=!1,i=e,c=null;if(o){for(var l=e||t,u=0,d=0,f=0,p=Math.min(eI.length-1,n),m=0;m<=p;m+=1){var g=e$(eI[m]);d=u;var h=e6.get(g);u=f=d+(void 0===h?J:h)}for(var v="top"===l?r:o-r,b=p;b>=0;b-=1){var y=e$(eI[b]),x=e6.get(y);if(void 0===x){a=!0;break}if((v-=x)<=0)break}switch(l){case"top":c=d-r;break;case"bottom":c=f-o+r;break;default:var w=eT.current.scrollTop;dw+o&&(i="bottom")}null!==c&&eY(c),c!==W.lastTop&&(a=!0)}a&&V((0,s.Z)((0,s.Z)({},W),{},{times:W.times+1,targetAlign:i,lastTop:c}))}},[W,eT.current]),function(e){if(null==e){tZ();return}if(j.Z.cancel(B.current),"number"==typeof e)eY(e);else if(e&&"object"===(0,f.Z)(e)){var t,n=e.align;t="index"in e?e.index:eI.findIndex(function(t){return e$(t)===e.key});var r=e.offset;V({times:0,index:t,offset:void 0===r?0:r,originAlign:n})}});r.useImperativeHandle(t,function(){return{getScrollInfo:th,scrollTo:function(e){e&&"object"===(0,f.Z)(e)&&("left"in e||"top"in e)?(void 0!==e.left&&eW(tx(e.left)),tk(e.top)):tk(e)}}}),(0,g.Z)(function(){ed&&ed(eI.slice(te,tt+1),eI)},[te,tt,eI]);var tR=(q=r.useMemo(function(){return[new Map,[]]},[eI,e6.id,J]),G=(X=(0,u.Z)(q,2))[0],U=X[1],function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=G.get(e),r=G.get(t);if(void 0===n||void 0===r)for(var o=eI.length,a=U.length;aQ&&r.createElement(eb,{ref:tc,prefixCls:$,scrollOffset:eL,scrollRange:e7,rtl:eE,onScroll:ty,onStartMove:eU,onStopMove:eK,spinSize:tu,containerSize:ta.height,style:null==em?void 0:em.verticalScrollBar,thumbStyle:null==em?void 0:em.verticalScrollBarThumb}),ew&&ec&&r.createElement(eb,{ref:tl,prefixCls:$,scrollOffset:eD,scrollRange:ec,rtl:eE,onScroll:ty,onStartMove:eU,onStopMove:eK,spinSize:ts,containerSize:ta.width,horizontal:!0,style:null==em?void 0:em.horizontalScrollBar,thumbStyle:null==em?void 0:em.horizontalScrollBarThumb}))});eN.displayName="List";var eI=["disabled","title","children","style","className"];function eT(e){return"string"==typeof e||"number"==typeof e}var eA=r.forwardRef(function(e,t){var n=r.useContext(w),o=n.prefixCls,s=n.id,f=n.open,p=n.multiple,m=n.mode,g=n.searchValue,h=n.toggleOpen,b=n.notFoundContent,x=n.onPopupScroll,E=r.useContext(ec),S=E.maxCount,O=E.flattenOptions,Z=E.onActiveValue,k=E.defaultActiveFirstOption,R=E.onSelect,M=E.menuItemSelectedIcon,j=E.rawValues,P=E.fieldNames,N=E.virtual,I=E.direction,T=E.listHeight,A=E.listItemHeight,F=E.optionRender,z="".concat(o,"-item"),L=(0,em.Z)(function(){return O},[f,O],function(e,t){return t[0]&&e[1]!==t[1]}),_=r.useRef(null),B=r.useMemo(function(){return p&&void 0!==S&&(null==j?void 0:j.size)>=S},[p,S,null==j?void 0:j.size]),H=function(e){e.preventDefault()},D=function(e){var t;null===(t=_.current)||void 0===t||t.scrollTo("number"==typeof e?{index:e}:e)},W=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=L.length,r=0;r1&&void 0!==arguments[1]&&arguments[1];G(e);var n={source:t?"keyboard":"mouse"},r=L[e];if(!r){Z(null,-1,n);return}Z(r.value,e,n)};(0,r.useEffect)(function(){U(!1!==k?W(0):-1)},[L.length,g]);var K=r.useCallback(function(e){return j.has(e)&&"combobox"!==m},[m,(0,c.Z)(j).toString(),j.size]);(0,r.useEffect)(function(){var e,t=setTimeout(function(){if(!p&&f&&1===j.size){var e=Array.from(j)[0],t=L.findIndex(function(t){return t.data.value===e});-1!==t&&(U(t),D(t))}});return f&&(null===(e=_.current)||void 0===e||e.scrollTo(void 0)),function(){return clearTimeout(t)}},[f,g]);var $=function(e){void 0!==e&&R(e,{selected:!j.has(e)}),p||h(!1)};if(r.useImperativeHandle(t,function(){return{onKeyDown:function(e){var t=e.which,n=e.ctrlKey;switch(t){case v.Z.N:case v.Z.P:case v.Z.UP:case v.Z.DOWN:var r=0;if(t===v.Z.UP?r=-1:t===v.Z.DOWN?r=1:/(mac\sos|macintosh)/i.test(navigator.appVersion)&&n&&(t===v.Z.N?r=1:t===v.Z.P&&(r=-1)),0!==r){var o=W(X+r,r);D(o),U(o,!0)}break;case v.Z.ENTER:var a,i=L[X];!i||null!=i&&null!==(a=i.data)&&void 0!==a&&a.disabled||B?$(void 0):$(i.value),f&&e.preventDefault();break;case v.Z.ESC:h(!1),f&&e.stopPropagation()}},onKeyUp:function(){},scrollTo:function(e){D(e)}}}),0===L.length)return r.createElement("div",{role:"listbox",id:"".concat(s,"_list"),className:"".concat(z,"-empty"),onMouseDown:H},b);var Y=Object.keys(P).map(function(e){return P[e]}),Q=function(e){return e.label};function J(e,t){return{role:e.group?"presentation":"option",id:"".concat(s,"_list_").concat(t)}}var ee=function(e){var t=L[e];if(!t)return null;var n=t.data||{},o=n.value,a=t.group,c=(0,C.Z)(n,!0),l=Q(t);return t?r.createElement("div",(0,i.Z)({"aria-label":"string"!=typeof l||a?null:l},c,{key:e},J(t,e),{"aria-selected":K(o)}),o):null},et={role:"listbox",id:"".concat(s,"_list")};return r.createElement(r.Fragment,null,N&&r.createElement("div",(0,i.Z)({},et,{style:{height:0,width:0,overflow:"hidden"}}),ee(X-1),ee(X),ee(X+1)),r.createElement(eN,{itemKey:"key",ref:_,data:L,height:T,itemHeight:A,fullHeight:!1,onMouseDown:H,onScroll:x,virtual:N,direction:I,innerProps:N?null:et},function(e,t){var n=e.group,o=e.groupOption,c=e.data,s=e.label,u=e.value,f=c.key;if(n){var p,m,g=null!==(m=c.title)&&void 0!==m?m:eT(s)?s.toString():void 0;return r.createElement("div",{className:a()(z,"".concat(z,"-group")),title:g},void 0!==s?s:f)}var h=c.disabled,v=c.title,b=(c.children,c.style),x=c.className,w=(0,d.Z)(c,eI),E=(0,eg.Z)(w,Y),S=K(u),O=h||!S&&B,Z="".concat(z,"-option"),k=a()(z,Z,x,(p={},(0,l.Z)(p,"".concat(Z,"-grouped"),o),(0,l.Z)(p,"".concat(Z,"-active"),X===t&&!O),(0,l.Z)(p,"".concat(Z,"-disabled"),O),(0,l.Z)(p,"".concat(Z,"-selected"),S),p)),R=Q(e),j=!M||"function"==typeof M||S,P="number"==typeof R?R:R||u,I=eT(P)?P.toString():void 0;return void 0!==v&&(I=v),r.createElement("div",(0,i.Z)({},(0,C.Z)(E),N?{}:J(e,t),{"aria-selected":S,className:k,title:I,onMouseMove:function(){X===t||O||U(t)},onClick:function(){O||$(u)},style:b}),r.createElement("div",{className:"".concat(Z,"-content")},"function"==typeof F?F(e,{index:t}):P),r.isValidElement(M)||S,j&&r.createElement(y,{className:"".concat(z,"-option-state"),customizeIcon:M,customizeIconProps:{value:u,disabled:O,isSelected:S}},S?"✓":null))}))});function eF(e,t){return W(e).join("").toUpperCase().includes(t)}var ez=n(2127),eL=0,e_=(0,ez.Z)(),eB=n(3054),eH=["children","value"],eD=["children"];function eW(e){var t=r.useRef();return t.current=e,r.useCallback(function(){return t.current.apply(t,arguments)},[])}var eV=["id","mode","prefixCls","backfill","fieldNames","inputValue","searchValue","onSearch","autoClearSearchValue","onSelect","onDeselect","dropdownMatchSelectWidth","filterOption","filterSort","optionFilterProp","optionLabelProp","options","optionRender","children","defaultActiveFirstOption","menuItemSelectedIcon","virtual","direction","listHeight","listItemHeight","value","defaultValue","labelInValue","onChange","maxCount"],eq=["inputValue"],eX=r.forwardRef(function(e,t){var n,o,a,m,g,h,v,b=e.id,y=e.mode,x=e.prefixCls,w=e.backfill,E=e.fieldNames,C=e.inputValue,S=e.searchValue,O=e.onSearch,Z=e.autoClearSearchValue,k=void 0===Z||Z,R=e.onSelect,M=e.onDeselect,j=e.dropdownMatchSelectWidth,P=void 0===j||j,N=e.filterOption,I=e.filterSort,T=e.optionFilterProp,A=e.optionLabelProp,F=e.options,z=e.optionRender,L=e.children,_=e.defaultActiveFirstOption,B=e.menuItemSelectedIcon,H=e.virtual,D=e.direction,V=e.listHeight,q=void 0===V?200:V,X=e.listItemHeight,G=void 0===X?20:X,U=e.value,K=e.defaultValue,$=e.labelInValue,Y=e.onChange,Q=e.maxCount,J=(0,d.Z)(e,eV),ee=(n=r.useState(),a=(o=(0,u.Z)(n,2))[0],m=o[1],r.useEffect(function(){var e;m("rc_select_".concat((e_?(e=eL,eL+=1):e="TEST_OR_SSR",e)))},[]),b||a),et=eu(y),en=!!(!F&&L),ei=r.useMemo(function(){return(void 0!==N||"combobox"!==y)&&N},[N,y]),el=r.useMemo(function(){return eo(E,en)},[JSON.stringify(E),en]),es=(0,p.Z)("",{value:void 0!==S?S:C,postState:function(e){return e||""}}),ef=(0,u.Z)(es,2),ep=ef[0],em=ef[1],eg=r.useMemo(function(){var e=F;F||(e=function e(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,eB.Z)(t).map(function(t,o){if(!r.isValidElement(t)||!t.type)return null;var a,i,c,l,u,f=t.type.isSelectOptGroup,p=t.key,m=t.props,g=m.children,h=(0,d.Z)(m,eD);return n||!f?(a=t.key,c=(i=t.props).children,l=i.value,u=(0,d.Z)(i,eH),(0,s.Z)({key:a,value:void 0!==l?l:a,children:c},u)):(0,s.Z)((0,s.Z)({key:"__RC_SELECT_GRP__".concat(null===p?o:p,"__"),label:p},h),{},{options:e(g)})}).filter(function(e){return e})}(L));var t=new Map,n=new Map,o=function(e,t,n){n&&"string"==typeof n&&e.set(t[n],t)};return function e(r){for(var a=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=0;i1&&void 0!==arguments[1]?arguments[1]:{},n=t.fieldNames,r=t.childrenAsData,o=[],a=eo(n,!1),i=a.label,c=a.value,l=a.options,s=a.groupLabel;return!function e(t,n){Array.isArray(t)&&t.forEach(function(t){if(!n&&l in t){var a=t[s];void 0===a&&r&&(a=t.label),o.push({key:er(t,o.length),group:!0,data:t,label:a}),e(t[l],!0)}else{var u=t[c];o.push({key:er(t,o.length),groupOption:n,data:t,label:t[i],value:u})}})}(e,!1),o}(eI,{fieldNames:el,childrenAsData:en})},[eI,el,en]),ez=function(e){var t=ey(e);if(eC(t),Y&&(t.length!==eZ.length||t.some(function(e,t){var n;return(null===(n=eZ[t])||void 0===n?void 0:n.value)!==(null==e?void 0:e.value)}))){var n=$?t:t.map(function(e){return e.value}),r=t.map(function(e){return ea(ek(e.value))});Y(et?n:n[0],et?r:r[0])}},eX=r.useState(null),eG=(0,u.Z)(eX,2),eU=eG[0],eK=eG[1],e$=r.useState(0),eY=(0,u.Z)(e$,2),eQ=eY[0],eJ=eY[1],e0=void 0!==_?_:"combobox"!==y,e1=r.useCallback(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.source;eJ(t),w&&"combobox"===y&&null!==e&&"keyboard"===(void 0===r?"keyboard":r)&&eK(String(e))},[w,y]),e2=function(e,t,n){var r=function(){var t,n=ek(e);return[$?{label:null==n?void 0:n[el.label],value:e,key:null!==(t=null==n?void 0:n.key)&&void 0!==t?t:e}:e,ea(n)]};if(t&&R){var o=r(),a=(0,u.Z)(o,2);R(a[0],a[1])}else if(!t&&M&&"clear"!==n){var i=r(),c=(0,u.Z)(i,2);M(c[0],c[1])}},e4=eW(function(e,t){var n=!et||t.selected;ez(n?et?[].concat((0,c.Z)(eZ),[e]):[e]:eZ.filter(function(t){return t.value!==e})),e2(e,n),"combobox"===y?eK(""):(!eu||k)&&(em(""),eK(""))}),e5=r.useMemo(function(){var e=!1!==H&&!1!==P;return(0,s.Z)((0,s.Z)({},eg),{},{flattenOptions:eT,onActiveValue:e1,defaultActiveFirstOption:e0,onSelect:e4,menuItemSelectedIcon:B,rawValues:eM,fieldNames:el,virtual:e,direction:D,listHeight:q,listItemHeight:G,childrenAsData:en,maxCount:Q,optionRender:z})},[Q,eg,eT,e1,e0,e4,B,eM,el,H,P,D,q,G,en,z]);return r.createElement(ec.Provider,{value:e5},r.createElement(ed,(0,i.Z)({},J,{id:ee,prefixCls:void 0===x?"rc-select":x,ref:t,omitDomProps:eq,mode:y,displayValues:eR,onDisplayValuesChange:function(e,t){ez(e);var n=t.type,r=t.values;("remove"===n||"clear"===n)&&r.forEach(function(e){e2(e.value,!1,n)})},direction:D,searchValue:ep,onSearch:function(e,t){if(em(e),eK(null),"submit"===t.source){var n=(e||"").trim();n&&(ez(Array.from(new Set([].concat((0,c.Z)(eM),[n])))),e2(n,!0),em(""));return}"blur"!==t.source&&("combobox"===y&&ez(e),null==O||O(e))},autoClearSearchValue:k,onSearchSplit:function(e){var t=e;"tags"!==y&&(t=e.map(function(e){var t=ev.get(e);return null==t?void 0:t.value}).filter(function(e){return void 0!==e}));var n=Array.from(new Set([].concat((0,c.Z)(eM),(0,c.Z)(t))));ez(n),n.forEach(function(e){e2(e,!0)})},dropdownMatchSelectWidth:P,OptionList:eA,emptyOptions:!eT.length,activeValue:eU,activeDescendantId:"".concat(ee,"_list_").concat(eQ)})))});eX.Option=ep,eX.OptGroup=ef;var eG=n(1761),eU=n(7387),eK=n(1467),e$=n(7794),eY=n(7499),eQ=n(595),eJ=n(6336),e0=n(4750),e1=n(6585),e2=n(316);let e4=e=>{let{componentCls:t,margin:n,marginXS:r,marginXL:o,fontSize:a,lineHeight:i}=e;return{[t]:{marginInline:r,fontSize:a,lineHeight:i,textAlign:"center",["".concat(t,"-image")]:{height:e.emptyImgHeight,marginBottom:r,opacity:e.opacityImage,img:{height:"100%"},svg:{maxWidth:"100%",height:"100%",margin:"auto"}},["".concat(t,"-description")]:{color:e.colorText},["".concat(t,"-footer")]:{marginTop:n},"&-normal":{marginBlock:o,color:e.colorTextDisabled,["".concat(t,"-description")]:{color:e.colorTextDisabled},["".concat(t,"-image")]:{height:e.emptyImgHeightMD}},"&-small":{marginBlock:r,color:e.colorTextDisabled,["".concat(t,"-image")]:{height:e.emptyImgHeightSM}}}}};var e5=(0,e1.I$)("Empty",e=>{let{componentCls:t,controlHeightLG:n,calc:r}=e;return[e4((0,e2.TS)(e,{emptyImgCls:"".concat(t,"-img"),emptyImgHeight:r(n).mul(2.5).equal(),emptyImgHeightMD:n,emptyImgHeightSM:r(n).mul(.875).equal()}))]}),e3=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let e6=r.createElement(()=>{let[,e]=(0,e0.ZP)(),t=new eJ.C(e.colorBgBase).toHsl().l<.5?{opacity:.65}:{};return r.createElement("svg",{style:t,width:"184",height:"152",viewBox:"0 0 184 152",xmlns:"http://www.w3.org/2000/svg"},r.createElement("g",{fill:"none",fillRule:"evenodd"},r.createElement("g",{transform:"translate(24 31.67)"},r.createElement("ellipse",{fillOpacity:".8",fill:"#F5F5F7",cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"}),r.createElement("path",{d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z",fill:"#AEB8C2"}),r.createElement("path",{d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",fill:"url(#linearGradient-1)",transform:"translate(13.56)"}),r.createElement("path",{d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z",fill:"#F5F5F7"}),r.createElement("path",{d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z",fill:"#DCE0E6"})),r.createElement("path",{d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z",fill:"#DCE0E6"}),r.createElement("g",{transform:"translate(149.65 15.383)",fill:"#FFF"},r.createElement("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"}),r.createElement("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"}))))},null),e8=r.createElement(()=>{let[,e]=(0,e0.ZP)(),{colorFill:t,colorFillTertiary:n,colorFillQuaternary:o,colorBgContainer:a}=e,{borderColor:i,shadowColor:c,contentColor:l}=(0,r.useMemo)(()=>({borderColor:new eJ.C(t).onBackground(a).toHexShortString(),shadowColor:new eJ.C(n).onBackground(a).toHexShortString(),contentColor:new eJ.C(o).onBackground(a).toHexShortString()}),[t,n,o,a]);return r.createElement("svg",{width:"64",height:"41",viewBox:"0 0 64 41",xmlns:"http://www.w3.org/2000/svg"},r.createElement("g",{transform:"translate(0 1)",fill:"none",fillRule:"evenodd"},r.createElement("ellipse",{fill:c,cx:"32",cy:"33",rx:"32",ry:"7"}),r.createElement("g",{fillRule:"nonzero",stroke:i},r.createElement("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"}),r.createElement("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:l}))))},null),e9=e=>{var{className:t,rootClassName:n,prefixCls:o,image:i=e6,description:c,children:l,imageStyle:s,style:u}=e,d=e3(e,["className","rootClassName","prefixCls","image","description","children","imageStyle","style"]);let{getPrefixCls:f,direction:p,empty:m}=r.useContext(eY.E_),g=f("empty",o),[h,v,b]=e5(g),[y]=(0,eQ.Z)("Empty"),x=void 0!==c?c:null==y?void 0:y.description,w=null;return w="string"==typeof i?r.createElement("img",{alt:"string"==typeof x?x:"empty",src:i}):i,h(r.createElement("div",Object.assign({className:a()(v,b,g,null==m?void 0:m.className,{["".concat(g,"-normal")]:i===e8,["".concat(g,"-rtl")]:"rtl"===p},t,n),style:Object.assign(Object.assign({},null==m?void 0:m.style),u)},d),r.createElement("div",{className:"".concat(g,"-image"),style:s},w),x&&r.createElement("div",{className:"".concat(g,"-description")},x),l&&r.createElement("div",{className:"".concat(g,"-footer")},l)))};e9.PRESENTED_IMAGE_DEFAULT=e6,e9.PRESENTED_IMAGE_SIMPLE=e8;var e7=e=>{let{componentName:t}=e,{getPrefixCls:n}=(0,r.useContext)(eY.E_),o=n("empty");switch(t){case"Table":case"List":return r.createElement(e9,{image:e9.PRESENTED_IMAGE_SIMPLE});case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return r.createElement(e9,{image:e9.PRESENTED_IMAGE_SIMPLE,className:"".concat(o,"-small")});default:return r.createElement(e9,null)}},te=n(7094),tt=n(2935),tn=n(4629),tr=n(7137),to=n(8443),ta=n(2801);let ti=e=>{let t={overflow:{adjustX:!0,adjustY:!0,shiftY:!0},htmlRegion:"scroll"===e?"scroll":"visible",dynamicInset:!0};return{bottomLeft:Object.assign(Object.assign({},t),{points:["tl","bl"],offset:[0,4]}),bottomRight:Object.assign(Object.assign({},t),{points:["tr","br"],offset:[0,4]}),topLeft:Object.assign(Object.assign({},t),{points:["bl","tl"],offset:[0,-4]}),topRight:Object.assign(Object.assign({},t),{points:["br","tr"],offset:[0,-4]})}};var tc=n(1303),tl=n(2288),ts=n(8985),tu=n(9353);let td=new ts.E4("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),tf=new ts.E4("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),tp=new ts.E4("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),tm=new ts.E4("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),tg=new ts.E4("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),th={"slide-up":{inKeyframes:td,outKeyframes:tf},"slide-down":{inKeyframes:tp,outKeyframes:tm},"slide-left":{inKeyframes:tg,outKeyframes:new ts.E4("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}})},"slide-right":{inKeyframes:new ts.E4("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),outKeyframes:new ts.E4("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}})}},tv=(e,t)=>{let{antCls:n}=e,r="".concat(n,"-").concat(t),{inKeyframes:o,outKeyframes:a}=th[t];return[(0,tu.R)(r,o,a,e.motionDurationMid),{["\n ".concat(r,"-enter,\n ").concat(r,"-appear\n ")]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:e.motionEaseOutQuint,"&-prepare":{transform:"scale(1)"}},["".concat(r,"-leave")]:{animationTimingFunction:e.motionEaseInQuint}}]},tb=new ts.E4("antMoveDownIn",{"0%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),ty=new ts.E4("antMoveDownOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, 100%, 0)",transformOrigin:"0 0",opacity:0}}),tx=new ts.E4("antMoveLeftIn",{"0%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),tw=new ts.E4("antMoveLeftOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(-100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),tE=new ts.E4("antMoveRightIn",{"0%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),tC=new ts.E4("antMoveRightOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(100%, 0, 0)",transformOrigin:"0 0",opacity:0}}),tS={"move-up":{inKeyframes:new ts.E4("antMoveUpIn",{"0%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0},"100%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1}}),outKeyframes:new ts.E4("antMoveUpOut",{"0%":{transform:"translate3d(0, 0, 0)",transformOrigin:"0 0",opacity:1},"100%":{transform:"translate3d(0, -100%, 0)",transformOrigin:"0 0",opacity:0}})},"move-down":{inKeyframes:tb,outKeyframes:ty},"move-left":{inKeyframes:tx,outKeyframes:tw},"move-right":{inKeyframes:tE,outKeyframes:tC}},tO=(e,t)=>{let{antCls:n}=e,r="".concat(n,"-").concat(t),{inKeyframes:o,outKeyframes:a}=tS[t];return[(0,tu.R)(r,o,a,e.motionDurationMid),{["\n ".concat(r,"-enter,\n ").concat(r,"-appear\n ")]:{opacity:0,animationTimingFunction:e.motionEaseOutCirc},["".concat(r,"-leave")]:{animationTimingFunction:e.motionEaseInOutCirc}}]},tZ=e=>{let{optionHeight:t,optionFontSize:n,optionLineHeight:r,optionPadding:o}=e;return{position:"relative",display:"block",minHeight:t,padding:o,color:e.colorText,fontWeight:"normal",fontSize:n,lineHeight:r,boxSizing:"border-box"}};var tk=e=>{let{antCls:t,componentCls:n}=e,r="".concat(n,"-item"),o="&".concat(t,"-slide-up-enter").concat(t,"-slide-up-enter-active"),a="&".concat(t,"-slide-up-appear").concat(t,"-slide-up-appear-active"),i="&".concat(t,"-slide-up-leave").concat(t,"-slide-up-leave-active"),c="".concat(n,"-dropdown-placement-");return[{["".concat(n,"-dropdown")]:Object.assign(Object.assign({},(0,tc.Wf)(e)),{position:"absolute",top:-9999,zIndex:e.zIndexPopup,boxSizing:"border-box",padding:e.paddingXXS,overflow:"hidden",fontSize:e.fontSize,fontVariant:"initial",backgroundColor:e.colorBgElevated,borderRadius:e.borderRadiusLG,outline:"none",boxShadow:e.boxShadowSecondary,["\n ".concat(o).concat(c,"bottomLeft,\n ").concat(a).concat(c,"bottomLeft\n ")]:{animationName:td},["\n ".concat(o).concat(c,"topLeft,\n ").concat(a).concat(c,"topLeft,\n ").concat(o).concat(c,"topRight,\n ").concat(a).concat(c,"topRight\n ")]:{animationName:tp},["".concat(i).concat(c,"bottomLeft")]:{animationName:tf},["\n ".concat(i).concat(c,"topLeft,\n ").concat(i).concat(c,"topRight\n ")]:{animationName:tm},"&-hidden":{display:"none"},["".concat(r)]:Object.assign(Object.assign({},tZ(e)),{cursor:"pointer",transition:"background ".concat(e.motionDurationSlow," ease"),borderRadius:e.borderRadiusSM,"&-group":{color:e.colorTextDescription,fontSize:e.fontSizeSM,cursor:"default"},"&-option":{display:"flex","&-content":Object.assign({flex:"auto"},tc.vS),"&-state":{flex:"none",display:"flex",alignItems:"center"},["&-active:not(".concat(r,"-option-disabled)")]:{backgroundColor:e.optionActiveBg},["&-selected:not(".concat(r,"-option-disabled)")]:{color:e.optionSelectedColor,fontWeight:e.optionSelectedFontWeight,backgroundColor:e.optionSelectedBg,["".concat(r,"-option-state")]:{color:e.colorPrimary},["&:has(+ ".concat(r,"-option-selected:not(").concat(r,"-option-disabled))")]:{borderEndStartRadius:0,borderEndEndRadius:0,["& + ".concat(r,"-option-selected:not(").concat(r,"-option-disabled)")]:{borderStartStartRadius:0,borderStartEndRadius:0}}},"&-disabled":{["&".concat(r,"-option-selected")]:{backgroundColor:e.colorBgContainerDisabled},color:e.colorTextDisabled,cursor:"not-allowed"},"&-grouped":{paddingInlineStart:e.calc(e.controlPaddingHorizontal).mul(2).equal()}}}),"&-rtl":{direction:"rtl"}})},tv(e,"slide-up"),tv(e,"slide-down"),tO(e,"move-up"),tO(e,"move-down")]};let tR=e=>{let{multipleSelectItemHeight:t,selectHeight:n,lineWidth:r}=e;return e.calc(n).sub(t).div(2).sub(r).equal()};function tM(e,t){let{componentCls:n,iconCls:r}=e,o="".concat(n,"-selection-overflow"),a=e.multipleSelectItemHeight,i=tR(e),c=t?"".concat(n,"-").concat(t):"";return{["".concat(n,"-multiple").concat(c)]:{fontSize:e.fontSize,[o]:{position:"relative",display:"flex",flex:"auto",flexWrap:"wrap",maxWidth:"100%","&-item":{flex:"none",alignSelf:"center",maxWidth:"100%",display:"inline-flex"}},["".concat(n,"-selector")]:{display:"flex",flexWrap:"wrap",alignItems:"center",height:"100%",paddingInline:e.calc(2).mul(2).equal(),paddingBlock:e.calc(i).sub(2).equal(),borderRadius:e.borderRadius,["".concat(n,"-show-search&")]:{cursor:"text"},["".concat(n,"-disabled&")]:{background:e.multipleSelectorBgDisabled,cursor:"not-allowed"},"&:after":{display:"inline-block",width:0,margin:"".concat((0,ts.bf)(2)," 0"),lineHeight:(0,ts.bf)(a),visibility:"hidden",content:'"\\a0"'}},["\n &".concat(n,"-show-arrow ").concat(n,"-selector,\n &").concat(n,"-allow-clear ").concat(n,"-selector\n ")]:{paddingInlineEnd:e.calc(e.fontSizeIcon).add(e.controlPaddingHorizontal).equal()},["".concat(n,"-selection-item")]:{display:"flex",alignSelf:"center",flex:"none",boxSizing:"border-box",maxWidth:"100%",height:a,marginTop:2,marginBottom:2,lineHeight:(0,ts.bf)(e.calc(a).sub(e.calc(e.lineWidth).mul(2)).equal()),borderRadius:e.borderRadiusSM,cursor:"default",transition:"font-size ".concat(e.motionDurationSlow,", line-height ").concat(e.motionDurationSlow,", height ").concat(e.motionDurationSlow),marginInlineEnd:e.calc(2).mul(2).equal(),paddingInlineStart:e.paddingXS,paddingInlineEnd:e.calc(e.paddingXS).div(2).equal(),["".concat(n,"-disabled&")]:{color:e.multipleItemColorDisabled,borderColor:e.multipleItemBorderColorDisabled,cursor:"not-allowed"},"&-content":{display:"inline-block",marginInlineEnd:e.calc(e.paddingXS).div(2).equal(),overflow:"hidden",whiteSpace:"pre",textOverflow:"ellipsis"},"&-remove":Object.assign(Object.assign({},(0,tc.Ro)()),{display:"inline-flex",alignItems:"center",color:e.colorIcon,fontWeight:"bold",fontSize:10,lineHeight:"inherit",cursor:"pointer",["> ".concat(r)]:{verticalAlign:"-0.2em"},"&:hover":{color:e.colorIconHover}})},["".concat(o,"-item + ").concat(o,"-item")]:{["".concat(n,"-selection-search")]:{marginInlineStart:0}},["".concat(o,"-item-suffix")]:{height:"100%"},["".concat(n,"-selection-search")]:{display:"inline-flex",position:"relative",maxWidth:"100%",marginInlineStart:e.calc(e.inputPaddingHorizontalBase).sub(i).equal(),"\n &-input,\n &-mirror\n ":{height:a,fontFamily:e.fontFamily,lineHeight:(0,ts.bf)(a),transition:"all ".concat(e.motionDurationSlow)},"&-input":{width:"100%",minWidth:4.1},"&-mirror":{position:"absolute",top:0,insetInlineStart:0,insetInlineEnd:"auto",zIndex:999,whiteSpace:"pre",visibility:"hidden"}},["".concat(n,"-selection-placeholder")]:{position:"absolute",top:"50%",insetInlineStart:e.inputPaddingHorizontalBase,insetInlineEnd:e.inputPaddingHorizontalBase,transform:"translateY(-50%)",transition:"all ".concat(e.motionDurationSlow)}}}}var tj=e=>{let{componentCls:t}=e,n=(0,e2.TS)(e,{selectHeight:e.controlHeightSM,multipleSelectItemHeight:e.controlHeightXS,borderRadius:e.borderRadiusSM,borderRadiusSM:e.borderRadiusXS}),r=(0,e2.TS)(e,{fontSize:e.fontSizeLG,selectHeight:e.controlHeightLG,multipleSelectItemHeight:e.multipleItemHeightLG,borderRadius:e.borderRadiusLG,borderRadiusSM:e.borderRadius});return[tM(e),tM(n,"sm"),{["".concat(t,"-multiple").concat(t,"-sm")]:{["".concat(t,"-selection-placeholder")]:{insetInline:e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal()},["".concat(t,"-selection-search")]:{marginInlineStart:2}}},tM(r,"lg")]};function tP(e,t){let{componentCls:n,inputPaddingHorizontalBase:r,borderRadius:o}=e,a=e.calc(e.controlHeight).sub(e.calc(e.lineWidth).mul(2)).equal(),i=t?"".concat(n,"-").concat(t):"";return{["".concat(n,"-single").concat(i)]:{fontSize:e.fontSize,height:e.controlHeight,["".concat(n,"-selector")]:Object.assign(Object.assign({},(0,tc.Wf)(e,!0)),{display:"flex",borderRadius:o,["".concat(n,"-selection-search")]:{position:"absolute",top:0,insetInlineStart:r,insetInlineEnd:r,bottom:0,"&-input":{width:"100%",WebkitAppearance:"textfield"}},["\n ".concat(n,"-selection-item,\n ").concat(n,"-selection-placeholder\n ")]:{padding:0,lineHeight:(0,ts.bf)(a),transition:"all ".concat(e.motionDurationSlow,", visibility 0s"),alignSelf:"center"},["".concat(n,"-selection-placeholder")]:{transition:"none",pointerEvents:"none"},[["&:after","".concat(n,"-selection-item:empty:after"),"".concat(n,"-selection-placeholder:empty:after")].join(",")]:{display:"inline-block",width:0,visibility:"hidden",content:'"\\a0"'}}),["\n &".concat(n,"-show-arrow ").concat(n,"-selection-item,\n &").concat(n,"-show-arrow ").concat(n,"-selection-placeholder\n ")]:{paddingInlineEnd:e.showArrowPaddingInlineEnd},["&".concat(n,"-open ").concat(n,"-selection-item")]:{color:e.colorTextPlaceholder},["&:not(".concat(n,"-customize-input)")]:{["".concat(n,"-selector")]:{width:"100%",height:"100%",padding:"0 ".concat((0,ts.bf)(r)),["".concat(n,"-selection-search-input")]:{height:a},"&:after":{lineHeight:(0,ts.bf)(a)}}},["&".concat(n,"-customize-input")]:{["".concat(n,"-selector")]:{"&:after":{display:"none"},["".concat(n,"-selection-search")]:{position:"static",width:"100%"},["".concat(n,"-selection-placeholder")]:{position:"absolute",insetInlineStart:0,insetInlineEnd:0,padding:"0 ".concat((0,ts.bf)(r)),"&:after":{display:"none"}}}}}}}let tN=(e,t)=>{let{componentCls:n,antCls:r,controlOutlineWidth:o}=e;return{["&:not(".concat(n,"-customize-input) ").concat(n,"-selector")]:{border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(t.borderColor),background:e.selectorBg},["&:not(".concat(n,"-disabled):not(").concat(n,"-customize-input):not(").concat(r,"-pagination-size-changer)")]:{["&:hover ".concat(n,"-selector")]:{borderColor:t.hoverBorderHover},["".concat(n,"-focused& ").concat(n,"-selector")]:{borderColor:t.activeBorderColor,boxShadow:"0 0 0 ".concat((0,ts.bf)(o)," ").concat(t.activeShadowColor),outline:0}}}},tI=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status)]:Object.assign({},tN(e,t))}),tT=e=>({"&-outlined":Object.assign(Object.assign(Object.assign(Object.assign({},tN(e,{borderColor:e.colorBorder,hoverBorderHover:e.colorPrimaryHover,activeBorderColor:e.colorPrimary,activeShadowColor:e.controlOutline})),tI(e,{status:"error",borderColor:e.colorError,hoverBorderHover:e.colorErrorHover,activeBorderColor:e.colorError,activeShadowColor:e.colorErrorOutline})),tI(e,{status:"warning",borderColor:e.colorWarning,hoverBorderHover:e.colorWarningHover,activeBorderColor:e.colorWarning,activeShadowColor:e.colorWarningOutline})),{["&".concat(e.componentCls,"-disabled")]:{["&:not(".concat(e.componentCls,"-customize-input) ").concat(e.componentCls,"-selector")]:{background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},["&".concat(e.componentCls,"-multiple ").concat(e.componentCls,"-selection-item")]:{background:e.multipleItemBg,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.multipleItemBorderColor)}})}),tA=(e,t)=>{let{componentCls:n,antCls:r}=e;return{["&:not(".concat(n,"-customize-input) ").concat(n,"-selector")]:{background:t.bg,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," transparent"),color:t.color},["&:not(".concat(n,"-disabled):not(").concat(n,"-customize-input):not(").concat(r,"-pagination-size-changer)")]:{["&:hover ".concat(n,"-selector")]:{background:t.hoverBg},["".concat(n,"-focused& ").concat(n,"-selector")]:{background:e.selectorBg,borderColor:t.activeBorderColor,outline:0}}}},tF=(e,t)=>({["&".concat(e.componentCls,"-status-").concat(t.status)]:Object.assign({},tA(e,t))}),tz=e=>({"&-filled":Object.assign(Object.assign(Object.assign(Object.assign({},tA(e,{bg:e.colorFillTertiary,hoverBg:e.colorFillSecondary,activeBorderColor:e.colorPrimary,color:e.colorText})),tF(e,{status:"error",bg:e.colorErrorBg,hoverBg:e.colorErrorBgHover,activeBorderColor:e.colorError,color:e.colorError})),tF(e,{status:"warning",bg:e.colorWarningBg,hoverBg:e.colorWarningBgHover,activeBorderColor:e.colorWarning,color:e.colorWarning})),{["&".concat(e.componentCls,"-disabled")]:{["&:not(".concat(e.componentCls,"-customize-input) ").concat(e.componentCls,"-selector")]:{borderColor:e.colorBorder,background:e.colorBgContainerDisabled,color:e.colorTextDisabled}},["&".concat(e.componentCls,"-multiple ").concat(e.componentCls,"-selection-item")]:{background:e.colorBgContainer,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.colorSplit)}})}),tL=e=>({"&-borderless":{["".concat(e.componentCls,"-selector")]:{background:"transparent",borderColor:"transparent"},["&".concat(e.componentCls,"-disabled")]:{["&:not(".concat(e.componentCls,"-customize-input) ").concat(e.componentCls,"-selector")]:{color:e.colorTextDisabled}},["&".concat(e.componentCls,"-multiple ").concat(e.componentCls,"-selection-item")]:{background:e.multipleItemBg,border:"".concat((0,ts.bf)(e.lineWidth)," ").concat(e.lineType," ").concat(e.multipleItemBorderColor)}}});var t_=e=>({[e.componentCls]:Object.assign(Object.assign(Object.assign({},tT(e)),tz(e)),tL(e))});let tB=e=>{let{componentCls:t}=e;return{position:"relative",transition:"all ".concat(e.motionDurationMid," ").concat(e.motionEaseInOut),input:{cursor:"pointer"},["".concat(t,"-show-search&")]:{cursor:"text",input:{cursor:"auto",color:"inherit",height:"100%"}},["".concat(t,"-disabled&")]:{cursor:"not-allowed",input:{cursor:"not-allowed"}}}},tH=e=>{let{componentCls:t}=e;return{["".concat(t,"-selection-search-input")]:{margin:0,padding:0,background:"transparent",border:"none",outline:"none",appearance:"none",fontFamily:"inherit","&::-webkit-search-cancel-button":{display:"none","-webkit-appearance":"none"}}}},tD=e=>{let{antCls:t,componentCls:n,inputPaddingHorizontalBase:r,iconCls:o}=e;return{[n]:Object.assign(Object.assign({},(0,tc.Wf)(e)),{position:"relative",display:"inline-block",cursor:"pointer",["&:not(".concat(n,"-customize-input) ").concat(n,"-selector")]:Object.assign(Object.assign({},tB(e)),tH(e)),["".concat(n,"-selection-item")]:Object.assign(Object.assign({flex:1,fontWeight:"normal",position:"relative",userSelect:"none"},tc.vS),{["> ".concat(t,"-typography")]:{display:"inline"}}),["".concat(n,"-selection-placeholder")]:Object.assign(Object.assign({},tc.vS),{flex:1,color:e.colorTextPlaceholder,pointerEvents:"none"}),["".concat(n,"-arrow")]:Object.assign(Object.assign({},(0,tc.Ro)()),{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:r,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,lineHeight:1,textAlign:"center",pointerEvents:"none",display:"flex",alignItems:"center",transition:"opacity ".concat(e.motionDurationSlow," ease"),[o]:{verticalAlign:"top",transition:"transform ".concat(e.motionDurationSlow),"> svg":{verticalAlign:"top"},["&:not(".concat(n,"-suffix)")]:{pointerEvents:"auto"}},["".concat(n,"-disabled &")]:{cursor:"not-allowed"},"> *:not(:last-child)":{marginInlineEnd:8}}),["".concat(n,"-clear")]:{position:"absolute",top:"50%",insetInlineStart:"auto",insetInlineEnd:r,zIndex:1,display:"inline-block",width:e.fontSizeIcon,height:e.fontSizeIcon,marginTop:e.calc(e.fontSizeIcon).mul(-1).div(2).equal(),color:e.colorTextQuaternary,fontSize:e.fontSizeIcon,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",cursor:"pointer",opacity:0,transition:"color ".concat(e.motionDurationMid," ease, opacity ").concat(e.motionDurationSlow," ease"),textRendering:"auto","&:before":{display:"block"},"&:hover":{color:e.colorTextTertiary}},"&:hover":{["".concat(n,"-clear")]:{opacity:1},["".concat(n,"-arrow:not(:last-child)")]:{opacity:0}}}),["".concat(n,"-has-feedback")]:{["".concat(n,"-clear")]:{insetInlineEnd:e.calc(r).add(e.fontSize).add(e.paddingXS).equal()}}}},tW=e=>{let{componentCls:t}=e;return[{[t]:{["&".concat(t,"-in-form-item")]:{width:"100%"}}},tD(e),function(e){let{componentCls:t}=e,n=e.calc(e.controlPaddingHorizontalSM).sub(e.lineWidth).equal();return[tP(e),tP((0,e2.TS)(e,{controlHeight:e.controlHeightSM,borderRadius:e.borderRadiusSM}),"sm"),{["".concat(t,"-single").concat(t,"-sm")]:{["&:not(".concat(t,"-customize-input)")]:{["".concat(t,"-selection-search")]:{insetInlineStart:n,insetInlineEnd:n},["".concat(t,"-selector")]:{padding:"0 ".concat((0,ts.bf)(n))},["&".concat(t,"-show-arrow ").concat(t,"-selection-search")]:{insetInlineEnd:e.calc(n).add(e.calc(e.fontSize).mul(1.5)).equal()},["\n &".concat(t,"-show-arrow ").concat(t,"-selection-item,\n &").concat(t,"-show-arrow ").concat(t,"-selection-placeholder\n ")]:{paddingInlineEnd:e.calc(e.fontSize).mul(1.5).equal()}}}},tP((0,e2.TS)(e,{controlHeight:e.singleItemHeightLG,fontSize:e.fontSizeLG,borderRadius:e.borderRadiusLG}),"lg")]}(e),tj(e),tk(e),{["".concat(t,"-rtl")]:{direction:"rtl"}},(0,tl.c)(e,{borderElCls:"".concat(t,"-selector"),focusElCls:"".concat(t,"-focused")})]};var tV=(0,e1.I$)("Select",(e,t)=>{let{rootPrefixCls:n}=t,r=(0,e2.TS)(e,{rootPrefixCls:n,inputPaddingHorizontalBase:e.calc(e.paddingSM).sub(1).equal(),multipleSelectItemHeight:e.multipleItemHeight,selectHeight:e.controlHeight});return[tW(r),t_(r)]},e=>{let{fontSize:t,lineHeight:n,controlHeight:r,controlPaddingHorizontal:o,zIndexPopupBase:a,colorText:i,fontWeightStrong:c,controlItemBgActive:l,controlItemBgHover:s,colorBgContainer:u,colorFillSecondary:d,controlHeightLG:f,controlHeightSM:p,colorBgContainerDisabled:m,colorTextDisabled:g}=e;return{zIndexPopup:a+50,optionSelectedColor:i,optionSelectedFontWeight:c,optionSelectedBg:l,optionActiveBg:s,optionPadding:"".concat((r-t*n)/2,"px ").concat(o,"px"),optionFontSize:t,optionLineHeight:n,optionHeight:r,selectorBg:u,clearBg:u,singleItemHeightLG:f,multipleItemBg:d,multipleItemBorderColor:"transparent",multipleItemHeight:p,multipleItemHeightLG:r,multipleSelectorBgDisabled:m,multipleItemColorDisabled:g,multipleItemBorderColorDisabled:"transparent",showArrowPaddingInlineEnd:Math.ceil(1.25*e.fontSize)}},{unitless:{optionLineHeight:!0,optionSelectedFontWeight:!0}}),tq={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},tX=n(688),tG=r.forwardRef(function(e,t){return r.createElement(tX.Z,(0,i.Z)({},e,{ref:t,icon:tq}))}),tU=n(7136),tK=n(1183),t$=n(383),tY=n(9334),tQ=n(6871),tJ=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let t0="SECRET_COMBOBOX_MODE_DO_NOT_USE",t1=r.forwardRef((e,t)=>{var n,o,i;let c;let{prefixCls:l,bordered:s,className:u,rootClassName:d,getPopupContainer:f,popupClassName:p,dropdownClassName:m,listHeight:g=256,placement:h,listItemHeight:v,size:b,disabled:y,notFoundContent:x,status:w,builtinPlacements:E,dropdownMatchSelectWidth:C,popupMatchSelectWidth:S,direction:O,style:Z,allowClear:k,variant:R,dropdownStyle:M,transitionName:j,tagRender:P,maxCount:N}=e,I=tJ(e,["prefixCls","bordered","className","rootClassName","getPopupContainer","popupClassName","dropdownClassName","listHeight","placement","listItemHeight","size","disabled","notFoundContent","status","builtinPlacements","dropdownMatchSelectWidth","popupMatchSelectWidth","direction","style","allowClear","variant","dropdownStyle","transitionName","tagRender","maxCount"]),{getPopupContainer:T,getPrefixCls:A,renderEmpty:F,direction:z,virtual:L,popupMatchSelectWidth:_,popupOverflow:B,select:H}=r.useContext(eY.E_),[,D]=(0,e0.ZP)(),W=null!=v?v:null==D?void 0:D.controlHeight,V=A("select",l),q=A(),X=null!=O?O:z,{compactSize:G,compactItemClassnames:U}=(0,ta.ri)(V,X),[K,$]=(0,to.Z)(R,s),Y=(0,tt.Z)(V),[Q,J,ee]=tV(V,Y),et=r.useMemo(()=>{let{mode:t}=e;return"combobox"===t?void 0:t===t0?"combobox":t},[e.mode]),en="multiple"===et||"tags"===et,er=(o=e.suffixIcon,void 0!==(i=e.showArrow)?i:null!==o),eo=null!==(n=null!=S?S:C)&&void 0!==n?n:_,{status:ea,hasFeedback:ei,isFormItemInput:ec,feedbackIcon:el}=r.useContext(tr.aM),es=(0,e$.F)(ea,w);c=void 0!==x?x:"combobox"===et?null:(null==F?void 0:F("Select"))||r.createElement(e7,{componentName:"Select"});let{suffixIcon:eu,itemIcon:ed,removeIcon:ef,clearIcon:ep}=function(e){let{suffixIcon:t,clearIcon:n,menuItemSelectedIcon:o,removeIcon:a,loading:i,multiple:c,hasFeedback:l,prefixCls:s,showSuffixIcon:u,feedbackIcon:d,showArrow:f,componentName:p}=e,m=null!=n?n:r.createElement(tU.Z,null),g=e=>null!==t||l||f?r.createElement(r.Fragment,null,!1!==u&&e,l&&d):null,h=null;if(void 0!==t)h=g(t);else if(i)h=g(r.createElement(tY.Z,{spin:!0}));else{let e="".concat(s,"-suffix");h=t=>{let{open:n,showSearch:o}=t;return n&&o?g(r.createElement(tQ.Z,{className:e})):g(r.createElement(t$.Z,{className:e}))}}let v=null;return v=void 0!==o?o:c?r.createElement(tG,null):null,{clearIcon:m,suffixIcon:h,itemIcon:v,removeIcon:void 0!==a?a:r.createElement(tK.Z,null)}}(Object.assign(Object.assign({},I),{multiple:en,hasFeedback:ei,feedbackIcon:el,showSuffixIcon:er,prefixCls:V,componentName:"Select"})),em=(0,eg.Z)(I,["suffixIcon","itemIcon"]),eh=a()(p||m,{["".concat(V,"-dropdown-").concat(X)]:"rtl"===X},d,ee,Y,J),ev=(0,tn.Z)(e=>{var t;return null!==(t=null!=b?b:G)&&void 0!==t?t:e}),eb=r.useContext(te.Z),ey=a()({["".concat(V,"-lg")]:"large"===ev,["".concat(V,"-sm")]:"small"===ev,["".concat(V,"-rtl")]:"rtl"===X,["".concat(V,"-").concat(K)]:$,["".concat(V,"-in-form-item")]:ec},(0,e$.Z)(V,es,ei),U,null==H?void 0:H.className,u,d,ee,Y,J),ex=r.useMemo(()=>void 0!==h?h:"rtl"===X?"bottomRight":"bottomLeft",[h,X]),[ew]=(0,eG.Cn)("SelectLike",null==M?void 0:M.zIndex);return Q(r.createElement(eX,Object.assign({ref:t,virtual:L,showSearch:null==H?void 0:H.showSearch},em,{style:Object.assign(Object.assign({},null==H?void 0:H.style),Z),dropdownMatchSelectWidth:eo,transitionName:(0,eU.m)(q,"slide-up",j),builtinPlacements:E||ti(B),listHeight:g,listItemHeight:W,mode:et,prefixCls:V,placement:ex,direction:X,suffixIcon:eu,menuItemSelectedIcon:ed,removeIcon:ef,allowClear:!0===k?{clearIcon:ep}:k,notFoundContent:c,className:ey,getPopupContainer:f||T,dropdownClassName:eh,disabled:null!=y?y:eb,dropdownStyle:Object.assign(Object.assign({},M),{zIndex:ew}),maxCount:en?N:void 0,tagRender:en?P:void 0})))}),t2=(0,eK.Z)(t1);t1.SECRET_COMBOBOX_MODE_DO_NOT_USE=t0,t1.Option=ep,t1.OptGroup=ef,t1._InternalPanelDoNotUseOrYouWillBeFired=t2;var t4=t1},2801:function(e,t,n){n.d(t,{BR:function(){return l},ri:function(){return c}});var r=n(6480),o=n.n(r);n(3054);var a=n(4090);let i=a.createContext(null),c=(e,t)=>{let n=a.useContext(i),r=a.useMemo(()=>{if(!n)return"";let{compactDirection:r,isFirstItem:a,isLastItem:i}=n,c="vertical"===r?"-vertical-":"-";return o()("".concat(e,"-compact").concat(c,"item"),{["".concat(e,"-compact").concat(c,"first-item")]:a,["".concat(e,"-compact").concat(c,"last-item")]:i,["".concat(e,"-compact").concat(c,"item-rtl")]:"rtl"===t})},[e,t,n]);return{compactSize:null==n?void 0:n.compactSize,compactDirection:null==n?void 0:n.compactDirection,compactItemClassnames:r}},l=e=>{let{children:t}=e;return a.createElement(i.Provider,{value:null},t)}},2288:function(e,t,n){n.d(t,{c:function(){return r}});function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{focus:!0},{componentCls:n}=e,r="".concat(n,"-compact");return{[r]:Object.assign(Object.assign({},function(e,t,n){let{focusElCls:r,focus:o,borderElCls:a}=n,i=a?"> *":"",c=["hover",o?"focus":null,"active"].filter(Boolean).map(e=>"&:".concat(e," ").concat(i)).join(",");return{["&-item:not(".concat(t,"-last-item)")]:{marginInlineEnd:e.calc(e.lineWidth).mul(-1).equal()},"&-item":Object.assign(Object.assign({[c]:{zIndex:2}},r?{["&".concat(r)]:{zIndex:2}}:{}),{["&[disabled] ".concat(i)]:{zIndex:0}})}}(e,r,t)),function(e,t,n){let{borderElCls:r}=n,o=r?"> ".concat(r):"";return{["&-item:not(".concat(t,"-first-item):not(").concat(t,"-last-item) ").concat(o)]:{borderRadius:0},["&-item:not(".concat(t,"-last-item)").concat(t,"-first-item")]:{["& ".concat(o,", &").concat(e,"-sm ").concat(o,", &").concat(e,"-lg ").concat(o)]:{borderStartEndRadius:0,borderEndEndRadius:0}},["&-item:not(".concat(t,"-first-item)").concat(t,"-last-item")]:{["& ".concat(o,", &").concat(e,"-sm ").concat(o,", &").concat(e,"-lg ").concat(o)]:{borderStartStartRadius:0,borderEndStartRadius:0}}}}(n,r,t))}}},1303:function(e,t,n){n.d(t,{Lx:function(){return l},Qy:function(){return d},Ro:function(){return i},Wf:function(){return a},dF:function(){return c},du:function(){return s},vS:function(){return o}});var r=n(8985);let o={overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},a=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return{boxSizing:"border-box",margin:0,padding:0,color:e.colorText,fontSize:e.fontSize,lineHeight:e.lineHeight,listStyle:"none",fontFamily:t?"inherit":e.fontFamily}},i=()=>({display:"inline-flex",alignItems:"center",color:"inherit",fontStyle:"normal",lineHeight:0,textAlign:"center",textTransform:"none",verticalAlign:"-0.125em",textRendering:"optimizeLegibility","-webkit-font-smoothing":"antialiased","-moz-osx-font-smoothing":"grayscale","> *":{lineHeight:1},svg:{display:"inline-block"}}),c=()=>({"&::before":{display:"table",content:'""'},"&::after":{display:"table",clear:"both",content:'""'}}),l=e=>({a:{color:e.colorLink,textDecoration:e.linkDecoration,backgroundColor:"transparent",outline:"none",cursor:"pointer",transition:"color ".concat(e.motionDurationSlow),"-webkit-text-decoration-skip":"objects","&:hover":{color:e.colorLinkHover},"&:active":{color:e.colorLinkActive},"&:active,\n &:hover":{textDecoration:e.linkHoverDecoration,outline:0},"&:focus":{textDecoration:e.linkFocusDecoration,outline:0},"&[disabled]":{color:e.colorTextDisabled,cursor:"not-allowed"}}}),s=(e,t)=>{let{fontFamily:n,fontSize:r}=e,o='[class^="'.concat(t,'"], [class*=" ').concat(t,'"]');return{[o]:{fontFamily:n,fontSize:r,boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"},[o]:{boxSizing:"border-box","&::before, &::after":{boxSizing:"border-box"}}}}},u=e=>({outline:"".concat((0,r.bf)(e.lineWidthFocus)," solid ").concat(e.colorPrimaryBorder),outlineOffset:1,transition:"outline-offset 0s, outline 0s"}),d=e=>({"&:focus-visible":Object.assign({},u(e))})},9353:function(e,t,n){n.d(t,{R:function(){return a}});let r=e=>({animationDuration:e,animationFillMode:"both"}),o=e=>({animationDuration:e,animationFillMode:"both"}),a=function(e,t,n,a){let i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],c=i?"&":"";return{["\n ".concat(c).concat(e,"-enter,\n ").concat(c).concat(e,"-appear\n ")]:Object.assign(Object.assign({},r(a)),{animationPlayState:"paused"}),["".concat(c).concat(e,"-leave")]:Object.assign(Object.assign({},o(a)),{animationPlayState:"paused"}),["\n ".concat(c).concat(e,"-enter").concat(e,"-enter-active,\n ").concat(c).concat(e,"-appear").concat(e,"-appear-active\n ")]:{animationName:t,animationPlayState:"running"},["".concat(c).concat(e,"-leave").concat(e,"-leave-active")]:{animationName:n,animationPlayState:"running",pointerEvents:"none"}}}},8854:function(e,t,n){n.d(t,{_y:function(){return g},kr:function(){return a}});var r=n(8985),o=n(9353);let a=new r.E4("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),i=new r.E4("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),c=new r.E4("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),l=new r.E4("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),s=new r.E4("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),u=new r.E4("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),d=new r.E4("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),f=new r.E4("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new r.E4("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),m={zoom:{inKeyframes:a,outKeyframes:i},"zoom-big":{inKeyframes:c,outKeyframes:l},"zoom-big-fast":{inKeyframes:c,outKeyframes:l},"zoom-left":{inKeyframes:d,outKeyframes:f},"zoom-right":{inKeyframes:p,outKeyframes:new r.E4("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}})},"zoom-up":{inKeyframes:s,outKeyframes:u},"zoom-down":{inKeyframes:new r.E4("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),outKeyframes:new r.E4("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}})}},g=(e,t)=>{let{antCls:n}=e,r="".concat(n,"-").concat(t),{inKeyframes:a,outKeyframes:i}=m[t];return[(0,o.R)(r,a,i,"zoom-big-fast"===t?e.motionDurationFast:e.motionDurationMid),{["\n ".concat(r,"-enter,\n ").concat(r,"-appear\n ")]:{transform:"scale(0)",opacity:0,animationTimingFunction:e.motionEaseOutCirc,"&-prepare":{transform:"none"}},["".concat(r,"-leave")]:{animationTimingFunction:e.motionEaseInOutCirc}}]}},3345:function(e,t,n){n.d(t,{Mj:function(){return b},u_:function(){return v},uH:function(){return h}});var r=n(4090),o=n(8985),a=n(2215),i=e=>{let{controlHeight:t}=e;return{controlHeightSM:.75*t,controlHeightXS:.5*t,controlHeightLG:1.25*t}},c=n(6864),l=n(6336),s=e=>{let t=e,n=e,r=e,o=e;return e<6&&e>=5?t=e+1:e<16&&e>=6?t=e+2:e>=16&&(t=16),e<7&&e>=5?n=4:e<8&&e>=7?n=5:e<14&&e>=8?n=6:e<16&&e>=14?n=7:e>=16&&(n=8),e<6&&e>=2?r=1:e>=6&&(r=2),e>4&&e<8?o=4:e>=8&&(o=6),{borderRadius:e,borderRadiusXS:r,borderRadiusSM:n,borderRadiusLG:t,borderRadiusOuter:o}};let u=(e,t)=>new l.C(e).setAlpha(t).toRgbString(),d=(e,t)=>new l.C(e).darken(t).toHexString(),f=e=>{let t=(0,a.R_)(e);return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[4],6:t[5],7:t[6],8:t[4],9:t[5],10:t[6]}},p=(e,t)=>{let n=e||"#fff",r=t||"#000";return{colorBgBase:n,colorTextBase:r,colorText:u(r,.88),colorTextSecondary:u(r,.65),colorTextTertiary:u(r,.45),colorTextQuaternary:u(r,.25),colorFill:u(r,.15),colorFillSecondary:u(r,.06),colorFillTertiary:u(r,.04),colorFillQuaternary:u(r,.02),colorBgLayout:d(n,4),colorBgContainer:d(n,0),colorBgElevated:d(n,0),colorBgSpotlight:u(r,.85),colorBgBlur:"transparent",colorBorder:d(n,15),colorBorderSecondary:d(n,6)}};var m=n(9202),g=e=>{let t=(0,m.Z)(e),n=t.map(e=>e.size),r=t.map(e=>e.lineHeight),o=n[1],a=n[0],i=n[2],c=r[1],l=r[0],s=r[2];return{fontSizeSM:a,fontSize:o,fontSizeLG:i,fontSizeXL:n[3],fontSizeHeading1:n[6],fontSizeHeading2:n[5],fontSizeHeading3:n[4],fontSizeHeading4:n[3],fontSizeHeading5:n[2],lineHeight:c,lineHeightLG:s,lineHeightSM:l,fontHeight:Math.round(c*o),fontHeightLG:Math.round(s*i),fontHeightSM:Math.round(l*a),lineHeightHeading1:r[6],lineHeightHeading2:r[5],lineHeightHeading3:r[4],lineHeightHeading4:r[3],lineHeightHeading5:r[2]}};let h=(0,o.jG)(function(e){let t=Object.keys(c.M).map(t=>{let n=(0,a.R_)(e[t]);return Array(10).fill(1).reduce((e,r,o)=>(e["".concat(t,"-").concat(o+1)]=n[o],e["".concat(t).concat(o+1)]=n[o],e),{})}).reduce((e,t)=>e=Object.assign(Object.assign({},e),t),{});return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},e),t),function(e,t){let{generateColorPalettes:n,generateNeutralColorPalettes:r}=t,{colorSuccess:o,colorWarning:a,colorError:i,colorInfo:c,colorPrimary:s,colorBgBase:u,colorTextBase:d}=e,f=n(s),p=n(o),m=n(a),g=n(i),h=n(c),v=r(u,d),b=n(e.colorLink||e.colorInfo);return Object.assign(Object.assign({},v),{colorPrimaryBg:f[1],colorPrimaryBgHover:f[2],colorPrimaryBorder:f[3],colorPrimaryBorderHover:f[4],colorPrimaryHover:f[5],colorPrimary:f[6],colorPrimaryActive:f[7],colorPrimaryTextHover:f[8],colorPrimaryText:f[9],colorPrimaryTextActive:f[10],colorSuccessBg:p[1],colorSuccessBgHover:p[2],colorSuccessBorder:p[3],colorSuccessBorderHover:p[4],colorSuccessHover:p[4],colorSuccess:p[6],colorSuccessActive:p[7],colorSuccessTextHover:p[8],colorSuccessText:p[9],colorSuccessTextActive:p[10],colorErrorBg:g[1],colorErrorBgHover:g[2],colorErrorBorder:g[3],colorErrorBorderHover:g[4],colorErrorHover:g[5],colorError:g[6],colorErrorActive:g[7],colorErrorTextHover:g[8],colorErrorText:g[9],colorErrorTextActive:g[10],colorWarningBg:m[1],colorWarningBgHover:m[2],colorWarningBorder:m[3],colorWarningBorderHover:m[4],colorWarningHover:m[4],colorWarning:m[6],colorWarningActive:m[7],colorWarningTextHover:m[8],colorWarningText:m[9],colorWarningTextActive:m[10],colorInfoBg:h[1],colorInfoBgHover:h[2],colorInfoBorder:h[3],colorInfoBorderHover:h[4],colorInfoHover:h[4],colorInfo:h[6],colorInfoActive:h[7],colorInfoTextHover:h[8],colorInfoText:h[9],colorInfoTextActive:h[10],colorLinkHover:b[4],colorLink:b[6],colorLinkActive:b[7],colorBgMask:new l.C("#000").setAlpha(.45).toRgbString(),colorWhite:"#fff"})}(e,{generateColorPalettes:f,generateNeutralColorPalettes:p})),g(e.fontSize)),function(e){let{sizeUnit:t,sizeStep:n}=e;return{sizeXXL:t*(n+8),sizeXL:t*(n+4),sizeLG:t*(n+2),sizeMD:t*(n+1),sizeMS:t*n,size:t*n,sizeSM:t*(n-1),sizeXS:t*(n-2),sizeXXS:t*(n-3)}}(e)),i(e)),function(e){let{motionUnit:t,motionBase:n,borderRadius:r,lineWidth:o}=e;return Object.assign({motionDurationFast:"".concat((n+t).toFixed(1),"s"),motionDurationMid:"".concat((n+2*t).toFixed(1),"s"),motionDurationSlow:"".concat((n+3*t).toFixed(1),"s"),lineWidthBold:o+1},s(r))}(e))}),v={token:c.Z,override:{override:c.Z},hashed:!0},b=r.createContext(v)},6864:function(e,t,n){n.d(t,{M:function(){return r}});let r={blue:"#1677ff",purple:"#722ED1",cyan:"#13C2C2",green:"#52C41A",magenta:"#EB2F96",pink:"#eb2f96",red:"#F5222D",orange:"#FA8C16",yellow:"#FADB14",volcano:"#FA541C",geekblue:"#2F54EB",gold:"#FAAD14",lime:"#A0D911"},o=Object.assign(Object.assign({},r),{colorPrimary:"#1677ff",colorSuccess:"#52c41a",colorWarning:"#faad14",colorError:"#ff4d4f",colorInfo:"#1677ff",colorLink:"",colorTextBase:"",colorBgBase:"",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n'Noto Color Emoji'",fontFamilyCode:"'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace",fontSize:14,lineWidth:1,lineType:"solid",motionUnit:.1,motionBase:0,motionEaseOutCirc:"cubic-bezier(0.08, 0.82, 0.17, 1)",motionEaseInOutCirc:"cubic-bezier(0.78, 0.14, 0.15, 0.86)",motionEaseOut:"cubic-bezier(0.215, 0.61, 0.355, 1)",motionEaseInOut:"cubic-bezier(0.645, 0.045, 0.355, 1)",motionEaseOutBack:"cubic-bezier(0.12, 0.4, 0.29, 1.46)",motionEaseInBack:"cubic-bezier(0.71, -0.46, 0.88, 0.6)",motionEaseInQuint:"cubic-bezier(0.755, 0.05, 0.855, 0.06)",motionEaseOutQuint:"cubic-bezier(0.23, 1, 0.32, 1)",borderRadius:6,sizeUnit:4,sizeStep:4,sizePopupArrow:16,controlHeight:32,zIndexBase:0,zIndexPopupBase:1e3,opacityImage:1,wireframe:!1,motion:!0});t.Z=o},9202:function(e,t,n){function r(e){return(e+8)/e}function o(e){let t=Array(10).fill(null).map((t,n)=>{let r=e*Math.pow(2.71828,(n-1)/5);return 2*Math.floor((n>1?Math.floor(r):Math.ceil(r))/2)});return t[1]=e,t.map(e=>({size:e,lineHeight:r(e)}))}n.d(t,{D:function(){return r},Z:function(){return o}})},4750:function(e,t,n){n.d(t,{ZP:function(){return v},ID:function(){return m},NJ:function(){return p}});var r=n(4090),o=n(8985),a=n(3345),i=n(6864),c=n(6336);function l(e){return e>=0&&e<=255}var s=function(e,t){let{r:n,g:r,b:o,a:a}=new c.C(e).toRgb();if(a<1)return e;let{r:i,g:s,b:u}=new c.C(t).toRgb();for(let e=.01;e<=1;e+=.01){let t=Math.round((n-i*(1-e))/e),a=Math.round((r-s*(1-e))/e),d=Math.round((o-u*(1-e))/e);if(l(t)&&l(a)&&l(d))return new c.C({r:t,g:a,b:d,a:Math.round(100*e)/100}).toRgbString()}return new c.C({r:n,g:r,b:o,a:1}).toRgbString()},u=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};function d(e){let{override:t}=e,n=u(e,["override"]),r=Object.assign({},t);Object.keys(i.Z).forEach(e=>{delete r[e]});let o=Object.assign(Object.assign({},n),r);return!1===o.motion&&(o.motionDurationFast="0s",o.motionDurationMid="0s",o.motionDurationSlow="0s"),Object.assign(Object.assign(Object.assign({},o),{colorFillContent:o.colorFillSecondary,colorFillContentHover:o.colorFill,colorFillAlter:o.colorFillQuaternary,colorBgContainerDisabled:o.colorFillTertiary,colorBorderBg:o.colorBgContainer,colorSplit:s(o.colorBorderSecondary,o.colorBgContainer),colorTextPlaceholder:o.colorTextQuaternary,colorTextDisabled:o.colorTextQuaternary,colorTextHeading:o.colorText,colorTextLabel:o.colorTextSecondary,colorTextDescription:o.colorTextTertiary,colorTextLightSolid:o.colorWhite,colorHighlight:o.colorError,colorBgTextHover:o.colorFillSecondary,colorBgTextActive:o.colorFill,colorIcon:o.colorTextTertiary,colorIconHover:o.colorText,colorErrorOutline:s(o.colorErrorBg,o.colorBgContainer),colorWarningOutline:s(o.colorWarningBg,o.colorBgContainer),fontSizeIcon:o.fontSizeSM,lineWidthFocus:4*o.lineWidth,lineWidth:o.lineWidth,controlOutlineWidth:2*o.lineWidth,controlInteractiveSize:o.controlHeight/2,controlItemBgHover:o.colorFillTertiary,controlItemBgActive:o.colorPrimaryBg,controlItemBgActiveHover:o.colorPrimaryBgHover,controlItemBgActiveDisabled:o.colorFill,controlTmpOutline:o.colorFillQuaternary,controlOutline:s(o.colorPrimaryBg,o.colorBgContainer),lineType:o.lineType,borderRadius:o.borderRadius,borderRadiusXS:o.borderRadiusXS,borderRadiusSM:o.borderRadiusSM,borderRadiusLG:o.borderRadiusLG,fontWeightStrong:600,opacityLoading:.65,linkDecoration:"none",linkHoverDecoration:"none",linkFocusDecoration:"none",controlPaddingHorizontal:12,controlPaddingHorizontalSM:8,paddingXXS:o.sizeXXS,paddingXS:o.sizeXS,paddingSM:o.sizeSM,padding:o.size,paddingMD:o.sizeMD,paddingLG:o.sizeLG,paddingXL:o.sizeXL,paddingContentHorizontalLG:o.sizeLG,paddingContentVerticalLG:o.sizeMS,paddingContentHorizontal:o.sizeMS,paddingContentVertical:o.sizeSM,paddingContentHorizontalSM:o.size,paddingContentVerticalSM:o.sizeXS,marginXXS:o.sizeXXS,marginXS:o.sizeXS,marginSM:o.sizeSM,margin:o.size,marginMD:o.sizeMD,marginLG:o.sizeLG,marginXL:o.sizeXL,marginXXL:o.sizeXXL,boxShadow:"\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowSecondary:"\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowTertiary:"\n 0 1px 2px 0 rgba(0, 0, 0, 0.03),\n 0 1px 6px -1px rgba(0, 0, 0, 0.02),\n 0 2px 4px 0 rgba(0, 0, 0, 0.02)\n ",screenXS:480,screenXSMin:480,screenXSMax:575,screenSM:576,screenSMMin:576,screenSMMax:767,screenMD:768,screenMDMin:768,screenMDMax:991,screenLG:992,screenLGMin:992,screenLGMax:1199,screenXL:1200,screenXLMin:1200,screenXLMax:1599,screenXXL:1600,screenXXLMin:1600,boxShadowPopoverArrow:"2px 2px 5px rgba(0, 0, 0, 0.05)",boxShadowCard:"\n 0 1px 2px -2px ".concat(new c.C("rgba(0, 0, 0, 0.16)").toRgbString(),",\n 0 3px 6px 0 ").concat(new c.C("rgba(0, 0, 0, 0.12)").toRgbString(),",\n 0 5px 12px 4px ").concat(new c.C("rgba(0, 0, 0, 0.09)").toRgbString(),"\n "),boxShadowDrawerRight:"\n -6px 0 16px 0 rgba(0, 0, 0, 0.08),\n -3px 0 6px -4px rgba(0, 0, 0, 0.12),\n -9px 0 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowDrawerLeft:"\n 6px 0 16px 0 rgba(0, 0, 0, 0.08),\n 3px 0 6px -4px rgba(0, 0, 0, 0.12),\n 9px 0 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowDrawerUp:"\n 0 6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowDrawerDown:"\n 0 -6px 16px 0 rgba(0, 0, 0, 0.08),\n 0 -3px 6px -4px rgba(0, 0, 0, 0.12),\n 0 -9px 28px 8px rgba(0, 0, 0, 0.05)\n ",boxShadowTabsOverflowLeft:"inset 10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowRight:"inset -10px 0 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowTop:"inset 0 10px 8px -8px rgba(0, 0, 0, 0.08)",boxShadowTabsOverflowBottom:"inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08)"}),r)}var f=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,r=Object.getOwnPropertySymbols(e);ot.indexOf(r[o])&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n};let p={lineHeight:!0,lineHeightSM:!0,lineHeightLG:!0,lineHeightHeading1:!0,lineHeightHeading2:!0,lineHeightHeading3:!0,lineHeightHeading4:!0,lineHeightHeading5:!0,opacityLoading:!0,fontWeightStrong:!0,zIndexPopupBase:!0,zIndexBase:!0},m={size:!0,sizeSM:!0,sizeLG:!0,sizeMD:!0,sizeXS:!0,sizeXXS:!0,sizeMS:!0,sizeXL:!0,sizeXXL:!0,sizeUnit:!0,sizeStep:!0,motionBase:!0,motionUnit:!0},g={screenXS:!0,screenXSMin:!0,screenXSMax:!0,screenSM:!0,screenSMMin:!0,screenSMMax:!0,screenMD:!0,screenMDMin:!0,screenMDMax:!0,screenLG:!0,screenLGMin:!0,screenLGMax:!0,screenXL:!0,screenXLMin:!0,screenXLMax:!0,screenXXL:!0,screenXXLMin:!0},h=(e,t,n)=>{let r=n.getDerivativeToken(e),{override:o}=t,a=f(t,["override"]),i=Object.assign(Object.assign({},r),{override:o});return i=d(i),a&&Object.entries(a).forEach(e=>{let[t,n]=e,{theme:r}=n,o=f(n,["theme"]),a=o;r&&(a=h(Object.assign(Object.assign({},i),o),{override:o},r)),i[t]=a}),i};function v(){let{token:e,hashed:t,theme:n,override:c,cssVar:l}=r.useContext(a.Mj),s="".concat("5.13.2","-").concat(t||""),u=n||a.uH,[f,v,b]=(0,o.fp)(u,[i.Z,e],{salt:s,override:c,getComputedToken:h,formatToken:d,cssVar:l&&{prefix:l.prefix,key:l.key,unitless:p,ignore:m,preserve:g}});return[u,b,t?v:"",f,l]}},6585:function(e,t,n){n.d(t,{ZP:function(){return O},I$:function(){return R},bk:function(){return Z}});var r=n(4090),o=n(8985);n(8563);var a=n(7499),i=n(1303),c=n(4750),l=n(7365),s=n(5127),u=n(2784),d=n(9676),f=n(8605),p=n(7478);let m=(0,s.Z)(function e(){(0,l.Z)(this,e)}),g=function(e){function t(e){var n,r,o;return(0,l.Z)(this,t),r=t,r=(0,f.Z)(r),(n=(0,u.Z)(this,(0,d.Z)()?Reflect.construct(r,o||[],(0,f.Z)(this).constructor):r.apply(this,o))).result=0,e instanceof t?n.result=e.result:"number"==typeof e&&(n.result=e),n}return(0,p.Z)(t,e),(0,s.Z)(t,[{key:"add",value:function(e){return e instanceof t?this.result+=e.result:"number"==typeof e&&(this.result+=e),this}},{key:"sub",value:function(e){return e instanceof t?this.result-=e.result:"number"==typeof e&&(this.result-=e),this}},{key:"mul",value:function(e){return e instanceof t?this.result*=e.result:"number"==typeof e&&(this.result*=e),this}},{key:"div",value:function(e){return e instanceof t?this.result/=e.result:"number"==typeof e&&(this.result/=e),this}},{key:"equal",value:function(){return this.result}}]),t}(m),h="CALC_UNIT";function v(e){return"number"==typeof e?"".concat(e).concat(h):e}let b=function(e){function t(e){var n,r,o;return(0,l.Z)(this,t),r=t,r=(0,f.Z)(r),(n=(0,u.Z)(this,(0,d.Z)()?Reflect.construct(r,o||[],(0,f.Z)(this).constructor):r.apply(this,o))).result="",e instanceof t?n.result="(".concat(e.result,")"):"number"==typeof e?n.result=v(e):"string"==typeof e&&(n.result=e),n}return(0,p.Z)(t,e),(0,s.Z)(t,[{key:"add",value:function(e){return e instanceof t?this.result="".concat(this.result," + ").concat(e.getResult()):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," + ").concat(v(e))),this.lowPriority=!0,this}},{key:"sub",value:function(e){return e instanceof t?this.result="".concat(this.result," - ").concat(e.getResult()):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," - ").concat(v(e))),this.lowPriority=!0,this}},{key:"mul",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof t?this.result="".concat(this.result," * ").concat(e.getResult(!0)):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," * ").concat(e)),this.lowPriority=!1,this}},{key:"div",value:function(e){return this.lowPriority&&(this.result="(".concat(this.result,")")),e instanceof t?this.result="".concat(this.result," / ").concat(e.getResult(!0)):("number"==typeof e||"string"==typeof e)&&(this.result="".concat(this.result," / ").concat(e)),this.lowPriority=!1,this}},{key:"getResult",value:function(e){return this.lowPriority||e?"(".concat(this.result,")"):this.result}},{key:"equal",value:function(e){let{unit:t=!0}=e||{},n=RegExp("".concat(h),"g");return(this.result=this.result.replace(n,t?"px":""),void 0!==this.lowPriority)?"calc(".concat(this.result,")"):this.result}}]),t}(m);var y=e=>{let t="css"===e?b:g;return e=>new t(e)},x=n(316),w=n(8030);let E=(e,t,n)=>{var r;return"function"==typeof n?n((0,x.TS)(t,null!==(r=t[e])&&void 0!==r?r:{})):null!=n?n:{}},C=(e,t,n,r)=>{let o=Object.assign({},t[e]);if(null==r?void 0:r.deprecatedTokens){let{deprecatedTokens:e}=r;e.forEach(e=>{var t;let[n,r]=e;((null==o?void 0:o[n])||(null==o?void 0:o[r]))&&(null!==(t=o[r])&&void 0!==t||(o[r]=null==o?void 0:o[n]))})}let a=Object.assign(Object.assign({},n),o);return Object.keys(a).forEach(e=>{a[e]===t[e]&&delete a[e]}),a},S=(e,t)=>"".concat([t,e.replace(/([A-Z]+)([A-Z][a-z]+)/g,"$1-$2").replace(/([a-z])([A-Z])/g,"$1-$2")].filter(Boolean).join("-"));function O(e,t,n){let l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},s=Array.isArray(e)?e:[e,e],[u]=s,d=s.join("-");return e=>{let[s,f,p,m,g]=(0,c.ZP)(),{getPrefixCls:h,iconPrefixCls:v,csp:b}=(0,r.useContext)(a.E_),O=h(),Z=g?"css":"js",k=y(Z),{max:R,min:M}="js"===Z?{max:Math.max,min:Math.min}:{max:function(){for(var e=arguments.length,t=Array(e),n=0;n(0,o.bf)(e)).join(","),")")},min:function(){for(var e=arguments.length,t=Array(e),n=0;n(0,o.bf)(e)).join(","),")")}},j={theme:s,token:m,hashId:p,nonce:()=>null==b?void 0:b.nonce,clientOnly:l.clientOnly,order:l.order||-999};return(0,o.xy)(Object.assign(Object.assign({},j),{clientOnly:!1,path:["Shared",O]}),()=>[{"&":(0,i.Lx)(m)}]),(0,w.Z)(v,b),[(0,o.xy)(Object.assign(Object.assign({},j),{path:[d,e,v]}),()=>{if(!1===l.injectStyle)return[];let{token:r,flush:a}=(0,x.ZP)(m),c=E(u,f,n),s=".".concat(e),d=C(u,f,c,{deprecatedTokens:l.deprecatedTokens});g&&Object.keys(c).forEach(e=>{c[e]="var(".concat((0,o.ks)(e,S(u,g.prefix)),")")});let h=(0,x.TS)(r,{componentCls:s,prefixCls:e,iconCls:".".concat(v),antCls:".".concat(O),calc:k,max:R,min:M},g?c:d),b=t(h,{hashId:p,prefixCls:e,rootPrefixCls:O,iconPrefixCls:v});return a(u,d),[!1===l.resetStyle?null:(0,i.du)(h,e),b]}),p]}}let Z=(e,t,n,r)=>{let o=O(e,t,n,Object.assign({resetStyle:!1,order:-998},r));return e=>{let{prefixCls:t}=e;return o(t),null}},k=(e,t,n)=>{function a(t){return"".concat(e).concat(t.slice(0,1).toUpperCase()).concat(t.slice(1))}let{unitless:i={},injectStyle:l=!0}=null!=n?n:{},s={[a("zIndexPopup")]:!0};Object.keys(i).forEach(e=>{s[a(e)]=i[e]});let u=r=>{let{rootCls:i,cssVar:l}=r,[,u]=(0,c.ZP)();return(0,o.CI)({path:[e],prefix:l.prefix,key:null==l?void 0:l.key,unitless:Object.assign(Object.assign({},c.NJ),s),ignore:c.ID,token:u,scope:i},()=>{let r=E(e,u,t),o=C(e,u,r,{deprecatedTokens:null==n?void 0:n.deprecatedTokens});return Object.keys(r).forEach(e=>{o[a(e)]=o[e],delete o[e]}),o}),null};return t=>{let[,,,,n]=(0,c.ZP)();return[o=>l&&n?r.createElement(r.Fragment,null,r.createElement(u,{rootCls:t,cssVar:n,component:e}),o):o,null==n?void 0:n.key]}},R=(e,t,n,r)=>{let o=O(e,t,n,r),a=k(Array.isArray(e)?e[0]:e,n,r);return function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,[,n]=o(e),[r,i]=a(t);return[r,n,i]}}},316:function(e,t,n){n.d(t,{TS:function(){return a}});let r="undefined"!=typeof CSSINJS_STATISTIC,o=!0;function a(){for(var e=arguments.length,t=Array(e),n=0;n{Object.keys(e).forEach(t=>{Object.defineProperty(a,t,{configurable:!0,enumerable:!0,get:()=>e[t]})})}),o=!0,a}let i={};function c(){}t.ZP=e=>{let t;let n=e,a=c;return r&&"undefined"!=typeof Proxy&&(t=new Set,n=new Proxy(e,{get:(e,n)=>(o&&t.add(n),e[n])}),a=(e,n)=>{var r;i[e]={global:Array.from(t),component:Object.assign(Object.assign({},null===(r=i[e])||void 0===r?void 0:r.component),n)}}),{token:n,keys:t,flush:a}}},8030:function(e,t,n){var r=n(8985),o=n(1303),a=n(4750);t.Z=(e,t)=>{let[n,i]=(0,a.ZP)();return(0,r.xy)({theme:n,token:i,hashId:"",path:["ant-design-icons",e],nonce:()=>null==t?void 0:t.nonce},()=>[{[".".concat(e)]:Object.assign(Object.assign({},(0,o.Ro)()),{[".".concat(e," .").concat(e,"-icon")]:{display:"block"}})}])}},7907:function(e,t,n){var r=n(5313);n.o(r,"useSearchParams")&&n.d(t,{useSearchParams:function(){return r.useSearchParams}})},9079:function(e,t,n){var r,o;e.exports=(null==(r=n.g.process)?void 0:r.env)&&"object"==typeof(null==(o=n.g.process)?void 0:o.env)?n.g.process:n(3127)},2956:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"addLocale",{enumerable:!0,get:function(){return r}}),n(2139);let r=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r{})}}function y(e){return"string"==typeof e?e:(0,l.formatUrl)(e)}let x=a.default.forwardRef(function(e,t){let n,r;let{href:l,as:v,children:x,prefetch:w=null,passHref:E,replace:C,shallow:S,scroll:O,locale:Z,onClick:k,onMouseEnter:R,onTouchStart:M,legacyBehavior:j=!1,...P}=e;n=x,j&&("string"==typeof n||"number"==typeof n)&&(n=(0,o.jsx)("a",{children:n}));let N=a.default.useContext(d.RouterContext),I=a.default.useContext(f.AppRouterContext),T=null!=N?N:I,A=!N,F=!1!==w,z=null===w?h.PrefetchKind.AUTO:h.PrefetchKind.FULL,{href:L,as:_}=a.default.useMemo(()=>{if(!N){let e=y(l);return{href:e,as:v?y(v):e}}let[e,t]=(0,i.resolveHref)(N,l,!0);return{href:e,as:v?(0,i.resolveHref)(N,v):t||e}},[N,l,v]),B=a.default.useRef(L),H=a.default.useRef(_);j&&(r=a.default.Children.only(n));let D=j?r&&"object"==typeof r&&r.ref:t,[W,V,q]=(0,p.useIntersection)({rootMargin:"200px"}),X=a.default.useCallback(e=>{(H.current!==_||B.current!==L)&&(q(),H.current=_,B.current=L),W(e),D&&("function"==typeof D?D(e):"object"==typeof D&&(D.current=e))},[_,D,L,q,W]);a.default.useEffect(()=>{T&&V&&F&&b(T,L,_,{locale:Z},{kind:z},A)},[_,L,V,Z,F,null==N?void 0:N.locale,T,A,z]);let G={ref:X,onClick(e){j||"function"!=typeof k||k(e),j&&r.props&&"function"==typeof r.props.onClick&&r.props.onClick(e),T&&!e.defaultPrevented&&function(e,t,n,r,o,i,l,s,u){let{nodeName:d}=e.currentTarget;if("A"===d.toUpperCase()&&(function(e){let t=e.currentTarget.getAttribute("target");return t&&"_self"!==t||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.nativeEvent&&2===e.nativeEvent.which}(e)||!u&&!(0,c.isLocalURL)(n)))return;e.preventDefault();let f=()=>{let e=null==l||l;"beforePopState"in t?t[o?"replace":"push"](n,r,{shallow:i,locale:s,scroll:e}):t[o?"replace":"push"](r||n,{scroll:e})};u?a.default.startTransition(f):f()}(e,T,L,_,C,S,O,Z,A)},onMouseEnter(e){j||"function"!=typeof R||R(e),j&&r.props&&"function"==typeof r.props.onMouseEnter&&r.props.onMouseEnter(e),T&&(F||!A)&&b(T,L,_,{locale:Z,priority:!0,bypassPrefetchedCheck:!0},{kind:z},A)},onTouchStart(e){j||"function"!=typeof M||M(e),j&&r.props&&"function"==typeof r.props.onTouchStart&&r.props.onTouchStart(e),T&&(F||!A)&&b(T,L,_,{locale:Z,priority:!0,bypassPrefetchedCheck:!0},{kind:z},A)}};if((0,s.isAbsoluteUrl)(_))G.href=_;else if(!j||E||"a"===r.type&&!("href"in r.props)){let e=void 0!==Z?Z:null==N?void 0:N.locale,t=(null==N?void 0:N.isLocaleDomain)&&(0,m.getDomainLocale)(_,e,null==N?void 0:N.locales,null==N?void 0:N.domainLocales);G.href=t||(0,g.addBasePath)((0,u.addLocale)(_,e,null==N?void 0:N.defaultLocale))}return j?a.default.cloneElement(r,G):(0,o.jsx)("a",{...P,...G,children:n})});("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},2185:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{requestIdleCallback:function(){return n},cancelIdleCallback:function(){return r}});let n="undefined"!=typeof self&&self.requestIdleCallback&&self.requestIdleCallback.bind(window)||function(e){let t=Date.now();return self.setTimeout(function(){e({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})},1)},r="undefined"!=typeof self&&self.cancelIdleCallback&&self.cancelIdleCallback.bind(window)||function(e){return clearTimeout(e)};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},4542:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"resolveHref",{enumerable:!0,get:function(){return d}});let r=n(5770),o=n(1030),a=n(4544),i=n(6874),c=n(2139),l=n(7434),s=n(2360),u=n(6735);function d(e,t,n){let d;let f="string"==typeof t?t:(0,o.formatWithValidation)(t),p=f.match(/^[a-zA-Z]{1,}:\/\//),m=p?f.slice(p[0].length):f;if((m.split("?",1)[0]||"").match(/(\/\/|\\)/)){console.error("Invalid href '"+f+"' passed to next/router in page: '"+e.pathname+"'. Repeated forward-slashes (//) or backslashes \\ are not valid in the href.");let t=(0,i.normalizeRepeatedSlashes)(m);f=(p?p[0]:"")+t}if(!(0,l.isLocalURL)(f))return n?[f]:f;try{d=new URL(f.startsWith("#")?e.asPath:e.pathname,"http://n")}catch(e){d=new URL("/","http://n")}try{let e=new URL(f,d);e.pathname=(0,c.normalizePathTrailingSlash)(e.pathname);let t="";if((0,s.isDynamicRoute)(e.pathname)&&e.searchParams&&n){let n=(0,r.searchParamsToUrlQuery)(e.searchParams),{result:i,params:c}=(0,u.interpolateAs)(e.pathname,e.pathname,n);i&&(t=(0,o.formatWithValidation)({pathname:i,hash:e.hash,query:(0,a.omit)(n,c)}))}let i=e.origin===d.origin?e.href.slice(e.origin.length):e.href;return n?[i,t||i]:i}catch(e){return n?[f]:f}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},5291:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"useIntersection",{enumerable:!0,get:function(){return l}});let r=n(4090),o=n(2185),a="function"==typeof IntersectionObserver,i=new Map,c=[];function l(e){let{rootRef:t,rootMargin:n,disabled:l}=e,s=l||!a,[u,d]=(0,r.useState)(!1),f=(0,r.useRef)(null),p=(0,r.useCallback)(e=>{f.current=e},[]);return(0,r.useEffect)(()=>{if(a){if(s||u)return;let e=f.current;if(e&&e.tagName)return function(e,t,n){let{id:r,observer:o,elements:a}=function(e){let t;let n={root:e.root||null,margin:e.rootMargin||""},r=c.find(e=>e.root===n.root&&e.margin===n.margin);if(r&&(t=i.get(r)))return t;let o=new Map;return t={id:n,observer:new IntersectionObserver(e=>{e.forEach(e=>{let t=o.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)})},e),elements:o},c.push(n),i.set(n,t),t}(n);return a.set(e,t),o.observe(e),function(){if(a.delete(e),o.unobserve(e),0===a.size){o.disconnect(),i.delete(r);let e=c.findIndex(e=>e.root===r.root&&e.margin===r.margin);e>-1&&c.splice(e,1)}}}(e,e=>e&&d(e),{root:null==t?void 0:t.current,rootMargin:n})}else if(!u){let e=(0,o.requestIdleCallback)(()=>d(!0));return()=>(0,o.cancelIdleCallback)(e)}},[s,n,t,u,f.current]),[p,u,(0,r.useCallback)(()=>{d(!1)},[])]}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},3127:function(e){!function(){var t={229:function(e){var t,n,r,o=e.exports={};function a(){throw Error("setTimeout has not been defined")}function i(){throw Error("clearTimeout has not been defined")}function c(e){if(t===setTimeout)return setTimeout(e,0);if((t===a||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:a}catch(e){t=a}try{n="function"==typeof clearTimeout?clearTimeout:i}catch(e){n=i}}();var l=[],s=!1,u=-1;function d(){s&&r&&(s=!1,r.length?l=r.concat(l):u=-1,l.length&&f())}function f(){if(!s){var e=c(d);s=!0;for(var t=l.length;t;){for(r=l,l=[];++u1)for(var n=1;n{let t=l[e]||"",{repeat:n,optional:r}=c[e],o="["+(n?"...":"")+e+"]";return r&&(o=(t?"":"/")+"["+o+"]"),n&&!Array.isArray(t)&&(t=[t]),(r||e in l)&&(a=a.replace(o,n?t.map(e=>encodeURIComponent(e)).join("/"):encodeURIComponent(t))||"/")})||(a=""),{params:s,result:a}}},1305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isDynamicRoute",{enumerable:!0,get:function(){return a}});let r=n(4749),o=/\/\[[^/]+?\](?=\/|$)/;function a(e){return(0,r.isInterceptionRouteAppPath)(e)&&(e=(0,r.extractInterceptionRouteInformation)(e).interceptedRoute),o.test(e)}},7434:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"isLocalURL",{enumerable:!0,get:function(){return a}});let r=n(6874),o=n(7379);function a(e){if(!(0,r.isAbsoluteUrl)(e))return!0;try{let t=(0,r.getLocationOrigin)(),n=new URL(e,t);return n.origin===t&&(0,o.hasBasePath)(n.pathname)}catch(e){return!1}}},4544:function(e,t){function n(e,t){let n={};return Object.keys(e).forEach(r=>{t.includes(r)||(n[r]=e[r])}),n}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"omit",{enumerable:!0,get:function(){return n}})},5770:function(e,t){function n(e){let t={};return e.forEach((e,n)=>{void 0===t[n]?t[n]=e:Array.isArray(t[n])?t[n].push(e):t[n]=[t[n],e]}),t}function r(e){return"string"!=typeof e&&("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function o(e){let t=new URLSearchParams;return Object.entries(e).forEach(e=>{let[n,o]=e;Array.isArray(o)?o.forEach(e=>t.append(n,r(e))):t.set(n,r(o))}),t}function a(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r{Array.from(t.keys()).forEach(t=>e.delete(t)),t.forEach((t,n)=>e.append(n,t))}),e}Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{searchParamsToUrlQuery:function(){return n},urlQueryToSearchParams:function(){return o},assign:function(){return a}})},2395:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getRouteMatcher",{enumerable:!0,get:function(){return o}});let r=n(6874);function o(e){let{re:t,groups:n}=e;return e=>{let o=t.exec(e);if(!o)return!1;let a=e=>{try{return decodeURIComponent(e)}catch(e){throw new r.DecodeError("failed to decode param")}},i={};return Object.keys(n).forEach(e=>{let t=n[e],r=o[t.pos];void 0!==r&&(i[e]=~r.indexOf("/")?r.split("/").map(e=>a(e)):t.repeat?[a(r)]:a(r))}),i}}},9935:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{getRouteRegex:function(){return l},getNamedRouteRegex:function(){return d},getNamedMiddlewareRegex:function(){return f}});let r=n(4749),o=n(2202),a=n(5868);function i(e){let t=e.startsWith("[")&&e.endsWith("]");t&&(e=e.slice(1,-1));let n=e.startsWith("...");return n&&(e=e.slice(3)),{key:e,repeat:n,optional:t}}function c(e){let t=(0,a.removeTrailingSlash)(e).slice(1).split("/"),n={},c=1;return{parameterizedRoute:t.map(e=>{let t=r.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t)),a=e.match(/\[((?:\[.*\])|.+)\]/);if(t&&a){let{key:e,optional:r,repeat:l}=i(a[1]);return n[e]={pos:c++,repeat:l,optional:r},"/"+(0,o.escapeStringRegexp)(t)+"([^/]+?)"}if(!a)return"/"+(0,o.escapeStringRegexp)(e);{let{key:e,repeat:t,optional:r}=i(a[1]);return n[e]={pos:c++,repeat:t,optional:r},t?r?"(?:/(.+?))?":"/(.+?)":"/([^/]+?)"}}).join(""),groups:n}}function l(e){let{parameterizedRoute:t,groups:n}=c(e);return{re:RegExp("^"+t+"(?:/)?$"),groups:n}}function s(e){let{interceptionMarker:t,getSafeRouteKey:n,segment:r,routeKeys:a,keyPrefix:c}=e,{key:l,optional:s,repeat:u}=i(r),d=l.replace(/\W/g,"");c&&(d=""+c+d);let f=!1;(0===d.length||d.length>30)&&(f=!0),isNaN(parseInt(d.slice(0,1)))||(f=!0),f&&(d=n()),c?a[d]=""+c+l:a[d]=l;let p=t?(0,o.escapeStringRegexp)(t):"";return u?s?"(?:/"+p+"(?<"+d+">.+?))?":"/"+p+"(?<"+d+">.+?)":"/"+p+"(?<"+d+">[^/]+?)"}function u(e,t){let n;let i=(0,a.removeTrailingSlash)(e).slice(1).split("/"),c=(n=0,()=>{let e="",t=++n;for(;t>0;)e+=String.fromCharCode(97+(t-1)%26),t=Math.floor((t-1)/26);return e}),l={};return{namedParameterizedRoute:i.map(e=>{let n=r.INTERCEPTION_ROUTE_MARKERS.some(t=>e.startsWith(t)),a=e.match(/\[((?:\[.*\])|.+)\]/);if(n&&a){let[n]=e.split(a[0]);return s({getSafeRouteKey:c,interceptionMarker:n,segment:a[1],routeKeys:l,keyPrefix:t?"nxtI":void 0})}return a?s({getSafeRouteKey:c,segment:a[1],routeKeys:l,keyPrefix:t?"nxtP":void 0}):"/"+(0,o.escapeStringRegexp)(e)}).join(""),routeKeys:l}}function d(e,t){let n=u(e,t);return{...l(e),namedRegex:"^"+n.namedParameterizedRoute+"(?:/)?$",routeKeys:n.routeKeys}}function f(e,t){let{parameterizedRoute:n}=c(e),{catchAll:r=!0}=t;if("/"===n)return{namedRegex:"^/"+(r?".*":"")+"$"};let{namedParameterizedRoute:o}=u(e,!1);return{namedRegex:"^"+o+(r?"(?:(/.*)?)":"")+"$"}}},7409:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"getSortedRoutes",{enumerable:!0,get:function(){return r}});class n{insert(e){this._insert(e.split("/").filter(Boolean),[],!1)}smoosh(){return this._smoosh()}_smoosh(e){void 0===e&&(e="/");let t=[...this.children.keys()].sort();null!==this.slugName&&t.splice(t.indexOf("[]"),1),null!==this.restSlugName&&t.splice(t.indexOf("[...]"),1),null!==this.optionalRestSlugName&&t.splice(t.indexOf("[[...]]"),1);let n=t.map(t=>this.children.get(t)._smoosh(""+e+t+"/")).reduce((e,t)=>[...e,...t],[]);if(null!==this.slugName&&n.push(...this.children.get("[]")._smoosh(e+"["+this.slugName+"]/")),!this.placeholder){let t="/"===e?"/":e.slice(0,-1);if(null!=this.optionalRestSlugName)throw Error('You cannot define a route with the same specificity as a optional catch-all route ("'+t+'" and "'+t+"[[..."+this.optionalRestSlugName+']]").');n.unshift(t)}return null!==this.restSlugName&&n.push(...this.children.get("[...]")._smoosh(e+"[..."+this.restSlugName+"]/")),null!==this.optionalRestSlugName&&n.push(...this.children.get("[[...]]")._smoosh(e+"[[..."+this.optionalRestSlugName+"]]/")),n}_insert(e,t,r){if(0===e.length){this.placeholder=!1;return}if(r)throw Error("Catch-all must be the last part of the URL.");let o=e[0];if(o.startsWith("[")&&o.endsWith("]")){let n=o.slice(1,-1),i=!1;if(n.startsWith("[")&&n.endsWith("]")&&(n=n.slice(1,-1),i=!0),n.startsWith("...")&&(n=n.substring(3),r=!0),n.startsWith("[")||n.endsWith("]"))throw Error("Segment names may not start or end with extra brackets ('"+n+"').");if(n.startsWith("."))throw Error("Segment names may not start with erroneous periods ('"+n+"').");function a(e,n){if(null!==e&&e!==n)throw Error("You cannot use different slug names for the same dynamic path ('"+e+"' !== '"+n+"').");t.forEach(e=>{if(e===n)throw Error('You cannot have the same slug name "'+n+'" repeat within a single dynamic path');if(e.replace(/\W/g,"")===o.replace(/\W/g,""))throw Error('You cannot have the slug names "'+e+'" and "'+n+'" differ only by non-word symbols within a single dynamic path')}),t.push(n)}if(r){if(i){if(null!=this.restSlugName)throw Error('You cannot use both an required and optional catch-all route at the same level ("[...'+this.restSlugName+']" and "'+e[0]+'" ).');a(this.optionalRestSlugName,n),this.optionalRestSlugName=n,o="[[...]]"}else{if(null!=this.optionalRestSlugName)throw Error('You cannot use both an optional and required catch-all route at the same level ("[[...'+this.optionalRestSlugName+']]" and "'+e[0]+'").');a(this.restSlugName,n),this.restSlugName=n,o="[...]"}}else{if(i)throw Error('Optional route parameters are not yet supported ("'+e[0]+'").');a(this.slugName,n),this.slugName=n,o="[]"}}this.children.has(o)||this.children.set(o,new n),this.children.get(o)._insert(e.slice(1),t,r)}constructor(){this.placeholder=!0,this.children=new Map,this.slugName=null,this.restSlugName=null,this.optionalRestSlugName=null}}function r(e){let t=new n;return e.forEach(e=>t.insert(e)),t.smoosh()}},6874:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(t,{WEB_VITALS:function(){return n},execOnce:function(){return r},isAbsoluteUrl:function(){return a},getLocationOrigin:function(){return i},getURL:function(){return c},getDisplayName:function(){return l},isResSent:function(){return s},normalizeRepeatedSlashes:function(){return u},loadGetInitialProps:function(){return d},SP:function(){return f},ST:function(){return p},DecodeError:function(){return m},NormalizeError:function(){return g},PageNotFoundError:function(){return h},MissingStaticPage:function(){return v},MiddlewareNotFoundError:function(){return b},stringifyError:function(){return y}});let n=["CLS","FCP","FID","INP","LCP","TTFB"];function r(e){let t,n=!1;return function(){for(var r=arguments.length,o=Array(r),a=0;ao.test(e);function i(){let{protocol:e,hostname:t,port:n}=window.location;return e+"//"+t+(n?":"+n:"")}function c(){let{href:e}=window.location,t=i();return e.substring(t.length)}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function s(e){return e.finished||e.headersSent}function u(e){let t=e.split("?");return t[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(t[1]?"?"+t.slice(1).join("?"):"")}async function d(e,t){let n=t.res||t.ctx&&t.ctx.res;if(!e.getInitialProps)return t.ctx&&t.Component?{pageProps:await d(t.Component,t.ctx)}:{};let r=await e.getInitialProps(t);if(n&&s(n))return r;if(!r)throw Error('"'+l(e)+'.getInitialProps()" should resolve to an object. But found "'+r+'" instead.');return r}let f="undefined"!=typeof performance,p=f&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class m extends Error{}class g extends Error{}class h extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message="Cannot find module for page: "+e}}class v extends Error{constructor(e,t){super(),this.message="Failed to load static file for page: "+e+" "+t}}class b extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function y(e){return JSON.stringify({message:e.message,stack:e.stack})}},6570:function(e,t,n){n.d(t,{gN:function(){return eh},zb:function(){return E},RV:function(){return eZ},aV:function(){return ev},ZM:function(){return C},ZP:function(){return eN},cI:function(){return eS},qo:function(){return ej}});var r,o=n(4090),a=n(2110),i=n(6787),c=n(6926),l=n(4902),s=n(5239),u=n(3787),d=n(7365),f=n(5127),p=n(4951),m=n(7478),g=n(5430),h=n(833),v=n(3054),b=n(2536),y=n(3850),x="RC_FORM_INTERNAL_HOOKS",w=function(){(0,y.ZP)(!1,"Can not find FormContext. Please make sure you wrap Field under Form.")},E=o.createContext({getFieldValue:w,getFieldsValue:w,getFieldError:w,getFieldWarning:w,getFieldsError:w,isFieldsTouched:w,isFieldTouched:w,isFieldValidating:w,isFieldsValidating:w,resetFields:w,setFields:w,setFieldValue:w,setFieldsValue:w,validateFields:w,submit:w,getInternalHooks:function(){return w(),{dispatch:w,initEntityValue:w,registerField:w,useSubscribe:w,setInitialValues:w,destroyForm:w,setCallbacks:w,registerWatch:w,getFields:w,setValidateMessages:w,setPreserve:w,getInitialValue:w}}}),C=o.createContext(null);function S(e){return null==e?[]:Array.isArray(e)?e:[e]}var O=n(9079);function Z(){return(Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t1?t-1:0),r=1;r=a)return e;switch(e){case"%s":return String(n[o++]);case"%d":return Number(n[o++]);case"%j":try{return JSON.stringify(n[o++])}catch(e){return"[Circular]"}break;default:return e}}):e}function T(e,t){return!!(null==e||"array"===t&&Array.isArray(e)&&!e.length)||("string"===t||"url"===t||"hex"===t||"email"===t||"date"===t||"pattern"===t)&&"string"==typeof e&&!e}function A(e,t,n){var r=0,o=e.length;!function a(i){if(i&&i.length){n(i);return}var c=r;r+=1,c()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},D={integer:function(e){return D.number(e)&&parseInt(e,10)===e},float:function(e){return D.number(e)&&!D.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return new RegExp(e),!0}catch(e){return!1}},date:function(e){return"function"==typeof e.getTime&&"function"==typeof e.getMonth&&"function"==typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"==typeof e},object:function(e){return"object"==typeof e&&!D.array(e)},method:function(e){return"function"==typeof e},email:function(e){return"string"==typeof e&&e.length<=320&&!!e.match(H.email)},url:function(e){return"string"==typeof e&&e.length<=2048&&!!e.match(B())},hex:function(e){return"string"==typeof e&&!!e.match(H.hex)}},W="enum",V={required:_,whitespace:function(e,t,n,r,o){(/^\s+$/.test(t)||""===t)&&r.push(I(o.messages.whitespace,e.fullField))},type:function(e,t,n,r,o){if(e.required&&void 0===t){_(e,t,n,r,o);return}var a=e.type;["integer","float","array","regexp","object","method","email","number","date","url","hex"].indexOf(a)>-1?D[a](t)||r.push(I(o.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(I(o.messages.types[a],e.fullField,e.type))},range:function(e,t,n,r,o){var a="number"==typeof e.len,i="number"==typeof e.min,c="number"==typeof e.max,l=t,s=null,u="number"==typeof t,d="string"==typeof t,f=Array.isArray(t);if(u?s="number":d?s="string":f&&(s="array"),!s)return!1;f&&(l=t.length),d&&(l=t.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"_").length),a?l!==e.len&&r.push(I(o.messages[s].len,e.fullField,e.len)):i&&!c&&le.max?r.push(I(o.messages[s].max,e.fullField,e.max)):i&&c&&(le.max)&&r.push(I(o.messages[s].range,e.fullField,e.min,e.max))},enum:function(e,t,n,r,o){e[W]=Array.isArray(e[W])?e[W]:[],-1===e[W].indexOf(t)&&r.push(I(o.messages[W],e.fullField,e[W].join(", ")))},pattern:function(e,t,n,r,o){!e.pattern||(e.pattern instanceof RegExp?(e.pattern.lastIndex=0,e.pattern.test(t)||r.push(I(o.messages.pattern.mismatch,e.fullField,t,e.pattern))):"string"!=typeof e.pattern||new RegExp(e.pattern).test(t)||r.push(I(o.messages.pattern.mismatch,e.fullField,t,e.pattern)))}},q=function(e,t,n,r,o){var a=e.type,i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,a)&&!e.required)return n();V.required(e,t,r,i,o,a),T(t,a)||V.type(e,t,r,i,o)}n(i)},X={string:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,"string")&&!e.required)return n();V.required(e,t,r,a,o,"string"),T(t,"string")||(V.type(e,t,r,a,o),V.range(e,t,r,a,o),V.pattern(e,t,r,a,o),!0===e.whitespace&&V.whitespace(e,t,r,a,o))}n(a)},method:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.type(e,t,r,a,o)}n(a)},number:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(""===t&&(t=void 0),T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},boolean:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.type(e,t,r,a,o)}n(a)},regexp:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),T(t)||V.type(e,t,r,a,o)}n(a)},integer:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},float:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},array:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(null==t&&!e.required)return n();V.required(e,t,r,a,o,"array"),null!=t&&(V.type(e,t,r,a,o),V.range(e,t,r,a,o))}n(a)},object:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.type(e,t,r,a,o)}n(a)},enum:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o),void 0!==t&&V.enum(e,t,r,a,o)}n(a)},pattern:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,"string")&&!e.required)return n();V.required(e,t,r,a,o),T(t,"string")||V.pattern(e,t,r,a,o)}n(a)},date:function(e,t,n,r,o){var a,i=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t,"date")&&!e.required)return n();V.required(e,t,r,i,o),!T(t,"date")&&(a=t instanceof Date?t:new Date(t),V.type(e,a,r,i,o),a&&V.range(e,a.getTime(),r,i,o))}n(i)},url:q,hex:q,email:q,required:function(e,t,n,r,o){var a=[],i=Array.isArray(t)?"array":typeof t;V.required(e,t,r,a,o,i),n(a)},any:function(e,t,n,r,o){var a=[];if(e.required||!e.required&&r.hasOwnProperty(e.field)){if(T(t)&&!e.required)return n();V.required(e,t,r,a,o)}n(a)}};function G(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var U=G(),K=function(){function e(e){this.rules=null,this._messages=U,this.define(e)}var t=e.prototype;return t.define=function(e){var t=this;if(!e)throw Error("Cannot configure a schema with no rules");if("object"!=typeof e||Array.isArray(e))throw Error("Rules must be an object");this.rules={},Object.keys(e).forEach(function(n){var r=e[n];t.rules[n]=Array.isArray(r)?r:[r]})},t.messages=function(e){return e&&(this._messages=L(G(),e)),this._messages},t.validate=function(t,n,r){var o=this;void 0===n&&(n={}),void 0===r&&(r=function(){});var a=t,i=n,c=r;if("function"==typeof i&&(c=i,i={}),!this.rules||0===Object.keys(this.rules).length)return c&&c(null,a),Promise.resolve(a);if(i.messages){var l=this.messages();l===U&&(l=G()),L(l,i.messages),i.messages=l}else i.messages=this.messages();var s={};(i.keys||Object.keys(this.rules)).forEach(function(e){var n=o.rules[e],r=a[e];n.forEach(function(n){var i=n;"function"==typeof i.transform&&(a===t&&(a=Z({},a)),r=a[e]=i.transform(r)),(i="function"==typeof i?{validator:i}:Z({},i)).validator=o.getValidationMethod(i),i.validator&&(i.field=e,i.fullField=i.fullField||e,i.type=o.getType(i),s[e]=s[e]||[],s[e].push({rule:i,value:r,source:a,field:e}))})});var u={};return function(e,t,n,r,o){if(t.first){var a=new Promise(function(t,a){var i;A((i=[],Object.keys(e).forEach(function(t){i.push.apply(i,e[t]||[])}),i),n,function(e){return r(e),e.length?a(new F(e,N(e))):t(o)})});return a.catch(function(e){return e}),a}var i=!0===t.firstFields?Object.keys(e):t.firstFields||[],c=Object.keys(e),l=c.length,s=0,u=[],d=new Promise(function(t,a){var d=function(e){if(u.push.apply(u,e),++s===l)return r(u),u.length?a(new F(u,N(u))):t(o)};c.length||(r(u),t(o)),c.forEach(function(t){var r=e[t];-1!==i.indexOf(t)?A(r,n,d):function(e,t,n){var r=[],o=0,a=e.length;function i(e){r.push.apply(r,e||[]),++o===a&&n(r)}e.forEach(function(e){t(e,i)})}(r,n,d)})});return d.catch(function(e){return e}),d}(s,i,function(t,n){var r,o=t.rule,c=("object"===o.type||"array"===o.type)&&("object"==typeof o.fields||"object"==typeof o.defaultField);function l(e,t){return Z({},t,{fullField:o.fullField+"."+e,fullFields:o.fullFields?[].concat(o.fullFields,[e]):[e]})}function s(r){void 0===r&&(r=[]);var s=Array.isArray(r)?r:[r];!i.suppressWarning&&s.length&&e.warning("async-validator:",s),s.length&&void 0!==o.message&&(s=[].concat(o.message));var d=s.map(z(o,a));if(i.first&&d.length)return u[o.field]=1,n(d);if(c){if(o.required&&!t.value)return void 0!==o.message?d=[].concat(o.message).map(z(o,a)):i.error&&(d=[i.error(o,I(i.messages.required,o.field))]),n(d);var f={};o.defaultField&&Object.keys(t.value).map(function(e){f[e]=o.defaultField});var p={};Object.keys(f=Z({},f,t.rule.fields)).forEach(function(e){var t=f[e],n=Array.isArray(t)?t:[t];p[e]=n.map(l.bind(null,e))});var m=new e(p);m.messages(i.messages),t.rule.options&&(t.rule.options.messages=i.messages,t.rule.options.error=i.error),m.validate(t.value,t.rule.options||i,function(e){var t=[];d&&d.length&&t.push.apply(t,d),e&&e.length&&t.push.apply(t,e),n(t.length?t:null)})}else n(d)}if(c=c&&(o.required||!o.required&&t.value),o.field=t.field,o.asyncValidator)r=o.asyncValidator(o,t.value,s,t.source,i);else if(o.validator){try{r=o.validator(o,t.value,s,t.source,i)}catch(e){null==console.error||console.error(e),i.suppressValidatorError||setTimeout(function(){throw e},0),s(e.message)}!0===r?s():!1===r?s("function"==typeof o.message?o.message(o.fullField||o.field):o.message||(o.fullField||o.field)+" fails"):r instanceof Array?s(r):r instanceof Error&&s(r.message)}r&&r.then&&r.then(function(){return s()},function(e){return s(e)})},function(e){!function(e){for(var t=[],n={},r=0;r2&&void 0!==arguments[2]&&arguments[2];return e&&e.some(function(e){return es(t,e,n)})}function es(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return!!e&&!!t&&(!!n||e.length===t.length)&&t.every(function(t,n){return e[n]===t})}function eu(e){var t=arguments.length<=1?void 0:arguments[1];return t&&t.target&&"object"===(0,eo.Z)(t.target)&&e in t.target?t.target[e]:t}function ed(e,t,n){var r=e.length;if(t<0||t>=r||n<0||n>=r)return e;var o=e[t],a=t-n;return a>0?[].concat((0,u.Z)(e.slice(0,n)),[o],(0,u.Z)(e.slice(n,t)),(0,u.Z)(e.slice(t+1,r))):a<0?[].concat((0,u.Z)(e.slice(0,t)),(0,u.Z)(e.slice(t+1,n+1)),[o],(0,u.Z)(e.slice(n+1,r))):e}var ef=["name"],ep=[];function em(e,t,n,r,o,a){return"function"==typeof e?e(t,n,"source"in a?{source:a.source}:{}):r!==o}var eg=function(e){(0,m.Z)(n,e);var t=(0,g.Z)(n);function n(e){var r;return(0,d.Z)(this,n),r=t.call(this,e),(0,h.Z)((0,p.Z)(r),"state",{resetCount:0}),(0,h.Z)((0,p.Z)(r),"cancelRegisterFunc",null),(0,h.Z)((0,p.Z)(r),"mounted",!1),(0,h.Z)((0,p.Z)(r),"touched",!1),(0,h.Z)((0,p.Z)(r),"dirty",!1),(0,h.Z)((0,p.Z)(r),"validatePromise",void 0),(0,h.Z)((0,p.Z)(r),"prevValidating",void 0),(0,h.Z)((0,p.Z)(r),"errors",ep),(0,h.Z)((0,p.Z)(r),"warnings",ep),(0,h.Z)((0,p.Z)(r),"cancelRegister",function(){var e=r.props,t=e.preserve,n=e.isListField,o=e.name;r.cancelRegisterFunc&&r.cancelRegisterFunc(n,t,ei(o)),r.cancelRegisterFunc=null}),(0,h.Z)((0,p.Z)(r),"getNamePath",function(){var e=r.props,t=e.name,n=e.fieldContext.prefixName;return void 0!==t?[].concat((0,u.Z)(void 0===n?[]:n),(0,u.Z)(t)):[]}),(0,h.Z)((0,p.Z)(r),"getRules",function(){var e=r.props,t=e.rules,n=e.fieldContext;return(void 0===t?[]:t).map(function(e){return"function"==typeof e?e(n):e})}),(0,h.Z)((0,p.Z)(r),"refresh",function(){r.mounted&&r.setState(function(e){return{resetCount:e.resetCount+1}})}),(0,h.Z)((0,p.Z)(r),"metaCache",null),(0,h.Z)((0,p.Z)(r),"triggerMetaEvent",function(e){var t=r.props.onMetaChange;if(t){var n=(0,s.Z)((0,s.Z)({},r.getMeta()),{},{destroy:e});(0,b.Z)(r.metaCache,n)||t(n),r.metaCache=n}else r.metaCache=null}),(0,h.Z)((0,p.Z)(r),"onStoreChange",function(e,t,n){var o=r.props,a=o.shouldUpdate,i=o.dependencies,c=void 0===i?[]:i,l=o.onReset,s=n.store,u=r.getNamePath(),d=r.getValue(e),f=r.getValue(s),p=t&&el(t,u);switch("valueUpdate"===n.type&&"external"===n.source&&d!==f&&(r.touched=!0,r.dirty=!0,r.validatePromise=null,r.errors=ep,r.warnings=ep,r.triggerMetaEvent()),n.type){case"reset":if(!t||p){r.touched=!1,r.dirty=!1,r.validatePromise=void 0,r.errors=ep,r.warnings=ep,r.triggerMetaEvent(),null==l||l(),r.refresh();return}break;case"remove":if(a){r.reRender();return}break;case"setField":var m=n.data;if(p){"touched"in m&&(r.touched=m.touched),"validating"in m&&!("originRCField"in m)&&(r.validatePromise=m.validating?Promise.resolve([]):null),"errors"in m&&(r.errors=m.errors||ep),"warnings"in m&&(r.warnings=m.warnings||ep),r.dirty=!0,r.triggerMetaEvent(),r.reRender();return}if("value"in m&&el(t,u,!0)||a&&!u.length&&em(a,e,s,d,f,n)){r.reRender();return}break;case"dependenciesUpdate":if(c.map(ei).some(function(e){return el(n.relatedFields,e)})){r.reRender();return}break;default:if(p||(!c.length||u.length||a)&&em(a,e,s,d,f,n)){r.reRender();return}}!0===a&&r.reRender()}),(0,h.Z)((0,p.Z)(r),"validateRules",function(e){var t=r.getNamePath(),n=r.getValue(),o=e||{},a=o.triggerName,i=o.validateOnly,d=Promise.resolve().then((0,l.Z)((0,c.Z)().mark(function o(){var i,f,p,m,g,h,v;return(0,c.Z)().wrap(function(o){for(;;)switch(o.prev=o.next){case 0:if(r.mounted){o.next=2;break}return o.abrupt("return",[]);case 2:if(p=void 0!==(f=(i=r.props).validateFirst)&&f,m=i.messageVariables,g=i.validateDebounce,h=r.getRules(),a&&(h=h.filter(function(e){return e}).filter(function(e){var t=e.validateTrigger;return!t||S(t).includes(a)})),!(g&&a)){o.next=10;break}return o.next=8,new Promise(function(e){setTimeout(e,g)});case 8:if(!(r.validatePromise!==d)){o.next=10;break}return o.abrupt("return",[]);case 10:return(v=function(e,t,n,r,o,a){var i,u,d=e.join("."),f=n.map(function(e,t){var n=e.validator,r=(0,s.Z)((0,s.Z)({},e),{},{ruleIndex:t});return n&&(r.validator=function(e,t,r){var o=!1,a=n(e,t,function(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:ep;if(r.validatePromise===d){r.validatePromise=null;var t,n=[],o=[];null===(t=e.forEach)||void 0===t||t.call(e,function(e){var t=e.rule.warningOnly,r=e.errors,a=void 0===r?ep:r;t?o.push.apply(o,(0,u.Z)(a)):n.push.apply(n,(0,u.Z)(a))}),r.errors=n,r.warnings=o,r.triggerMetaEvent(),r.reRender()}}),o.abrupt("return",v);case 13:case"end":return o.stop()}},o)})));return void 0!==i&&i||(r.validatePromise=d,r.dirty=!0,r.errors=ep,r.warnings=ep,r.triggerMetaEvent(),r.reRender()),d}),(0,h.Z)((0,p.Z)(r),"isFieldValidating",function(){return!!r.validatePromise}),(0,h.Z)((0,p.Z)(r),"isFieldTouched",function(){return r.touched}),(0,h.Z)((0,p.Z)(r),"isFieldDirty",function(){return!!r.dirty||void 0!==r.props.initialValue||void 0!==(0,r.props.fieldContext.getInternalHooks(x).getInitialValue)(r.getNamePath())}),(0,h.Z)((0,p.Z)(r),"getErrors",function(){return r.errors}),(0,h.Z)((0,p.Z)(r),"getWarnings",function(){return r.warnings}),(0,h.Z)((0,p.Z)(r),"isListField",function(){return r.props.isListField}),(0,h.Z)((0,p.Z)(r),"isList",function(){return r.props.isList}),(0,h.Z)((0,p.Z)(r),"isPreserve",function(){return r.props.preserve}),(0,h.Z)((0,p.Z)(r),"getMeta",function(){return r.prevValidating=r.isFieldValidating(),{touched:r.isFieldTouched(),validating:r.prevValidating,errors:r.errors,warnings:r.warnings,name:r.getNamePath(),validated:null===r.validatePromise}}),(0,h.Z)((0,p.Z)(r),"getOnlyChild",function(e){if("function"==typeof e){var t=r.getMeta();return(0,s.Z)((0,s.Z)({},r.getOnlyChild(e(r.getControlled(),t,r.props.fieldContext))),{},{isFunction:!0})}var n=(0,v.Z)(e);return 1===n.length&&o.isValidElement(n[0])?{child:n[0],isFunction:!1}:{child:n,isFunction:!1}}),(0,h.Z)((0,p.Z)(r),"getValue",function(e){var t=r.props.fieldContext.getFieldsValue,n=r.getNamePath();return(0,ea.Z)(e||t(!0),n)}),(0,h.Z)((0,p.Z)(r),"getControlled",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=r.props,n=t.trigger,o=t.validateTrigger,a=t.getValueFromEvent,i=t.normalize,c=t.valuePropName,l=t.getValueProps,u=t.fieldContext,d=void 0!==o?o:u.validateTrigger,f=r.getNamePath(),p=u.getInternalHooks,m=u.getFieldsValue,g=p(x).dispatch,v=r.getValue(),b=l||function(e){return(0,h.Z)({},c,e)},y=e[n],w=(0,s.Z)((0,s.Z)({},e),b(v));return w[n]=function(){r.touched=!0,r.dirty=!0,r.triggerMetaEvent();for(var e,t=arguments.length,n=Array(t),o=0;o=0&&t<=n.length?(f.keys=[].concat((0,u.Z)(f.keys.slice(0,t)),[f.id],(0,u.Z)(f.keys.slice(t))),o([].concat((0,u.Z)(n.slice(0,t)),[e],(0,u.Z)(n.slice(t))))):(f.keys=[].concat((0,u.Z)(f.keys),[f.id]),o([].concat((0,u.Z)(n),[e]))),f.id+=1},remove:function(e){var t=i(),n=new Set(Array.isArray(e)?e:[e]);n.size<=0||(f.keys=f.keys.filter(function(e,t){return!n.has(t)}),o(t.filter(function(e,t){return!n.has(t)})))},move:function(e,t){if(e!==t){var n=i();e<0||e>=n.length||t<0||t>=n.length||(f.keys=ed(f.keys,e,t),o(ed(n,e,t)))}}},t)})))},eb=n(406),ey="__@field_split__";function ex(e){return e.map(function(e){return"".concat((0,eo.Z)(e),":").concat(e)}).join(ey)}var ew=function(){function e(){(0,d.Z)(this,e),(0,h.Z)(this,"kvs",new Map)}return(0,f.Z)(e,[{key:"set",value:function(e,t){this.kvs.set(ex(e),t)}},{key:"get",value:function(e){return this.kvs.get(ex(e))}},{key:"update",value:function(e,t){var n=t(this.get(e));n?this.set(e,n):this.delete(e)}},{key:"delete",value:function(e){this.kvs.delete(ex(e))}},{key:"map",value:function(e){return(0,u.Z)(this.kvs.entries()).map(function(t){var n=(0,eb.Z)(t,2),r=n[0],o=n[1];return e({key:r.split(ey).map(function(e){var t=e.match(/^([^:]*):(.*)$/),n=(0,eb.Z)(t,3),r=n[1],o=n[2];return"number"===r?Number(o):o}),value:o})})}},{key:"toJSON",value:function(){var e={};return this.map(function(t){var n=t.key,r=t.value;return e[n.join(".")]=r,null}),e}}]),e}(),eE=["name"],eC=(0,f.Z)(function e(t){var n=this;(0,d.Z)(this,e),(0,h.Z)(this,"formHooked",!1),(0,h.Z)(this,"forceRootUpdate",void 0),(0,h.Z)(this,"subscribable",!0),(0,h.Z)(this,"store",{}),(0,h.Z)(this,"fieldEntities",[]),(0,h.Z)(this,"initialValues",{}),(0,h.Z)(this,"callbacks",{}),(0,h.Z)(this,"validateMessages",null),(0,h.Z)(this,"preserve",null),(0,h.Z)(this,"lastValidatePromise",null),(0,h.Z)(this,"getForm",function(){return{getFieldValue:n.getFieldValue,getFieldsValue:n.getFieldsValue,getFieldError:n.getFieldError,getFieldWarning:n.getFieldWarning,getFieldsError:n.getFieldsError,isFieldsTouched:n.isFieldsTouched,isFieldTouched:n.isFieldTouched,isFieldValidating:n.isFieldValidating,isFieldsValidating:n.isFieldsValidating,resetFields:n.resetFields,setFields:n.setFields,setFieldValue:n.setFieldValue,setFieldsValue:n.setFieldsValue,validateFields:n.validateFields,submit:n.submit,_init:!0,getInternalHooks:n.getInternalHooks}}),(0,h.Z)(this,"getInternalHooks",function(e){return e===x?(n.formHooked=!0,{dispatch:n.dispatch,initEntityValue:n.initEntityValue,registerField:n.registerField,useSubscribe:n.useSubscribe,setInitialValues:n.setInitialValues,destroyForm:n.destroyForm,setCallbacks:n.setCallbacks,setValidateMessages:n.setValidateMessages,getFields:n.getFields,setPreserve:n.setPreserve,getInitialValue:n.getInitialValue,registerWatch:n.registerWatch}):((0,y.ZP)(!1,"`getInternalHooks` is internal usage. Should not call directly."),null)}),(0,h.Z)(this,"useSubscribe",function(e){n.subscribable=e}),(0,h.Z)(this,"prevWithoutPreserves",null),(0,h.Z)(this,"setInitialValues",function(e,t){if(n.initialValues=e||{},t){var r,o=(0,Q.T)(e,n.store);null===(r=n.prevWithoutPreserves)||void 0===r||r.map(function(t){var n=t.key;o=(0,Q.Z)(o,n,(0,ea.Z)(e,n))}),n.prevWithoutPreserves=null,n.updateStore(o)}}),(0,h.Z)(this,"destroyForm",function(){var e=new ew;n.getFieldEntities(!0).forEach(function(t){n.isMergedPreserve(t.isPreserve())||e.set(t.getNamePath(),!0)}),n.prevWithoutPreserves=e}),(0,h.Z)(this,"getInitialValue",function(e){var t=(0,ea.Z)(n.initialValues,e);return e.length?(0,Q.T)(t):t}),(0,h.Z)(this,"setCallbacks",function(e){n.callbacks=e}),(0,h.Z)(this,"setValidateMessages",function(e){n.validateMessages=e}),(0,h.Z)(this,"setPreserve",function(e){n.preserve=e}),(0,h.Z)(this,"watchList",[]),(0,h.Z)(this,"registerWatch",function(e){return n.watchList.push(e),function(){n.watchList=n.watchList.filter(function(t){return t!==e})}}),(0,h.Z)(this,"notifyWatch",function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(n.watchList.length){var t=n.getFieldsValue(),r=n.getFieldsValue(!0);n.watchList.forEach(function(n){n(t,r,e)})}}),(0,h.Z)(this,"timeoutId",null),(0,h.Z)(this,"warningUnhooked",function(){}),(0,h.Z)(this,"updateStore",function(e){n.store=e}),(0,h.Z)(this,"getFieldEntities",function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return e?n.fieldEntities.filter(function(e){return e.getNamePath().length}):n.fieldEntities}),(0,h.Z)(this,"getFieldsMap",function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=new ew;return n.getFieldEntities(e).forEach(function(e){var n=e.getNamePath();t.set(n,e)}),t}),(0,h.Z)(this,"getFieldEntitiesForNamePathList",function(e){if(!e)return n.getFieldEntities(!0);var t=n.getFieldsMap(!0);return e.map(function(e){var n=ei(e);return t.get(n)||{INVALIDATE_NAME_PATH:ei(e)}})}),(0,h.Z)(this,"getFieldsValue",function(e,t){if(n.warningUnhooked(),!0===e||Array.isArray(e)?(r=e,o=t):e&&"object"===(0,eo.Z)(e)&&(a=e.strict,o=e.filter),!0===r&&!o)return n.store;var r,o,a,i=n.getFieldEntitiesForNamePathList(Array.isArray(r)?r:null),c=[];return i.forEach(function(e){var t,n,i,l="INVALIDATE_NAME_PATH"in e?e.INVALIDATE_NAME_PATH:e.getNamePath();if(a){if(null!==(i=e.isList)&&void 0!==i&&i.call(e))return}else if(!r&&null!==(t=(n=e).isListField)&&void 0!==t&&t.call(n))return;if(o){var s="getMeta"in e?e.getMeta():null;o(s)&&c.push(l)}else c.push(l)}),ec(n.store,c.map(ei))}),(0,h.Z)(this,"getFieldValue",function(e){n.warningUnhooked();var t=ei(e);return(0,ea.Z)(n.store,t)}),(0,h.Z)(this,"getFieldsError",function(e){return n.warningUnhooked(),n.getFieldEntitiesForNamePathList(e).map(function(t,n){return!t||"INVALIDATE_NAME_PATH"in t?{name:ei(e[n]),errors:[],warnings:[]}:{name:t.getNamePath(),errors:t.getErrors(),warnings:t.getWarnings()}})}),(0,h.Z)(this,"getFieldError",function(e){n.warningUnhooked();var t=ei(e);return n.getFieldsError([t])[0].errors}),(0,h.Z)(this,"getFieldWarning",function(e){n.warningUnhooked();var t=ei(e);return n.getFieldsError([t])[0].warnings}),(0,h.Z)(this,"isFieldsTouched",function(){n.warningUnhooked();for(var e,t=arguments.length,r=Array(t),o=0;o0&&void 0!==arguments[0]?arguments[0]:{},r=new ew,o=n.getFieldEntities(!0);o.forEach(function(e){var t=e.props.initialValue,n=e.getNamePath();if(void 0!==t){var o=r.get(n)||new Set;o.add({entity:e,value:t}),r.set(n,o)}}),t.entities?e=t.entities:t.namePathList?(e=[],t.namePathList.forEach(function(t){var n,o=r.get(t);o&&(n=e).push.apply(n,(0,u.Z)((0,u.Z)(o).map(function(e){return e.entity})))})):e=o,function(e){e.forEach(function(e){if(void 0!==e.props.initialValue){var o=e.getNamePath();if(void 0!==n.getInitialValue(o))(0,y.ZP)(!1,"Form already set 'initialValues' with path '".concat(o.join("."),"'. Field can not overwrite it."));else{var a=r.get(o);if(a&&a.size>1)(0,y.ZP)(!1,"Multiple Field with path '".concat(o.join("."),"' set 'initialValue'. Can not decide which one to pick."));else if(a){var i=n.getFieldValue(o);e.isListField()||t.skipExist&&void 0!==i||n.updateStore((0,Q.Z)(n.store,o,(0,u.Z)(a)[0].value))}}}})}(e)}),(0,h.Z)(this,"resetFields",function(e){n.warningUnhooked();var t=n.store;if(!e){n.updateStore((0,Q.T)(n.initialValues)),n.resetWithFieldInitialValue(),n.notifyObservers(t,null,{type:"reset"}),n.notifyWatch();return}var r=e.map(ei);r.forEach(function(e){var t=n.getInitialValue(e);n.updateStore((0,Q.Z)(n.store,e,t))}),n.resetWithFieldInitialValue({namePathList:r}),n.notifyObservers(t,r,{type:"reset"}),n.notifyWatch(r)}),(0,h.Z)(this,"setFields",function(e){n.warningUnhooked();var t=n.store,r=[];e.forEach(function(e){var o=e.name,a=(0,i.Z)(e,eE),c=ei(o);r.push(c),"value"in a&&n.updateStore((0,Q.Z)(n.store,c,a.value)),n.notifyObservers(t,[c],{type:"setField",data:e})}),n.notifyWatch(r)}),(0,h.Z)(this,"getFields",function(){return n.getFieldEntities(!0).map(function(e){var t=e.getNamePath(),r=e.getMeta(),o=(0,s.Z)((0,s.Z)({},r),{},{name:t,value:n.getFieldValue(t)});return Object.defineProperty(o,"originRCField",{value:!0}),o})}),(0,h.Z)(this,"initEntityValue",function(e){var t=e.props.initialValue;if(void 0!==t){var r=e.getNamePath();void 0===(0,ea.Z)(n.store,r)&&n.updateStore((0,Q.Z)(n.store,r,t))}}),(0,h.Z)(this,"isMergedPreserve",function(e){var t=void 0!==e?e:n.preserve;return null==t||t}),(0,h.Z)(this,"registerField",function(e){n.fieldEntities.push(e);var t=e.getNamePath();if(n.notifyWatch([t]),void 0!==e.props.initialValue){var r=n.store;n.resetWithFieldInitialValue({entities:[e],skipExist:!0}),n.notifyObservers(r,[e.getNamePath()],{type:"valueUpdate",source:"internal"})}return function(r,o){var a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];if(n.fieldEntities=n.fieldEntities.filter(function(t){return t!==e}),!n.isMergedPreserve(o)&&(!r||a.length>1)){var i=r?void 0:n.getInitialValue(t);if(t.length&&n.getFieldValue(t)!==i&&n.fieldEntities.every(function(e){return!es(e.getNamePath(),t)})){var c=n.store;n.updateStore((0,Q.Z)(c,t,i,!0)),n.notifyObservers(c,[t],{type:"remove"}),n.triggerDependenciesUpdate(c,t)}}n.notifyWatch([t])}}),(0,h.Z)(this,"dispatch",function(e){switch(e.type){case"updateValue":var t=e.namePath,r=e.value;n.updateValue(t,r);break;case"validateField":var o=e.namePath,a=e.triggerName;n.validateFields([o],{triggerName:a})}}),(0,h.Z)(this,"notifyObservers",function(e,t,r){if(n.subscribable){var o=(0,s.Z)((0,s.Z)({},r),{},{store:n.getFieldsValue(!0)});n.getFieldEntities().forEach(function(n){(0,n.onStoreChange)(e,t,o)})}else n.forceRootUpdate()}),(0,h.Z)(this,"triggerDependenciesUpdate",function(e,t){var r=n.getDependencyChildrenFields(t);return r.length&&n.validateFields(r),n.notifyObservers(e,r,{type:"dependenciesUpdate",relatedFields:[t].concat((0,u.Z)(r))}),r}),(0,h.Z)(this,"updateValue",function(e,t){var r=ei(e),o=n.store;n.updateStore((0,Q.Z)(n.store,r,t)),n.notifyObservers(o,[r],{type:"valueUpdate",source:"internal"}),n.notifyWatch([r]);var a=n.triggerDependenciesUpdate(o,r),i=n.callbacks.onValuesChange;i&&i(ec(n.store,[r]),n.getFieldsValue()),n.triggerOnFieldsChange([r].concat((0,u.Z)(a)))}),(0,h.Z)(this,"setFieldsValue",function(e){n.warningUnhooked();var t=n.store;if(e){var r=(0,Q.T)(n.store,e);n.updateStore(r)}n.notifyObservers(t,null,{type:"valueUpdate",source:"external"}),n.notifyWatch()}),(0,h.Z)(this,"setFieldValue",function(e,t){n.setFields([{name:e,value:t}])}),(0,h.Z)(this,"getDependencyChildrenFields",function(e){var t=new Set,r=[],o=new ew;return n.getFieldEntities().forEach(function(e){(e.props.dependencies||[]).forEach(function(t){var n=ei(t);o.update(n,function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Set;return t.add(e),t})})}),function e(n){(o.get(n)||new Set).forEach(function(n){if(!t.has(n)){t.add(n);var o=n.getNamePath();n.isFieldDirty()&&o.length&&(r.push(o),e(o))}})}(e),r}),(0,h.Z)(this,"triggerOnFieldsChange",function(e,t){var r=n.callbacks.onFieldsChange;if(r){var o=n.getFields();if(t){var a=new ew;t.forEach(function(e){var t=e.name,n=e.errors;a.set(t,n)}),o.forEach(function(e){e.errors=a.get(e.name)||e.errors})}var i=o.filter(function(t){return el(e,t.name)});i.length&&r(i,o)}}),(0,h.Z)(this,"validateFields",function(e,t){n.warningUnhooked(),Array.isArray(e)||"string"==typeof e||"string"==typeof t?(i=e,c=t):c=e;var r,o,a,i,c,l=!!i,d=l?i.map(ei):[],f=[],p=String(Date.now()),m=new Set,g=c||{},h=g.recursive,v=g.dirty;n.getFieldEntities(!0).forEach(function(e){if(l||d.push(e.getNamePath()),e.props.rules&&e.props.rules.length&&(!v||e.isFieldDirty())){var t=e.getNamePath();if(m.add(t.join(p)),!l||el(d,t,h)){var r=e.validateRules((0,s.Z)({validateMessages:(0,s.Z)((0,s.Z)({},Y),n.validateMessages)},c));f.push(r.then(function(){return{name:t,errors:[],warnings:[]}}).catch(function(e){var n,r=[],o=[];return(null===(n=e.forEach)||void 0===n||n.call(e,function(e){var t=e.rule.warningOnly,n=e.errors;t?o.push.apply(o,(0,u.Z)(n)):r.push.apply(r,(0,u.Z)(n))}),r.length)?Promise.reject({name:t,errors:r,warnings:o}):{name:t,errors:r,warnings:o}}))}}});var b=(r=!1,o=f.length,a=[],f.length?new Promise(function(e,t){f.forEach(function(n,i){n.catch(function(e){return r=!0,e}).then(function(n){o-=1,a[i]=n,o>0||(r&&t(a),e(a))})})}):Promise.resolve([]));n.lastValidatePromise=b,b.catch(function(e){return e}).then(function(e){var t=e.map(function(e){return e.name});n.notifyObservers(n.store,t,{type:"validateFinish"}),n.triggerOnFieldsChange(t,e)});var y=b.then(function(){return n.lastValidatePromise===b?Promise.resolve(n.getFieldsValue(d)):Promise.reject([])}).catch(function(e){var t=e.filter(function(e){return e&&e.errors.length});return Promise.reject({values:n.getFieldsValue(d),errorFields:t,outOfDate:n.lastValidatePromise!==b})});y.catch(function(e){return e});var x=d.filter(function(e){return m.has(e.join(p))});return n.triggerOnFieldsChange(x),y}),(0,h.Z)(this,"submit",function(){n.warningUnhooked(),n.validateFields().then(function(e){var t=n.callbacks.onFinish;if(t)try{t(e)}catch(e){console.error(e)}}).catch(function(e){var t=n.callbacks.onFinishFailed;t&&t(e)})}),this.forceRootUpdate=t}),eS=function(e){var t=o.useRef(),n=o.useState({}),r=(0,eb.Z)(n,2)[1];if(!t.current){if(e)t.current=e;else{var a=new eC(function(){r({})});t.current=a.getForm()}}return[t.current]},eO=o.createContext({triggerFormChange:function(){},triggerFormFinish:function(){},registerForm:function(){},unregisterForm:function(){}}),eZ=function(e){var t=e.validateMessages,n=e.onFormChange,r=e.onFormFinish,a=e.children,i=o.useContext(eO),c=o.useRef({});return o.createElement(eO.Provider,{value:(0,s.Z)((0,s.Z)({},i),{},{validateMessages:(0,s.Z)((0,s.Z)({},i.validateMessages),t),triggerFormChange:function(e,t){n&&n(e,{changedFields:t,forms:c.current}),i.triggerFormChange(e,t)},triggerFormFinish:function(e,t){r&&r(e,{values:t,forms:c.current}),i.triggerFormFinish(e,t)},registerForm:function(e,t){e&&(c.current=(0,s.Z)((0,s.Z)({},c.current),{},(0,h.Z)({},e,t))),i.registerForm(e,t)},unregisterForm:function(e){var t=(0,s.Z)({},c.current);delete t[e],c.current=t,i.unregisterForm(e)}})},a)},ek=["name","initialValues","fields","form","preserve","children","component","validateMessages","validateTrigger","onValuesChange","onFieldsChange","onFinish","onFinishFailed"];function eR(e){try{return JSON.stringify(e)}catch(e){return Math.random()}}var eM=function(){},ej=function(){for(var e=arguments.length,t=Array(e),n=0;n1?t-1:0),o=1;oen;(0,s.useImperativeHandle)(t,function(){return{focus:q,blur:function(){var e;null===(e=V.current)||void 0===e||e.blur()},setSelectionRange:function(e,t,n){var r;null===(r=V.current)||void 0===r||r.setSelectionRange(e,t,n)},select:function(){var e;null===(e=V.current)||void 0===e||e.select()},input:V.current}}),(0,s.useEffect)(function(){D(function(e){return(!e||!O)&&e})},[O]);var ea=function(e,t,n){var r,o,a=t;if(!W.current&&et.exceedFormatter&&et.max&&et.strategy(t)>et.max)a=et.exceedFormatter(t,{max:et.max}),t!==a&&ee([(null===(r=V.current)||void 0===r?void 0:r.selectionStart)||0,(null===(o=V.current)||void 0===o?void 0:o.selectionEnd)||0]);else if("compositionEnd"===n.source)return;K(a),V.current&&(0,u.rJ)(V.current,e,c,a)};(0,s.useEffect)(function(){if(J){var e;null===(e=V.current)||void 0===e||e.setSelectionRange.apply(e,(0,f.Z)(J))}},[J]);var ei=eo&&"".concat(S,"-out-of-range");return s.createElement(d,(0,o.Z)({},L,{prefixCls:S,className:l()(k,ei),handleReset:function(e){K(""),q(),V.current&&(0,u.rJ)(V.current,e,c)},value:$,focused:H,triggerFocus:q,suffix:function(){var e=Number(en)>0;if(M||et.show){var t=et.showFormatter?et.showFormatter({value:$,count:er,maxLength:en}):"".concat(er).concat(e?" / ".concat(en):"");return s.createElement(s.Fragment,null,et.show&&s.createElement("span",{className:l()("".concat(S,"-show-count-suffix"),(0,a.Z)({},"".concat(S,"-show-count-has-suffix"),!!M),null==T?void 0:T.count),style:(0,r.Z)({},null==A?void 0:A.count)},t),M)}return null}(),disabled:O,classes:I,classNames:T,styles:A}),(n=(0,h.Z)(e,["prefixCls","onPressEnter","addonBefore","addonAfter","prefix","suffix","allowClear","defaultValue","showCount","count","classes","htmlSize","styles","classNames"]),s.createElement("input",(0,o.Z)({autoComplete:i},n,{onChange:function(e){ea(e,e.target.value,{source:"change"})},onFocus:function(e){D(!0),null==y||y(e)},onBlur:function(e){D(!1),null==x||x(e)},onKeyDown:function(e){w&&"Enter"===e.key&&w(e),null==E||E(e)},className:l()(S,(0,a.Z)({},"".concat(S,"-disabled"),O),null==T?void 0:T.input),style:null==A?void 0:A.input,ref:V,size:Z,type:void 0===N?"text":N,onCompositionStart:function(e){W.current=!0,null==F||F(e)},onCompositionEnd:function(e){W.current=!1,ea(e,e.currentTarget.value,{source:"compositionEnd"}),null==z||z(e)}}))))})},8002:function(e,t,n){function r(e){return!!(e.addonBefore||e.addonAfter)}function o(e){return!!(e.prefix||e.suffix||e.allowClear)}function a(e,t,n,r){if(n){var o=t;if("click"===t.type){var a=e.cloneNode(!0);o=Object.create(t,{target:{value:a},currentTarget:{value:a}}),a.value="",n(o);return}if("file"!==e.type&&void 0!==r){var i=e.cloneNode(!0);o=Object.create(t,{target:{value:i},currentTarget:{value:i}}),i.value=r,n(o);return}n(o)}}function i(e,t){if(e){e.focus(t);var n=(t||{}).cursor;if(n){var r=e.value.length;switch(n){case"start":e.setSelectionRange(0,0);break;case"end":e.setSelectionRange(r,r);break;default:e.setSelectionRange(0,r)}}}}n.d(t,{He:function(){return r},X3:function(){return o},nH:function(){return i},rJ:function(){return a}})},9367:function(e,t,n){n.d(t,{V4:function(){return eu},zt:function(){return x},ZP:function(){return ed}});var r,o,a,i,c,l=n(833),s=n(5239),u=n(406),d=n(6976),f=n(6480),p=n.n(f),m=n(7472),g=n(4084),h=n(4090),v=n(6787),b=["children"],y=h.createContext({});function x(e){var t=e.children,n=(0,v.Z)(e,b);return h.createElement(y.Provider,{value:n},t)}var w=n(7365),E=n(5127),C=n(7478),S=n(5430),O=function(e){(0,C.Z)(n,e);var t=(0,S.Z)(n);function n(){return(0,w.Z)(this,n),t.apply(this,arguments)}return(0,E.Z)(n,[{key:"render",value:function(){return this.props.children}}]),n}(h.Component),Z=n(9211),k="none",R="appear",M="enter",j="leave",P="none",N="prepare",I="start",T="active",A="prepared",F=n(2127);function z(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit".concat(e)]="webkit".concat(t),n["Moz".concat(e)]="moz".concat(t),n["ms".concat(e)]="MS".concat(t),n["O".concat(e)]="o".concat(t.toLowerCase()),n}var L=(r=(0,F.Z)(),o=window,a={animationend:z("Animation","AnimationEnd"),transitionend:z("Transition","TransitionEnd")},!r||("AnimationEvent"in o||delete a.animationend.animation,"TransitionEvent"in o||delete a.transitionend.transition),a),_={};(0,F.Z)()&&(_=document.createElement("div").style);var B={};function H(e){if(B[e])return B[e];var t=L[e];if(t)for(var n=Object.keys(t),r=n.length,o=0;o0&&(clearTimeout(eg.current),eg.current=setTimeout(function(){eb({deadline:!0})},S))),eZ===A&&ev(),!0},a=(0,Z.Z)(P),c=(i=(0,u.Z)(a,2))[0],d=i[1],f=function(){var e=h.useRef(null);function t(){K.Z.cancel(e.current)}return h.useEffect(function(){return function(){t()}},[]),[function n(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;t();var a=(0,K.Z)(function(){o<=1?r({isCanceled:function(){return a!==e.current}}):n(r,o-1)});e.current=a},t]}(),m=(p=(0,u.Z)(f,2))[0],g=p[1],v=e?$:Y,U(function(){if(c!==P&&"end"!==c){var e=v.indexOf(c),t=v[e+1],n=o(c);!1===n?d(t,!0):t&&m(function(e){function r(){e.isCanceled()||d(t,!0)}!0===n?r():Promise.resolve(n).then(r)})}},[el,c]),h.useEffect(function(){return function(){g()}},[]),[function(){d(N,!0)},c]),eS=(0,u.Z)(eC,2),eO=eS[0],eZ=eS[1],ek=Q(eZ);eh.current=ek,U(function(){ea(t);var n,r=em.current;em.current=!0,!r&&t&&w&&(n=R),r&&t&&y&&(n=M),(r&&!t&&C||!r&&O&&!t&&C)&&(n=j);var o=ew(n);n&&(e||o[N])?(es(n),eO()):es(k)},[t]),(0,h.useEffect)(function(){(el!==R||w)&&(el!==M||y)&&(el!==j||C)||es(k)},[w,y,C]),(0,h.useEffect)(function(){return function(){em.current=!1,clearTimeout(eg.current)}},[]);var eR=h.useRef(!1);(0,h.useEffect)(function(){eo&&(eR.current=!0),void 0!==eo&&el===k&&((eR.current||eo)&&(null==et||et(eo)),eR.current=!0)},[eo,el]);var eM=ef;return eE[N]&&eZ===I&&(eM=(0,s.Z)({transition:"none"},eM)),[el,eZ,eM,null!=eo?eo:t]}(w,r,function(){try{return E.current instanceof HTMLElement?E.current:(0,m.Z)(C.current)}catch(e){return null}},e),F=(0,u.Z)(S,4),z=F[0],L=F[1],_=F[2],B=F[3],H=h.useRef(B);B&&(H.current=!0);var D=h.useCallback(function(e){E.current=e,(0,g.mH)(t,e)},[t]),W=(0,s.Z)((0,s.Z)({},b),{},{visible:r});if(d){if(z===k)V=B?d((0,s.Z)({},W),D):!a&&H.current&&v?d((0,s.Z)((0,s.Z)({},W),{},{className:v}),D):!c&&(a||v)?null:d((0,s.Z)((0,s.Z)({},W),{},{style:{display:"none"}}),D);else{L===N?ee="prepare":Q(L)?ee="active":L===I&&(ee="start");var V,J,ee,et=G(f,"".concat(z,"-").concat(ee));V=d((0,s.Z)((0,s.Z)({},W),{},{className:p()(G(f,z),(J={},(0,l.Z)(J,et,et&&ee),(0,l.Z)(J,f,"string"==typeof f),J)),style:_}),D)}}else V=null;return h.isValidElement(V)&&(0,g.Yr)(V)&&!V.ref&&(V=h.cloneElement(V,{ref:D})),h.createElement(O,{ref:C},V)})).displayName="CSSMotion",c),ee=n(2110),et=n(4951),en="keep",er="remove",eo="removed";function ea(e){var t;return t=e&&"object"===(0,d.Z)(e)&&"key"in e?e:{key:e},(0,s.Z)((0,s.Z)({},t),{},{key:String(t.key)})}function ei(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return e.map(ea)}var ec=["component","children","onVisibleChanged","onAllRemoved"],el=["status"],es=["eventProps","visible","children","motionName","motionAppear","motionEnter","motionLeave","motionLeaveImmediately","motionDeadline","removeOnLeave","leavedClassName","onAppearPrepare","onAppearStart","onAppearActive","onAppearEnd","onEnterStart","onEnterActive","onEnterEnd","onLeaveStart","onLeaveActive","onLeaveEnd"],eu=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J,n=function(e){(0,C.Z)(r,e);var n=(0,S.Z)(r);function r(){var e;(0,w.Z)(this,r);for(var t=arguments.length,o=Array(t),a=0;a0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=[],r=0,o=t.length,a=ei(e),i=ei(t);a.forEach(function(e){for(var t=!1,a=r;a1}).forEach(function(e){(n=n.filter(function(t){var n=t.key,r=t.status;return n!==e||r!==er})).forEach(function(t){t.key===e&&(t.status=en)})}),n})(r,ei(n)).filter(function(e){var t=r.find(function(t){var n=t.key;return e.key===n});return!t||t.status!==eo||e.status!==er})}}}]),r}(h.Component);return(0,l.Z)(n,"defaultProps",{component:"div"}),n}(V),ed=J},6505:function(e,t,n){n.d(t,{Z:function(){return B}});var r=n(2110),o=n(4090),a=n(3054);n(3850);var i=n(5239),c=n(6976),l=n(7472),s=n(4084),u=o.createContext(null),d=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some(function(e,r){return e[0]===t&&(n=r,!0)}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var n=e(this.__entries__,t),r=this.__entries__[n];return r&&r[1]},t.prototype.set=function(t,n){var r=e(this.__entries__,t);~r?this.__entries__[r][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,r=e(n,t);~r&&n.splice(r,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var n=0,r=this.__entries__;n0},e.prototype.connect_=function(){f&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),h?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){f&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;g.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),b=function(e,t){for(var n=0,r=Object.keys(t);n0},e}(),R="undefined"!=typeof WeakMap?new WeakMap:new d,M=function e(t){if(!(this instanceof e))throw TypeError("Cannot call a class as a function.");if(!arguments.length)throw TypeError("1 argument required, but only 0 present.");var n=new k(t,v.getInstance(),this);R.set(this,n)};["observe","unobserve","disconnect"].forEach(function(e){M.prototype[e]=function(){var t;return(t=R.get(this))[e].apply(t,arguments)}});var j=void 0!==p.ResizeObserver?p.ResizeObserver:M,P=new Map,N=new j(function(e){e.forEach(function(e){var t,n=e.target;null===(t=P.get(n))||void 0===t||t.forEach(function(e){return e(n)})})}),I=n(7365),T=n(5127),A=n(7478),F=n(5430),z=function(e){(0,A.Z)(n,e);var t=(0,F.Z)(n);function n(){return(0,I.Z)(this,n),t.apply(this,arguments)}return(0,T.Z)(n,[{key:"render",value:function(){return this.props.children}}]),n}(o.Component),L=o.forwardRef(function(e,t){var n=e.children,r=e.disabled,a=o.useRef(null),d=o.useRef(null),f=o.useContext(u),p="function"==typeof n,m=p?n(a):n,g=o.useRef({width:-1,height:-1,offsetWidth:-1,offsetHeight:-1}),h=!p&&o.isValidElement(m)&&(0,s.Yr)(m),v=h?m.ref:null,b=(0,s.x1)(v,a),y=function(){var e;return(0,l.Z)(a.current)||(a.current&&"object"===(0,c.Z)(a.current)?(0,l.Z)(null===(e=a.current)||void 0===e?void 0:e.nativeElement):null)||(0,l.Z)(d.current)};o.useImperativeHandle(t,function(){return y()});var x=o.useRef(e);x.current=e;var w=o.useCallback(function(e){var t=x.current,n=t.onResize,r=t.data,o=e.getBoundingClientRect(),a=o.width,c=o.height,l=e.offsetWidth,s=e.offsetHeight,u=Math.floor(a),d=Math.floor(c);if(g.current.width!==u||g.current.height!==d||g.current.offsetWidth!==l||g.current.offsetHeight!==s){var p={width:u,height:d,offsetWidth:l,offsetHeight:s};g.current=p;var m=(0,i.Z)((0,i.Z)({},p),{},{offsetWidth:l===Math.round(a)?a:l,offsetHeight:s===Math.round(c)?c:s});null==f||f(m,e,r),n&&Promise.resolve().then(function(){n(m,e)})}},[]);return o.useEffect(function(){var e=y();return e&&!r&&(P.has(e)||(P.set(e,new Set),N.observe(e)),P.get(e).add(w)),function(){P.has(e)&&(P.get(e).delete(w),P.get(e).size||(N.unobserve(e),P.delete(e)))}},[a.current,r]),o.createElement(z,{ref:d},h?o.cloneElement(m,{ref:b}):m)}),_=o.forwardRef(function(e,t){var n=e.children;return("function"==typeof n?[n]:(0,a.Z)(n)).map(function(n,a){var i=(null==n?void 0:n.key)||"".concat("rc-observer-key","-").concat(a);return o.createElement(L,(0,r.Z)({},e,{key:i,ref:0===a?t:void 0}),n)})});_.Collection=function(e){var t=e.children,n=e.onBatchResize,r=o.useRef(0),a=o.useRef([]),i=o.useContext(u),c=o.useCallback(function(e,t,o){r.current+=1;var c=r.current;a.current.push({size:e,element:t,data:o}),Promise.resolve().then(function(){c===r.current&&(null==n||n(a.current),a.current=[])}),null==i||i(e,t,o)},[n,i]);return o.createElement(u.Provider,{value:c},t)};var B=_},3054:function(e,t,n){n.d(t,{Z:function(){return function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=[];return r.Children.forEach(t,function(t){(null!=t||n.keepEmpty)&&(Array.isArray(t)?a=a.concat(e(t)):(0,o.isFragment)(t)&&t.props?a=a.concat(e(t.props.children,n)):a.push(t))}),a}}});var r=n(4090),o=n(4185)},2127:function(e,t,n){n.d(t,{Z:function(){return r}});function r(){return!!window.document&&!!window.document.createElement}},1506:function(e,t,n){n.d(t,{Z:function(){return r}});function r(e,t){if(!e)return!1;if(e.contains)return e.contains(t);for(var n=t;n;){if(n===e)return!0;n=n.parentNode}return!1}},4050:function(e,t,n){n.d(t,{hq:function(){return m},jL:function(){return p}});var r=n(2127),o=n(1506),a="data-rc-order",i="data-rc-priority",c=new Map;function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.mark;return t?t.startsWith("data-")?t:"data-".concat(t):"rc-util-key"}function s(e){return e.attachTo?e.attachTo:document.querySelector("head")||document.body}function u(e){return Array.from((c.get(e)||e).children).filter(function(e){return"STYLE"===e.tagName})}function d(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,r.Z)())return null;var n=t.csp,o=t.prepend,c=t.priority,l=void 0===c?0:c,d="queue"===o?"prependQueue":o?"prepend":"append",f="prependQueue"===d,p=document.createElement("style");p.setAttribute(a,d),f&&l&&p.setAttribute(i,"".concat(l)),null!=n&&n.nonce&&(p.nonce=null==n?void 0:n.nonce),p.innerHTML=e;var m=s(t),g=m.firstChild;if(o){if(f){var h=u(m).filter(function(e){return!!["prepend","prependQueue"].includes(e.getAttribute(a))&&l>=Number(e.getAttribute(i)||0)});if(h.length)return m.insertBefore(p,h[h.length-1].nextSibling),p}m.insertBefore(p,g)}else m.appendChild(p);return p}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return u(s(t)).find(function(n){return n.getAttribute(l(t))===e})}function p(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=f(e,t);n&&s(t).removeChild(n)}function m(e,t){var n,r,a,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){var n=c.get(e);if(!n||!(0,o.Z)(document,n)){var r=d("",t),a=r.parentNode;c.set(e,a),e.removeChild(r)}}(s(i),i);var u=f(t,i);if(u)return null!==(n=i.csp)&&void 0!==n&&n.nonce&&u.nonce!==(null===(r=i.csp)||void 0===r?void 0:r.nonce)&&(u.nonce=null===(a=i.csp)||void 0===a?void 0:a.nonce),u.innerHTML!==e&&(u.innerHTML=e),u;var p=d(e,i);return p.setAttribute(l(i),t),p}},7472:function(e,t,n){n.d(t,{S:function(){return a},Z:function(){return i}});var r=n(4090),o=n(9542);function a(e){return e instanceof HTMLElement||e instanceof SVGElement}function i(e){return a(e)?e:e instanceof r.Component?o.findDOMNode(e):null}},3193:function(e,t,n){n.d(t,{Z:function(){return r}});function r(e){if(!e)return!1;if(e instanceof Element){if(e.offsetParent)return!0;if(e.getBBox){var t=e.getBBox(),n=t.width,r=t.height;if(n||r)return!0}if(e.getBoundingClientRect){var o=e.getBoundingClientRect(),a=o.width,i=o.height;if(a||i)return!0}}return!1}},4687:function(e,t,n){function r(e){var t;return null==e||null===(t=e.getRootNode)||void 0===t?void 0:t.call(e)}function o(e){return r(e) instanceof ShadowRoot?r(e):null}n.d(t,{A:function(){return o}})},4295:function(e,t){var n={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var t=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||t>=n.F1&&t<=n.F12)return!1;switch(t){case n.ALT:case n.CAPS_LOCK:case n.CONTEXT_MENU:case n.CTRL:case n.DOWN:case n.END:case n.ESC:case n.HOME:case n.INSERT:case n.LEFT:case n.MAC_FF_META:case n.META:case n.NUMLOCK:case n.NUM_CENTER:case n.PAGE_DOWN:case n.PAGE_UP:case n.PAUSE:case n.PRINT_SCREEN:case n.RIGHT:case n.SHIFT:case n.UP:case n.WIN_KEY:case n.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=n.ZERO&&e<=n.NINE||e>=n.NUM_ZERO&&e<=n.NUM_MULTIPLY||e>=n.A&&e<=n.Z||-1!==window.navigator.userAgent.indexOf("WebKit")&&0===e)return!0;switch(e){case n.SPACE:case n.QUESTION_MARK:case n.NUM_PLUS:case n.NUM_MINUS:case n.NUM_PERIOD:case n.NUM_DIVISION:case n.SEMICOLON:case n.DASH:case n.EQUALS:case n.COMMA:case n.PERIOD:case n.SLASH:case n.APOSTROPHE:case n.SINGLE_QUOTE:case n.OPEN_SQUARE_BRACKET:case n.BACKSLASH:case n.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};t.Z=n},7274:function(e,t,n){n.d(t,{s:function(){return h},v:function(){return b}});var r,o,a=n(6926),i=n(4902),c=n(6976),l=n(5239),s=n(9542),u=(0,l.Z)({},r||(r=n.t(s,2))),d=u.version,f=u.render,p=u.unmountComponentAtNode;try{Number((d||"").split(".")[0])>=18&&(o=u.createRoot)}catch(e){}function m(e){var t=u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;t&&"object"===(0,c.Z)(t)&&(t.usingClientEntryPoint=e)}var g="__rc_react_root__";function h(e,t){if(o){var n;m(!0),n=t[g]||o(t),m(!1),n.render(e),t[g]=n;return}f(e,t)}function v(){return(v=(0,i.Z)((0,a.Z)().mark(function e(t){return(0,a.Z)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",Promise.resolve().then(function(){var e;null===(e=t[g])||void 0===e||e.unmount(),delete t[g]}));case 1:case"end":return e.stop()}},e)}))).apply(this,arguments)}function b(e){return y.apply(this,arguments)}function y(){return(y=(0,i.Z)((0,a.Z)().mark(function e(t){return(0,a.Z)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(!(void 0!==o)){e.next=2;break}return e.abrupt("return",function(e){return v.apply(this,arguments)}(t));case 2:p(t);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}},4811:function(e,t,n){n.d(t,{Z:function(){return o}});var r=n(4090);function o(e){var t=r.useRef();return t.current=e,r.useCallback(function(){for(var e,n=arguments.length,r=Array(n),o=0;o2&&void 0!==arguments[2]&&arguments[2],a=new Set;return function e(t,i){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,l=a.has(t);if((0,o.ZP)(!l,"Warning: There may be circular references"),l)return!1;if(t===i)return!0;if(n&&c>1)return!1;a.add(t);var s=c+1;if(Array.isArray(t)){if(!Array.isArray(i)||t.length!==i.length)return!1;for(var u=0;u