diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/bug_report.yaml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000000000000000000000000000000000000..90a577252d7fb16397fd1b1da4117ca28343c622 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,53 @@ +name: Bug report +description: Create a report +title: "[Bug]: " +labels: + - bug + +body: + - type: textarea + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + placeholder: | + Any language accepted + 아무 언어 사용가능 + すべての言語に対応 + 接受所有语言 + Se aceptan todos los idiomas + Alle Sprachen werden akzeptiert + Toutes les langues sont acceptées + Принимаются все языки + + - type: textarea + attributes: + label: Screenshots + description: Screenshots related to the issue. + + - type: textarea + attributes: + label: Console logs, from start to end. + description: | + The full console log of your terminal. + placeholder: | + Python ... + Version: ... + Commit hash: ... + Installing requirements + ... + + Launching Web UI with arguments: ... + [-] ADetailer initialized. version: ... + ... + ... + + Traceback (most recent call last): + ... + ... + render: Shell + validations: + required: true + + - type: textarea + attributes: + label: List of installed extensions diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/feature_request.yaml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c496137ce397dd21082f674eb4772edc529ee74e --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,24 @@ +name: Feature request +description: Suggest an idea for this project +title: "[Feature Request]: " + +body: + - type: textarea + attributes: + label: Is your feature request related to a problem? Please describe. + description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + + - type: textarea + attributes: + label: Describe the solution you'd like + description: A clear and concise description of what you want to happen. + + - type: textarea + attributes: + label: Describe alternatives you've considered + description: A clear and concise description of any alternative solutions or features you've considered. + + - type: textarea + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/question.yaml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/question.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3c7945407890bc48dc5305fa979047a2bf2f58e8 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/ISSUE_TEMPLATE/question.yaml @@ -0,0 +1,10 @@ +name: Question +description: Write a question +labels: + - question + +body: + - type: textarea + attributes: + label: Question + description: Please do not write bug reports or feature requests here. diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/workflows/stale.yml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/workflows/stale.yml new file mode 100644 index 0000000000000000000000000000000000000000..79ab8faf57a9e958a3cf784b5ada4994e8c528d2 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.github/workflows/stale.yml @@ -0,0 +1,13 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: '30 1 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v8 + with: + days-before-stale: 23 + days-before-close: 3 diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.gitignore b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ce19e6c13e7687fe5bb70cb1138f8a7cb65162d9 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.gitignore @@ -0,0 +1,196 @@ +# Created by https://www.toptal.com/developers/gitignore/api/python,visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=python,visualstudiocode + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +### Python Patch ### +# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration +poetry.toml + +# ruff +.ruff_cache/ + +# LSP config files +pyrightconfig.json + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# End of https://www.toptal.com/developers/gitignore/api/python,visualstudiocode +*.ipynb diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.pre-commit-config.yaml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8d3089672a11794e519dd8ab6b457df59a6bc42f --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.pre-commit-config.yaml @@ -0,0 +1,19 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] + - id: end-of-file-fixer + - id: mixed-line-ending + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: "v0.0.287" + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + + - repo: https://github.com/psf/black-pre-commit-mirror + rev: 23.9.0 + hooks: + - id: black diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.vscode/extensions.json b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..f18738dfa515e878d914b3a872e7469a7eb0f310 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "ms-python.black-formatter", + "kevinrose.vsc-python-indent", + "charliermarsh.ruff", + "shardulm94.trailing-spaces" + ] +} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/.vscode/settings.json b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..ceaf79adb5c0aa538a8514c423cdb62fc10de43f --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "explorer.fileNesting.enabled": true, + "explorer.fileNesting.patterns": { + "pyproject.toml": ".env, .gitignore, .pre-commit-config.yaml, Taskfile.yml", + "README.md": "LICENSE.md, CHANGELOG.md", + "install.py": "preload.py" + } +} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/CHANGELOG.md b/TestingforfaivsixEx/content/eichellis/extensions/adetai/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..89909b56e67654e03c5fea3aecb15e818e923163 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/CHANGELOG.md @@ -0,0 +1,309 @@ +# Changelog + +## 2023-09-10 + +- v23.9.2 +- (실험적) VAE 선택 기능 + +## 2023-09-01 + +- v23.9.1 +- webui 1.6.0에 추가된 인자를 사용해서 생긴 하위 호환 문제 수정 + +## 2023-08-31 + +- v23.9.0 +- (실험적) 체크포인트 선택기능 + - 버그가 있어 리프레시 버튼은 구현에서 빠짐 +- 1.6.0 업데이트에 따라 img2img에서 사용불가능한 샘플러를 선택했을 때 더이상 Euler로 변경하지 않음 +- 유효하지 않은 인자가 전달되었을 때, 에러를 일으키지 않고 대신 adetailer를 비활성화함 + + +## 2023-08-25 + +- v23.8.1 +- xyz grid에서 model을 `None`으로 설정한 이후에 adetailer가 비활성화 되는 문제 수정 +- skip을 눌렀을 때 진행을 멈춤 +- `--medvram-sdxl`을 설정했을 때에도 cpu를 사용하게 함 + +## 2023-08-14 + +- v23.8.0 +- `[PROMPT]` 키워드 추가. `ad_prompt` 또는 `ad_negative_prompt`에 사용하면 입력 프롬프트로 대체됨 (PR #243) +- Only top k largest 옵션 추가 (PR #264) +- ultralytics 버전 업데이트 + + +## 2023-07-31 + +- v23.7.11 +- separate clip skip 옵션 추가 +- install requirements 정리 (ultralytics 새 버전, mediapipe~=3.20) + +## 2023-07-28 + +- v23.7.10 +- ultralytics, mediapipe import문 정리 +- traceback에서 컬러를 없앰 (api 때문), 라이브러리 버전도 보여주게 설정. +- huggingface_hub, pydantic을 install.py에서 없앰 +- 안쓰는 컨트롤넷 관련 코드 삭제 + + +## 2023-07-23 + +- v23.7.9 +- `ultralytics.utils` ModuleNotFoundError 해결 (https://github.com/ultralytics/ultralytics/issues/3856) +- `pydantic` 2.0 이상 버전 설치안되도록 함 +- `controlnet_dir` cmd args 문제 수정 (PR #107) + +## 2023-07-20 + +- v23.7.8 +- `paste_field_names` 추가했던 것을 되돌림 + +## 2023-07-19 + +- v23.7.7 +- 인페인팅 단계에서 별도의 샘플러를 선택할 수 있게 옵션을 추가함 (xyz그리드에도 추가) +- webui 1.0.0-pre 이하 버전에서 batch index 문제 수정 +- 스크립트에 `paste_field_names`을 추가함. 사용되는지는 모르겠음 + +## 2023-07-16 + +- v23.7.6 +- `ultralytics 8.0.135`에 추가된 cpuinfo 기능을 위해 `py-cpuinfo`를 미리 설치하게 함. (미리 설치 안하면 cpu나 mps사용할 때 재시작해야함) +- init_image가 RGB 모드가 아닐 때 RGB로 변경. + +## 2023-07-07 + +- v23.7.4 +- batch count > 1일때 프롬프트의 인덱스 문제 수정 + +- v23.7.5 +- i2i의 `cached_uc`와 `cached_c`가 p의 `cached_uc`와 `cached_c`가 다른 인스턴스가 되도록 수정 + +## 2023-07-05 + +- v23.7.3 +- 버그 수정 + - `object()`가 json 직렬화 안되는 문제 + - `process`를 호출함에 따라 배치 카운트가 2이상일 때, all_prompts가 고정되는 문제 + - `ad-before`와 `ad-preview` 이미지 파일명이 실제 파일명과 다른 문제 + - pydantic 2.0 호환성 문제 + +## 2023-07-04 + +- v23.7.2 +- `mediapipe_face_mesh_eyes_only` 모델 추가: `mediapipe_face_mesh`로 감지한 뒤 눈만 사용함. +- 매 배치 시작 전에 `scripts.postprocess`를, 후에 `scripts.process`를 호출함. + - 컨트롤넷을 사용하면 소요 시간이 조금 늘어나지만 몇몇 문제 해결에 도움이 됨. +- `lora_block_weight`를 스크립트 화이트리스트에 추가함. + - 한번이라도 ADetailer를 사용한 사람은 수동으로 추가해야함. + +## 2023-07-03 + +- v23.7.1 +- `process_images`를 진행한 뒤 `StableDiffusionProcessing` 오브젝트의 close를 호출함 +- api 호출로 사용했는지 확인하는 속성 추가 +- `NansException`이 발생했을 때 중지하지 않고 남은 과정 계속 진행함 + +## 2023-07-02 + +- v23.7.0 +- `NansException`이 발생하면 로그에 표시하고 원본 이미지를 반환하게 설정 +- `rich`를 사용한 에러 트레이싱 + - install.py에 `rich` 추가 +- 생성 중에 컴포넌트의 값을 변경하면 args의 값도 함께 변경되는 문제 수정 (issue #180) +- 터미널 로그로 ad_prompt와 ad_negative_prompt에 적용된 실제 프롬프트 확인할 수 있음 (입력과 다를 경우에만) + +## 2023-06-28 + +- v23.6.4 +- 최대 모델 수 5 -> 10개 +- ad_prompt와 ad_negative_prompt에 빈칸으로 놔두면 입력 프롬프트가 사용된다는 문구 추가 +- huggingface 모델 다운로드 실패시 로깅 +- 1st 모델이 `None`일 경우 나머지 입력을 무시하던 문제 수정 +- `--use-cpu` 에 `adetailer` 입력 시 cpu로 yolo모델을 사용함 + +## 2023-06-20 + +- v23.6.3 +- 컨트롤넷 inpaint 모델에 대해, 3가지 모듈을 사용할 수 있도록 함 +- Noise Multiplier 옵션 추가 (PR #149) +- pydantic 최소 버전 1.10.8로 설정 (Issue #146) + +## 2023-06-05 + +- v23.6.2 +- xyz_grid에서 ADetailer를 사용할 수 있게함. + - 8가지 옵션만 1st 탭에 적용되도록 함. + +## 2023-06-01 + +- v23.6.1 +- `inpaint, scribble, lineart, openpose, tile` 5가지 컨트롤넷 모델 지원 (PR #107) +- controlnet guidance start, end 인자 추가 (PR #107) +- `modules.extensions`를 사용하여 컨트롤넷 확장을 불러오고 경로를 알아내로록 변경 +- ui에서 컨트롤넷을 별도 함수로 분리 + +## 2023-05-30 + +- v23.6.0 +- 스크립트의 이름을 `After Detailer`에서 `ADetailer`로 변경 + - API 사용자는 변경 필요함 +- 몇몇 설정 변경 + - `ad_conf` → `ad_confidence`. 0~100 사이의 int → 0.0~1.0 사이의 float + - `ad_inpaint_full_res` → `ad_inpaint_only_masked` + - `ad_inpaint_full_res_padding` → `ad_inpaint_only_masked_padding` +- mediapipe face mesh 모델 추가 + - mediapipe 최소 버전 `0.10.0` + +- rich traceback 제거함 +- huggingface 다운로드 실패할 때 에러가 나지 않게 하고 해당 모델을 제거함 + +## 2023-05-26 + +- v23.5.19 +- 1번째 탭에도 `None` 옵션을 추가함 +- api로 ad controlnet model에 inpaint가 아닌 다른 컨트롤넷 모델을 사용하지 못하도록 막음 +- adetailer 진행중에 total tqdm 진행바 업데이트를 멈춤 +- state.inturrupted 상태에서 adetailer 과정을 중지함 +- 컨트롤넷 process를 각 batch가 끝난 순간에만 호출하도록 변경 + +### 2023-05-25 + +- v23.5.18 +- 컨트롤넷 관련 수정 + - unit의 `input_mode`를 `SIMPLE`로 모두 변경 + - 컨트롤넷 유넷 훅과 하이잭 함수들을 adetailer를 실행할 때에만 되돌리는 기능 추가 + - adetailer 처리가 끝난 뒤 컨트롤넷 스크립트의 process를 다시 진행함. (batch count 2 이상일때의 문제 해결) +- 기본 활성 스크립트 목록에서 컨트롤넷을 뺌 + +### 2023-05-22 + +- v23.5.17 +- 컨트롤넷 확장이 있으면 컨트롤넷 스크립트를 활성화함. (컨트롤넷 관련 문제 해결) +- 모든 컴포넌트에 elem_id 설정 +- ui에 버전을 표시함 + + +### 2023-05-19 + +- v23.5.16 +- 추가한 옵션 + - Mask min/max ratio + - Mask merge mode + - Restore faces after ADetailer +- 옵션들을 Accordion으로 묶음 + +### 2023-05-18 + +- v23.5.15 +- 필요한 것만 임포트하도록 변경 (vae 로딩 오류 없어짐. 로딩 속도 빨라짐) + +### 2023-05-17 + +- v23.5.14 +- `[SKIP]`으로 ad prompt 일부를 건너뛰는 기능 추가 +- bbox 정렬 옵션 추가 +- sd_webui 타입힌트를 만들어냄 +- enable checker와 관련된 api 오류 수정? + +### 2023-05-15 + +- v23.5.13 +- `[SEP]`으로 ad prompt를 분리하여 적용하는 기능 추가 +- enable checker를 다시 pydantic으로 변경함 +- ui 관련 함수를 adetailer.ui 폴더로 분리함 +- controlnet을 사용할 때 모든 controlnet unit 비활성화 +- adetailer 폴더가 없으면 만들게 함 + +### 2023-05-13 + +- v23.5.12 +- `ad_enable`을 제외한 입력이 dict타입으로 들어오도록 변경 + - web api로 사용할 때에 특히 사용하기 쉬움 + - web api breaking change +- `mask_preprocess` 인자를 넣지 않았던 오류 수정 (PR #47) +- huggingface에서 모델을 다운로드하지 않는 옵션 추가 `--ad-no-huggingface` + +### 2023-05-12 + +- v23.5.11 +- `ultralytics` 알람 제거 +- 필요없는 exif 인자 더 제거함 +- `use separate steps` 옵션 추가 +- ui 배치를 조정함 + +### 2023-05-09 + +- v23.5.10 +- 선택한 스크립트만 ADetailer에 적용하는 옵션 추가, 기본값 `True`. 설정 탭에서 지정가능. + - 기본값: `dynamic_prompting,dynamic_thresholding,wildcards,wildcard_recursive` +- `person_yolov8s-seg.pt` 모델 추가 +- `ultralytics`의 최소 버전을 `8.0.97`로 설정 (C:\\ 문제 해결된 버전) + +### 2023-05-08 + +- v23.5.9 +- 2가지 이상의 모델을 사용할 수 있음. 기본값: 2, 최대: 5 +- segment 모델을 사용할 수 있게 함. `person_yolov8n-seg.pt` 추가 + +### 2023-05-07 + +- v23.5.8 +- 프롬프트와 네거티브 프롬프트에 방향키 지원 (PR #24) +- `mask_preprocess`를 추가함. 이전 버전과 시드값이 달라질 가능성 있음! +- 이미지 처리가 일어났을 때에만 before이미지를 저장함 +- 설정창의 레이블을 ADetailer 대신 더 적절하게 수정함 + +### 2023-05-06 + +- v23.5.7 +- `ad_use_cfg_scale` 옵션 추가. cfg 스케일을 따로 사용할지 말지 결정함. +- `ad_enable` 기본값을 `True`에서 `False`로 변경 +- `ad_model`의 기본값을 `None`에서 첫번째 모델로 변경 +- 최소 2개의 입력(ad_enable, ad_model)만 들어오면 작동하게 변경. + +- v23.5.7.post0 +- `init_controlnet_ext`을 controlnet_exists == True일때에만 실행 +- webui를 C드라이브 바로 밑에 설치한 사람들에게 `ultralytics` 경고 표시 + +### 2023-05-05 (어린이날) + +- v23.5.5 +- `Save images before ADetailer` 옵션 추가 +- 입력으로 들어온 인자와 ALL_ARGS의 길이가 다르면 에러메세지 +- README.md에 설치방법 추가 + +- v23.5.6 +- get_args에서 IndexError가 발생하면 자세한 에러메세지를 볼 수 있음 +- AdetailerArgs에 extra_params 내장 +- scripts_args를 딥카피함 +- postprocess_image를 약간 분리함 + +- v23.5.6.post0 +- `init_controlnet_ext`에서 에러메세지를 자세히 볼 수 있음 + +### 2023-05-04 + +- v23.5.4 +- use pydantic for arguments validation +- revert: ad_model to `None` as default +- revert: `__future__` imports +- lazily import yolo and mediapipe + +### 2023-05-03 + +- v23.5.3.post0 +- remove `__future__` imports +- change to copy scripts and scripts args + +- v23.5.3.post1 +- change default ad_model from `None` + +### 2023-05-02 + +- v23.5.3 +- Remove `None` from model list and add `Enable ADetailer` checkbox. +- install.py `skip_install` fix. diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/LICENSE.md b/TestingforfaivsixEx/content/eichellis/extensions/adetai/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..15bc112be2418653138c879e8f15c7b001229324 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/LICENSE.md @@ -0,0 +1,662 @@ + + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/README.md b/TestingforfaivsixEx/content/eichellis/extensions/adetai/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d6fe5e446bfc159e75d332ee72061ccca5a473f8 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/README.md @@ -0,0 +1,94 @@ +# !After Detailer + +!After Detailer is a extension for stable diffusion webui, similar to Detection Detailer, except it uses ultralytics instead of the mmdet. + +## Install + +(from Mikubill/sd-webui-controlnet) + +1. Open "Extensions" tab. +2. Open "Install from URL" tab in the tab. +3. Enter `https://github.com/Bing-su/adetailer.git` to "URL for extension's git repository". +4. Press "Install" button. +5. Wait 5 seconds, and you will see the message "Installed into stable-diffusion-webui\extensions\adetailer. Use Installed tab to restart". +6. Go to "Installed" tab, click "Check for updates", and then click "Apply and restart UI". (The next time you can also use this method to update extensions.) +7. Completely restart A1111 webui including your terminal. (If you do not know what is a "terminal", you can reboot your computer: turn your computer off and turn it on again.) + +You can now install it directly from the Extensions tab. + +![image](https://i.imgur.com/g6GdRBT.png) + +You **DON'T** need to download any model from huggingface. + +## Options + +| Model, Prompts | | | +| --------------------------------- | ------------------------------------- | ------------------------------------------------- | +| ADetailer model | Determine what to detect. | `None` = disable | +| ADetailer prompt, negative prompt | Prompts and negative prompts to apply | If left blank, it will use the same as the input. | + +| Detection | | | +| ------------------------------------ | -------------------------------------------------------------------------------------------- | --- | +| Detection model confidence threshold | Only objects with a detection model confidence above this threshold are used for inpainting. | | +| Mask min/max ratio | Only use masks whose area is between those ratios for the area of the entire image. | | + +If you want to exclude objects in the background, try setting the min ratio to around `0.01`. + +| Mask Preprocessing | | | +| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| Mask x, y offset | Moves the mask horizontally and vertically by | | +| Mask erosion (-) / dilation (+) | Enlarge or reduce the detected mask. | [opencv example](https://docs.opencv.org/4.7.0/db/df6/tutorial_erosion_dilatation.html) | +| Mask merge mode | `None`: Inpaint each mask
`Merge`: Merge all masks and inpaint
`Merge and Invert`: Merge all masks and Invert, then inpaint | | + +Applied in this order: x, y offset → erosion/dilation → merge/invert. + +#### Inpainting + +Each option corresponds to a corresponding option on the inpaint tab. Therefore, please refer to the inpaint tab for usage details on how to use each option. + +## ControlNet Inpainting + +You can use the ControlNet extension if you have ControlNet installed and ControlNet models. + +Support `inpaint, scribble, lineart, openpose, tile` controlnet models. Once you choose a model, the preprocessor is set automatically. It works separately from the model set by the Controlnet extension. + +## Advanced Options + +API request example: [wiki/API](https://github.com/Bing-su/adetailer/wiki/API) + +`ui-config.json` entries: [wiki/ui-config.json](https://github.com/Bing-su/adetailer/wiki/ui-config.json) + +`[SEP], [SKIP]` tokens: [wiki/Advanced](https://github.com/Bing-su/adetailer/wiki/Advanced) + +## Media + +- 🎥 [どこよりも詳しいAfter Detailer (adetailer)の使い方① 【Stable Diffusion】](https://youtu.be/sF3POwPUWCE) +- 🎥 [どこよりも詳しいAfter Detailer (adetailer)の使い方② 【Stable Diffusion】](https://youtu.be/urNISRdbIEg) + +## Model + +| Model | Target | mAP 50 | mAP 50-95 | +| --------------------- | --------------------- | ----------------------------- | ----------------------------- | +| face_yolov8n.pt | 2D / realistic face | 0.660 | 0.366 | +| face_yolov8s.pt | 2D / realistic face | 0.713 | 0.404 | +| hand_yolov8n.pt | 2D / realistic hand | 0.767 | 0.505 | +| person_yolov8n-seg.pt | 2D / realistic person | 0.782 (bbox)
0.761 (mask) | 0.555 (bbox)
0.460 (mask) | +| person_yolov8s-seg.pt | 2D / realistic person | 0.824 (bbox)
0.809 (mask) | 0.605 (bbox)
0.508 (mask) | +| mediapipe_face_full | realistic face | - | - | +| mediapipe_face_short | realistic face | - | - | +| mediapipe_face_mesh | realistic face | - | - | + +The yolo models can be found on huggingface [Bingsu/adetailer](https://huggingface.co/Bingsu/adetailer). + +### Additional Model + +Put your [ultralytics](https://github.com/ultralytics/ultralytics) yolo model in `webui/models/adetailer`. The model name should end with `.pt` or `.pth`. + +It must be a bbox detection or segment model and use all label. + +## Example + +![image](https://i.imgur.com/38RSxSO.png) +![image](https://i.imgur.com/2CYgjLx.png) + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/F1F1L7V2N) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/Taskfile.yml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/Taskfile.yml new file mode 100644 index 0000000000000000000000000000000000000000..70e0d357d11f0b8b908fb31f62ce0c104042d2c2 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/Taskfile.yml @@ -0,0 +1,27 @@ +# https://taskfile.dev + +version: "3" + +dotenv: + - .env + +tasks: + default: + cmds: + - echo "$PYTHON" + - echo "$WEBUI" + silent: true + + launch: + dir: "{{.WEBUI}}" + cmds: + - "{{.PYTHON}} launch.py --xformers --api" + silent: true + + lint: + cmds: + - pre-commit run -a + + update: + cmds: + - "{{.PYTHON}} -m pip install -U ultralytics mediapipe ruff pre-commit black" diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/__init__.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..dae6181e4042e320e7854837ed8e96b1da583c83 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/__init__.py @@ -0,0 +1,20 @@ +from .__version__ import __version__ +from .args import AD_ENABLE, ALL_ARGS, ADetailerArgs, EnableChecker +from .common import PredictOutput, get_models +from .mediapipe import mediapipe_predict +from .ultralytics import ultralytics_predict + +AFTER_DETAILER = "ADetailer" + +__all__ = [ + "__version__", + "AD_ENABLE", + "ADetailerArgs", + "AFTER_DETAILER", + "ALL_ARGS", + "EnableChecker", + "PredictOutput", + "get_models", + "mediapipe_predict", + "ultralytics_predict", +] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/__version__.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/__version__.py new file mode 100644 index 0000000000000000000000000000000000000000..0a9df8e09313bc01841f7abafe5720e5d7ef1131 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/__version__.py @@ -0,0 +1 @@ +__version__ = "23.9.2" diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/args.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/args.py new file mode 100644 index 0000000000000000000000000000000000000000..ea22b99001633eaba5d388049715d3d53853582b --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/args.py @@ -0,0 +1,251 @@ +from __future__ import annotations + +from collections import UserList +from functools import cached_property, partial +from typing import Any, Literal, NamedTuple, Optional, Union + +import pydantic +from pydantic import ( + BaseModel, + Extra, + NonNegativeFloat, + NonNegativeInt, + PositiveInt, + confloat, + conint, + constr, + root_validator, + validator, +) + +cn_model_regex = r".*(inpaint|tile|scribble|lineart|openpose).*|^None$" + + +class Arg(NamedTuple): + attr: str + name: str + + +class ArgsList(UserList): + @cached_property + def attrs(self) -> tuple[str]: + return tuple(attr for attr, _ in self) + + @cached_property + def names(self) -> tuple[str]: + return tuple(name for _, name in self) + + +class ADetailerArgs(BaseModel, extra=Extra.forbid): + ad_model: str = "None" + ad_prompt: str = "" + ad_negative_prompt: str = "" + ad_confidence: confloat(ge=0.0, le=1.0) = 0.3 + ad_mask_k_largest: NonNegativeInt = 0 + ad_mask_min_ratio: confloat(ge=0.0, le=1.0) = 0.0 + ad_mask_max_ratio: confloat(ge=0.0, le=1.0) = 1.0 + ad_dilate_erode: int = 4 + ad_x_offset: int = 0 + ad_y_offset: int = 0 + ad_mask_merge_invert: Literal["None", "Merge", "Merge and Invert"] = "None" + ad_mask_blur: NonNegativeInt = 4 + ad_denoising_strength: confloat(ge=0.0, le=1.0) = 0.4 + ad_inpaint_only_masked: bool = True + ad_inpaint_only_masked_padding: NonNegativeInt = 32 + ad_use_inpaint_width_height: bool = False + ad_inpaint_width: PositiveInt = 512 + ad_inpaint_height: PositiveInt = 512 + ad_use_steps: bool = False + ad_steps: PositiveInt = 28 + ad_use_cfg_scale: bool = False + ad_cfg_scale: NonNegativeFloat = 7.0 + ad_use_checkpoint: bool = False + ad_checkpoint: Optional[str] = None + ad_use_vae: bool = False + ad_vae: Optional[str] = None + ad_use_sampler: bool = False + ad_sampler: str = "DPM++ 2M Karras" + ad_use_noise_multiplier: bool = False + ad_noise_multiplier: confloat(ge=0.5, le=1.5) = 1.0 + ad_use_clip_skip: bool = False + ad_clip_skip: conint(ge=1, le=12) = 1 + ad_restore_face: bool = False + ad_controlnet_model: constr(regex=cn_model_regex) = "None" + ad_controlnet_module: Optional[constr(regex=r".*inpaint.*|^None$")] = None + ad_controlnet_weight: confloat(ge=0.0, le=1.0) = 1.0 + ad_controlnet_guidance_start: confloat(ge=0.0, le=1.0) = 0.0 + ad_controlnet_guidance_end: confloat(ge=0.0, le=1.0) = 1.0 + is_api: bool = True + + @root_validator(skip_on_failure=True) + def ad_controlnt_module_validator(cls, values): # noqa: N805 + cn_model = values.get("ad_controlnet_model", "None") + cn_module = values.get("ad_controlnet_module", None) + if "inpaint" not in cn_model or cn_module == "None": + values["ad_controlnet_module"] = None + return values + + @validator("is_api", pre=True) + def is_api_validator(cls, v: Any): # noqa: N805 + "tuple is json serializable but cannot be made with json deserialize." + return type(v) is not tuple + + @staticmethod + def ppop( + p: dict[str, Any], + key: str, + pops: list[str] | None = None, + cond: Any = None, + ) -> None: + if pops is None: + pops = [key] + if key not in p: + return + value = p[key] + cond = (not bool(value)) if cond is None else value == cond + + if cond: + for k in pops: + p.pop(k, None) + + def extra_params(self, suffix: str = "") -> dict[str, Any]: + if self.ad_model == "None": + return {} + + p = {name: getattr(self, attr) for attr, name in ALL_ARGS} + ppop = partial(self.ppop, p) + + ppop("ADetailer prompt") + ppop("ADetailer negative prompt") + ppop("ADetailer mask only top k largest", cond=0) + ppop("ADetailer mask min ratio", cond=0.0) + ppop("ADetailer mask max ratio", cond=1.0) + ppop("ADetailer x offset", cond=0) + ppop("ADetailer y offset", cond=0) + ppop("ADetailer mask merge/invert", cond="None") + ppop("ADetailer inpaint only masked", ["ADetailer inpaint padding"]) + ppop( + "ADetailer use inpaint width/height", + [ + "ADetailer use inpaint width/height", + "ADetailer inpaint width", + "ADetailer inpaint height", + ], + ) + ppop( + "ADetailer use separate steps", + ["ADetailer use separate steps", "ADetailer steps"], + ) + ppop( + "ADetailer use separate CFG scale", + ["ADetailer use separate CFG scale", "ADetailer CFG scale"], + ) + ppop( + "ADetailer use separate checkpoint", + ["ADetailer use separate checkpoint", "ADetailer checkpoint"], + ) + ppop( + "ADetailer use separate VAE", + ["ADetailer use separate VAE", "ADetailer VAE"], + ) + ppop( + "ADetailer use separate sampler", + ["ADetailer use separate sampler", "ADetailer sampler"], + ) + ppop( + "ADetailer use separate noise multiplier", + ["ADetailer use separate noise multiplier", "ADetailer noise multiplier"], + ) + + ppop( + "ADetailer use separate CLIP skip", + ["ADetailer use separate CLIP skip", "ADetailer CLIP skip"], + ) + + ppop("ADetailer restore face") + ppop( + "ADetailer ControlNet model", + [ + "ADetailer ControlNet model", + "ADetailer ControlNet module", + "ADetailer ControlNet weight", + "ADetailer ControlNet guidance start", + "ADetailer ControlNet guidance end", + ], + cond="None", + ) + ppop("ADetailer ControlNet module") + ppop("ADetailer ControlNet weight", cond=1.0) + ppop("ADetailer ControlNet guidance start", cond=0.0) + ppop("ADetailer ControlNet guidance end", cond=1.0) + + if suffix: + p = {k + suffix: v for k, v in p.items()} + + return p + + +class EnableChecker(BaseModel): + enable: bool + arg_list: list + + def is_enabled(self) -> bool: + ad_model = ALL_ARGS[0].attr + if not self.enable: + return False + return any(arg.get(ad_model, "None") != "None" for arg in self.arg_list) + + +_all_args = [ + ("ad_enable", "ADetailer enable"), + ("ad_model", "ADetailer model"), + ("ad_prompt", "ADetailer prompt"), + ("ad_negative_prompt", "ADetailer negative prompt"), + ("ad_confidence", "ADetailer confidence"), + ("ad_mask_k_largest", "ADetailer mask only top k largest"), + ("ad_mask_min_ratio", "ADetailer mask min ratio"), + ("ad_mask_max_ratio", "ADetailer mask max ratio"), + ("ad_x_offset", "ADetailer x offset"), + ("ad_y_offset", "ADetailer y offset"), + ("ad_dilate_erode", "ADetailer dilate/erode"), + ("ad_mask_merge_invert", "ADetailer mask merge/invert"), + ("ad_mask_blur", "ADetailer mask blur"), + ("ad_denoising_strength", "ADetailer denoising strength"), + ("ad_inpaint_only_masked", "ADetailer inpaint only masked"), + ("ad_inpaint_only_masked_padding", "ADetailer inpaint padding"), + ("ad_use_inpaint_width_height", "ADetailer use inpaint width/height"), + ("ad_inpaint_width", "ADetailer inpaint width"), + ("ad_inpaint_height", "ADetailer inpaint height"), + ("ad_use_steps", "ADetailer use separate steps"), + ("ad_steps", "ADetailer steps"), + ("ad_use_cfg_scale", "ADetailer use separate CFG scale"), + ("ad_cfg_scale", "ADetailer CFG scale"), + ("ad_use_checkpoint", "ADetailer use separate checkpoint"), + ("ad_checkpoint", "ADetailer checkpoint"), + ("ad_use_vae", "ADetailer use separate VAE"), + ("ad_vae", "ADetailer VAE"), + ("ad_use_sampler", "ADetailer use separate sampler"), + ("ad_sampler", "ADetailer sampler"), + ("ad_use_noise_multiplier", "ADetailer use separate noise multiplier"), + ("ad_noise_multiplier", "ADetailer noise multiplier"), + ("ad_use_clip_skip", "ADetailer use separate CLIP skip"), + ("ad_clip_skip", "ADetailer CLIP skip"), + ("ad_restore_face", "ADetailer restore face"), + ("ad_controlnet_model", "ADetailer ControlNet model"), + ("ad_controlnet_module", "ADetailer ControlNet module"), + ("ad_controlnet_weight", "ADetailer ControlNet weight"), + ("ad_controlnet_guidance_start", "ADetailer ControlNet guidance start"), + ("ad_controlnet_guidance_end", "ADetailer ControlNet guidance end"), +] + +AD_ENABLE = Arg(*_all_args[0]) +_args = [Arg(*args) for args in _all_args[1:]] +ALL_ARGS = ArgsList(_args) + +BBOX_SORTBY = [ + "None", + "Position (left to right)", + "Position (center to edge)", + "Area (large to small)", +] +MASK_MERGE_INVERT = ["None", "Merge", "Merge and Invert"] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/common.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/common.py new file mode 100644 index 0000000000000000000000000000000000000000..a29bdd5beb2ac3e1f027398dc176e70fb77d082d --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/common.py @@ -0,0 +1,127 @@ +from __future__ import annotations + +from collections import OrderedDict +from dataclasses import dataclass, field +from pathlib import Path +from typing import Optional, Union + +from huggingface_hub import hf_hub_download +from PIL import Image, ImageDraw +from rich import print + +repo_id = "Bingsu/adetailer" + + +@dataclass +class PredictOutput: + bboxes: list[list[int | float]] = field(default_factory=list) + masks: list[Image.Image] = field(default_factory=list) + preview: Optional[Image.Image] = None + + +def hf_download(file: str): + try: + path = hf_hub_download(repo_id, file) + except Exception: + msg = f"[-] ADetailer: Failed to load model {file!r} from huggingface" + print(msg) + path = "INVALID" + return path + + +def get_models( + model_dir: Union[str, Path], huggingface: bool = True +) -> OrderedDict[str, Optional[str]]: + model_dir = Path(model_dir) + if model_dir.is_dir(): + model_paths = [ + p + for p in model_dir.rglob("*") + if p.is_file() and p.suffix in (".pt", ".pth") + ] + else: + model_paths = [] + + models = OrderedDict() + if huggingface: + models.update( + { + "face_yolov8n.pt": hf_download("face_yolov8n.pt"), + "face_yolov8s.pt": hf_download("face_yolov8s.pt"), + "hand_yolov8n.pt": hf_download("hand_yolov8n.pt"), + "person_yolov8n-seg.pt": hf_download("person_yolov8n-seg.pt"), + "person_yolov8s-seg.pt": hf_download("person_yolov8s-seg.pt"), + } + ) + models.update( + { + "mediapipe_face_full": None, + "mediapipe_face_short": None, + "mediapipe_face_mesh": None, + "mediapipe_face_mesh_eyes_only": None, + } + ) + + invalid_keys = [k for k, v in models.items() if v == "INVALID"] + for key in invalid_keys: + models.pop(key) + + for path in model_paths: + if path.name in models: + continue + models[path.name] = str(path) + + return models + + +def create_mask_from_bbox( + bboxes: list[list[float]], shape: tuple[int, int] +) -> list[Image.Image]: + """ + Parameters + ---------- + bboxes: list[list[float]] + list of [x1, y1, x2, y2] + bounding boxes + shape: tuple[int, int] + shape of the image (width, height) + + Returns + ------- + masks: list[Image.Image] + A list of masks + + """ + masks = [] + for bbox in bboxes: + mask = Image.new("L", shape, 0) + mask_draw = ImageDraw.Draw(mask) + mask_draw.rectangle(bbox, fill=255) + masks.append(mask) + return masks + + +def create_bbox_from_mask( + masks: list[Image.Image], shape: tuple[int, int] +) -> list[list[int]]: + """ + Parameters + ---------- + masks: list[Image.Image] + A list of masks + shape: tuple[int, int] + shape of the image (width, height) + + Returns + ------- + bboxes: list[list[float]] + A list of bounding boxes + + """ + bboxes = [] + for mask in masks: + mask = mask.resize(shape) + bbox = mask.getbbox() + if bbox is not None: + bboxes.append(list(bbox)) + return bboxes diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/mask.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/mask.py new file mode 100644 index 0000000000000000000000000000000000000000..913ea7e1d780581b3950d5e2d285b66cfc5dd553 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/mask.py @@ -0,0 +1,255 @@ +from __future__ import annotations + +from enum import IntEnum +from functools import partial, reduce +from math import dist + +import cv2 +import numpy as np +from PIL import Image, ImageChops + +from adetailer.args import MASK_MERGE_INVERT +from adetailer.common import PredictOutput + + +class SortBy(IntEnum): + NONE = 0 + LEFT_TO_RIGHT = 1 + CENTER_TO_EDGE = 2 + AREA = 3 + + +class MergeInvert(IntEnum): + NONE = 0 + MERGE = 1 + MERGE_INVERT = 2 + + +def _dilate(arr: np.ndarray, value: int) -> np.ndarray: + kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (value, value)) + return cv2.dilate(arr, kernel, iterations=1) + + +def _erode(arr: np.ndarray, value: int) -> np.ndarray: + kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (value, value)) + return cv2.erode(arr, kernel, iterations=1) + + +def dilate_erode(img: Image.Image, value: int) -> Image.Image: + """ + The dilate_erode function takes an image and a value. + If the value is positive, it dilates the image by that amount. + If the value is negative, it erodes the image by that amount. + + Parameters + ---------- + img: PIL.Image.Image + the image to be processed + value: int + kernel size of dilation or erosion + + Returns + ------- + PIL.Image.Image + The image that has been dilated or eroded + """ + if value == 0: + return img + + arr = np.array(img) + arr = _dilate(arr, value) if value > 0 else _erode(arr, -value) + + return Image.fromarray(arr) + + +def offset(img: Image.Image, x: int = 0, y: int = 0) -> Image.Image: + """ + The offset function takes an image and offsets it by a given x(→) and y(↑) value. + + Parameters + ---------- + mask: Image.Image + Pass the mask image to the function + x: int + → + y: int + ↑ + + Returns + ------- + PIL.Image.Image + A new image that is offset by x and y + """ + return ImageChops.offset(img, x, -y) + + +def is_all_black(img: Image.Image) -> bool: + arr = np.array(img) + return cv2.countNonZero(arr) == 0 + + +def bbox_area(bbox: list[float]): + return (bbox[2] - bbox[0]) * (bbox[3] - bbox[1]) + + +def mask_preprocess( + masks: list[Image.Image], + kernel: int = 0, + x_offset: int = 0, + y_offset: int = 0, + merge_invert: int | MergeInvert | str = MergeInvert.NONE, +) -> list[Image.Image]: + """ + The mask_preprocess function takes a list of masks and preprocesses them. + It dilates and erodes the masks, and offsets them by x_offset and y_offset. + + Parameters + ---------- + masks: list[Image.Image] + A list of masks + kernel: int + kernel size of dilation or erosion + x_offset: int + → + y_offset: int + ↑ + + Returns + ------- + list[Image.Image] + A list of processed masks + """ + if not masks: + return [] + + if x_offset != 0 or y_offset != 0: + masks = [offset(m, x_offset, y_offset) for m in masks] + + if kernel != 0: + masks = [dilate_erode(m, kernel) for m in masks] + masks = [m for m in masks if not is_all_black(m)] + + return mask_merge_invert(masks, mode=merge_invert) + + +# Bbox sorting +def _key_left_to_right(bbox: list[float]) -> float: + """ + Left to right + + Parameters + ---------- + bbox: list[float] + list of [x1, y1, x2, y2] + """ + return bbox[0] + + +def _key_center_to_edge(bbox: list[float], *, center: tuple[float, float]) -> float: + """ + Center to edge + + Parameters + ---------- + bbox: list[float] + list of [x1, y1, x2, y2] + image: Image.Image + the image + """ + bbox_center = ((bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2) + return dist(center, bbox_center) + + +def _key_area(bbox: list[float]) -> float: + """ + Large to small + + Parameters + ---------- + bbox: list[float] + list of [x1, y1, x2, y2] + """ + return -bbox_area(bbox) + + +def sort_bboxes( + pred: PredictOutput, order: int | SortBy = SortBy.NONE +) -> PredictOutput: + if order == SortBy.NONE or len(pred.bboxes) <= 1: + return pred + + if order == SortBy.LEFT_TO_RIGHT: + key = _key_left_to_right + elif order == SortBy.CENTER_TO_EDGE: + width, height = pred.preview.size + center = (width / 2, height / 2) + key = partial(_key_center_to_edge, center=center) + elif order == SortBy.AREA: + key = _key_area + else: + raise RuntimeError + + items = len(pred.bboxes) + idx = sorted(range(items), key=lambda i: key(pred.bboxes[i])) + pred.bboxes = [pred.bboxes[i] for i in idx] + pred.masks = [pred.masks[i] for i in idx] + return pred + + +# Filter by ratio +def is_in_ratio(bbox: list[float], low: float, high: float, orig_area: int) -> bool: + area = bbox_area(bbox) + return low <= area / orig_area <= high + + +def filter_by_ratio(pred: PredictOutput, low: float, high: float) -> PredictOutput: + if not pred.bboxes: + return pred + + w, h = pred.preview.size + orig_area = w * h + items = len(pred.bboxes) + idx = [i for i in range(items) if is_in_ratio(pred.bboxes[i], low, high, orig_area)] + pred.bboxes = [pred.bboxes[i] for i in idx] + pred.masks = [pred.masks[i] for i in idx] + return pred + + +def filter_k_largest(pred: PredictOutput, k: int = 0) -> PredictOutput: + if not pred.bboxes or k == 0: + return pred + areas = [bbox_area(bbox) for bbox in pred.bboxes] + idx = np.argsort(areas)[-k:] + pred.bboxes = [pred.bboxes[i] for i in idx] + pred.masks = [pred.masks[i] for i in idx] + return pred + + +# Merge / Invert +def mask_merge(masks: list[Image.Image]) -> list[Image.Image]: + arrs = [np.array(m) for m in masks] + arr = reduce(cv2.bitwise_or, arrs) + return [Image.fromarray(arr)] + + +def mask_invert(masks: list[Image.Image]) -> list[Image.Image]: + return [ImageChops.invert(m) for m in masks] + + +def mask_merge_invert( + masks: list[Image.Image], mode: int | MergeInvert | str +) -> list[Image.Image]: + if isinstance(mode, str): + mode = MASK_MERGE_INVERT.index(mode) + + if mode == MergeInvert.NONE or not masks: + return masks + + if mode == MergeInvert.MERGE: + return mask_merge(masks) + + if mode == MergeInvert.MERGE_INVERT: + merged = mask_merge(masks) + return mask_invert(merged) + + raise RuntimeError diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/mediapipe.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/mediapipe.py new file mode 100644 index 0000000000000000000000000000000000000000..e52b620883b6e7360a3ad5e332cdd03f24d6daab --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/mediapipe.py @@ -0,0 +1,179 @@ +from __future__ import annotations + +from functools import partial + +import mediapipe as mp +import numpy as np +from PIL import Image, ImageDraw + +from adetailer import PredictOutput +from adetailer.common import create_bbox_from_mask, create_mask_from_bbox + + +def mediapipe_predict( + model_type: str, image: Image.Image, confidence: float = 0.3 +) -> PredictOutput: + mapping = { + "mediapipe_face_short": partial(mediapipe_face_detection, 0), + "mediapipe_face_full": partial(mediapipe_face_detection, 1), + "mediapipe_face_mesh": mediapipe_face_mesh, + "mediapipe_face_mesh_eyes_only": mediapipe_face_mesh_eyes_only, + } + if model_type in mapping: + func = mapping[model_type] + return func(image, confidence) + msg = f"[-] ADetailer: Invalid mediapipe model type: {model_type}, Available: {list(mapping.keys())!r}" + raise RuntimeError(msg) + + +def mediapipe_face_detection( + model_type: int, image: Image.Image, confidence: float = 0.3 +) -> PredictOutput: + img_width, img_height = image.size + + mp_face_detection = mp.solutions.face_detection + draw_util = mp.solutions.drawing_utils + + img_array = np.array(image) + + with mp_face_detection.FaceDetection( + model_selection=model_type, min_detection_confidence=confidence + ) as face_detector: + pred = face_detector.process(img_array) + + if pred.detections is None: + return PredictOutput() + + preview_array = img_array.copy() + + bboxes = [] + for detection in pred.detections: + draw_util.draw_detection(preview_array, detection) + + bbox = detection.location_data.relative_bounding_box + x1 = bbox.xmin * img_width + y1 = bbox.ymin * img_height + w = bbox.width * img_width + h = bbox.height * img_height + x2 = x1 + w + y2 = y1 + h + + bboxes.append([x1, y1, x2, y2]) + + masks = create_mask_from_bbox(bboxes, image.size) + preview = Image.fromarray(preview_array) + + return PredictOutput(bboxes=bboxes, masks=masks, preview=preview) + + +def get_convexhull(points: np.ndarray) -> list[tuple[int, int]]: + """ + Parameters + ---------- + points: An ndarray of shape (n, 2) containing the 2D points. + + Returns + ------- + list[tuple[int, int]]: Input for the draw.polygon function + """ + from scipy.spatial import ConvexHull + + hull = ConvexHull(points) + vertices = hull.vertices + return list(zip(points[vertices, 0], points[vertices, 1])) + + +def mediapipe_face_mesh(image: Image.Image, confidence: float = 0.3) -> PredictOutput: + mp_face_mesh = mp.solutions.face_mesh + draw_util = mp.solutions.drawing_utils + drawing_styles = mp.solutions.drawing_styles + + w, h = image.size + + with mp_face_mesh.FaceMesh( + static_image_mode=True, max_num_faces=20, min_detection_confidence=confidence + ) as face_mesh: + arr = np.array(image) + pred = face_mesh.process(arr) + + if pred.multi_face_landmarks is None: + return PredictOutput() + + preview = arr.copy() + masks = [] + + for landmarks in pred.multi_face_landmarks: + draw_util.draw_landmarks( + image=preview, + landmark_list=landmarks, + connections=mp_face_mesh.FACEMESH_TESSELATION, + landmark_drawing_spec=None, + connection_drawing_spec=drawing_styles.get_default_face_mesh_tesselation_style(), + ) + + points = np.array([(land.x * w, land.y * h) for land in landmarks.landmark]) + outline = get_convexhull(points) + + mask = Image.new("L", image.size, "black") + draw = ImageDraw.Draw(mask) + draw.polygon(outline, fill="white") + masks.append(mask) + + bboxes = create_bbox_from_mask(masks, image.size) + preview = Image.fromarray(preview) + return PredictOutput(bboxes=bboxes, masks=masks, preview=preview) + + +def mediapipe_face_mesh_eyes_only( + image: Image.Image, confidence: float = 0.3 +) -> PredictOutput: + mp_face_mesh = mp.solutions.face_mesh + + left_idx = np.array(list(mp_face_mesh.FACEMESH_LEFT_EYE)).flatten() + right_idx = np.array(list(mp_face_mesh.FACEMESH_RIGHT_EYE)).flatten() + + w, h = image.size + + with mp_face_mesh.FaceMesh( + static_image_mode=True, max_num_faces=20, min_detection_confidence=confidence + ) as face_mesh: + arr = np.array(image) + pred = face_mesh.process(arr) + + if pred.multi_face_landmarks is None: + return PredictOutput() + + preview = image.copy() + masks = [] + + for landmarks in pred.multi_face_landmarks: + points = np.array([(land.x * w, land.y * h) for land in landmarks.landmark]) + left_eyes = points[left_idx] + right_eyes = points[right_idx] + left_outline = get_convexhull(left_eyes) + right_outline = get_convexhull(right_eyes) + + mask = Image.new("L", image.size, "black") + draw = ImageDraw.Draw(mask) + for outline in (left_outline, right_outline): + draw.polygon(outline, fill="white") + masks.append(mask) + + bboxes = create_bbox_from_mask(masks, image.size) + preview = draw_preview(preview, bboxes, masks) + return PredictOutput(bboxes=bboxes, masks=masks, preview=preview) + + +def draw_preview( + preview: Image.Image, bboxes: list[list[int]], masks: list[Image.Image] +) -> Image.Image: + red = Image.new("RGB", preview.size, "red") + for mask in masks: + masked = Image.composite(red, preview, mask) + preview = Image.blend(preview, masked, 0.25) + + draw = ImageDraw.Draw(preview) + for bbox in bboxes: + draw.rectangle(bbox, outline="red", width=2) + + return preview diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/traceback.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/traceback.py new file mode 100644 index 0000000000000000000000000000000000000000..e3fcd9e8cd8a56281fbc02c83406f636c1c590c0 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/traceback.py @@ -0,0 +1,161 @@ +from __future__ import annotations + +import io +import platform +import sys +from importlib.metadata import version +from typing import Any, Callable + +from rich.console import Console, Group +from rich.panel import Panel +from rich.table import Table +from rich.traceback import Traceback + +from adetailer.__version__ import __version__ + + +def processing(*args: Any) -> dict[str, Any]: + try: + from modules.processing import ( + StableDiffusionProcessingImg2Img, + StableDiffusionProcessingTxt2Img, + ) + except ImportError: + return {} + + p = None + for arg in args: + if isinstance( + arg, (StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img) + ): + p = arg + break + + if p is None: + return {} + + info = { + "prompt": p.prompt, + "negative_prompt": p.negative_prompt, + "n_iter": p.n_iter, + "batch_size": p.batch_size, + "width": p.width, + "height": p.height, + "sampler_name": p.sampler_name, + "enable_hr": getattr(p, "enable_hr", False), + "hr_upscaler": getattr(p, "hr_upscaler", ""), + } + + info.update(sd_models()) + return info + + +def sd_models() -> dict[str, str]: + try: + from modules import shared + + opts = shared.opts + except Exception: + return {} + + return { + "checkpoint": getattr(opts, "sd_model_checkpoint", "------"), + "vae": getattr(opts, "sd_vae", "------"), + "unet": getattr(opts, "sd_unet", "------"), + } + + +def ad_args(*args: Any) -> dict[str, Any]: + ad_args = [ + arg + for arg in args + if isinstance(arg, dict) and arg.get("ad_model", "None") != "None" + ] + if not ad_args: + return {} + + arg0 = ad_args[0] + is_api = arg0.get("is_api", True) + return { + "version": __version__, + "ad_model": arg0["ad_model"], + "ad_prompt": arg0.get("ad_prompt", ""), + "ad_negative_prompt": arg0.get("ad_negative_prompt", ""), + "ad_controlnet_model": arg0.get("ad_controlnet_model", "None"), + "is_api": type(is_api) is not tuple, + } + + +def library_version(): + libraries = ["torch", "torchvision", "ultralytics", "mediapipe"] + d = {} + for lib in libraries: + try: + d[lib] = version(lib) + except Exception: + d[lib] = "Unknown" + return d + + +def sys_info() -> dict[str, Any]: + try: + import launch + + version = launch.git_tag() + commit = launch.commit_hash() + except Exception: + version = "Unknown (too old or vladmandic)" + commit = "Unknown" + + return { + "Platform": platform.platform(), + "Python": sys.version, + "Version": version, + "Commit": commit, + "Commandline": sys.argv, + "Libraries": library_version(), + } + + +def get_table(title: str, data: dict[str, Any]) -> Table: + table = Table(title=title, highlight=True) + table.add_column(" ", justify="right", style="dim") + table.add_column("Value") + for key, value in data.items(): + if not isinstance(value, str): + value = repr(value) + table.add_row(key, value) + + return table + + +def rich_traceback(func: Callable) -> Callable: + def wrapper(*args, **kwargs): + string = io.StringIO() + width = Console().width + width = width - 4 if width > 4 else None + console = Console(file=string, width=width) + try: + return func(*args, **kwargs) + except Exception as e: + tables = [ + get_table(title, data) + for title, data in [ + ("System info", sys_info()), + ("Inputs", processing(*args)), + ("ADetailer", ad_args(*args)), + ] + if data + ] + tables.append(Traceback()) + + console.print(Panel(Group(*tables))) + output = "\n" + string.getvalue() + + try: + error = e.__class__(output) + except Exception: + error = RuntimeError(output) + raise error from None + + return wrapper diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/ui.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/ui.py new file mode 100644 index 0000000000000000000000000000000000000000..b05e3aa351ecdaf804943324eb6d53219b142cf8 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/ui.py @@ -0,0 +1,605 @@ +from __future__ import annotations + +from dataclasses import dataclass +from functools import partial +from types import SimpleNamespace +from typing import Any, Callable + +import gradio as gr + +from adetailer import AFTER_DETAILER, __version__ +from adetailer.args import AD_ENABLE, ALL_ARGS, MASK_MERGE_INVERT +from controlnet_ext import controlnet_exists, get_cn_models + +cn_module_choices = [ + "inpaint_global_harmonious", + "inpaint_only", + "inpaint_only+lama", +] + + +class Widgets(SimpleNamespace): + def tolist(self): + return [getattr(self, attr) for attr in ALL_ARGS.attrs] + + +@dataclass +class WebuiInfo: + ad_model_list: list[str] + sampler_names: list[str] + t2i_button: gr.Button + i2i_button: gr.Button + checkpoints_list: list[str] + vae_list: list[str] + + +def gr_interactive(value: bool = True): + return gr.update(interactive=value) + + +def ordinal(n: int) -> str: + d = {1: "st", 2: "nd", 3: "rd"} + return str(n) + ("th" if 11 <= n % 100 <= 13 else d.get(n % 10, "th")) + + +def suffix(n: int, c: str = " ") -> str: + return "" if n == 0 else c + ordinal(n + 1) + + +def on_widget_change(state: dict, value: Any, *, attr: str): + state[attr] = value + return state + + +def on_generate_click(state: dict, *values: Any): + for attr, value in zip(ALL_ARGS.attrs, values): + state[attr] = value + state["is_api"] = () + return state + + +def on_cn_model_update(cn_model: str): + if "inpaint" in cn_model: + return gr.update( + visible=True, choices=cn_module_choices, value=cn_module_choices[0] + ) + return gr.update(visible=False, choices=["None"], value="None") + + +def elem_id(item_id: str, n: int, is_img2img: bool) -> str: + tap = "img2img" if is_img2img else "txt2img" + suf = suffix(n, "_") + return f"script_{tap}_adetailer_{item_id}{suf}" + + +def adui( + num_models: int, + is_img2img: bool, + webui_info: WebuiInfo, +): + states = [] + infotext_fields = [] + eid = partial(elem_id, n=0, is_img2img=is_img2img) + + with gr.Accordion(AFTER_DETAILER, open=False, elem_id=eid("ad_main_accordion")): + with gr.Row(): + with gr.Column(scale=6): + ad_enable = gr.Checkbox( + label="Enable ADetailer", + value=False, + visible=True, + elem_id=eid("ad_enable"), + ) + + with gr.Column(scale=1, min_width=180): + gr.Markdown( + f"v{__version__}", + elem_id=eid("ad_version"), + ) + + infotext_fields.append((ad_enable, AD_ENABLE.name)) + + with gr.Group(), gr.Tabs(): + for n in range(num_models): + with gr.Tab(ordinal(n + 1)): + state, infofields = one_ui_group( + n=n, + is_img2img=is_img2img, + webui_info=webui_info, + ) + + states.append(state) + infotext_fields.extend(infofields) + + # components: [bool, dict, dict, ...] + components = [ad_enable, *states] + return components, infotext_fields + + +def one_ui_group(n: int, is_img2img: bool, webui_info: WebuiInfo): + w = Widgets() + state = gr.State({}) + eid = partial(elem_id, n=n, is_img2img=is_img2img) + + with gr.Row(): + model_choices = ( + [*webui_info.ad_model_list, "None"] + if n == 0 + else ["None", *webui_info.ad_model_list] + ) + + w.ad_model = gr.Dropdown( + label="ADetailer model" + suffix(n), + choices=model_choices, + value=model_choices[0], + visible=True, + type="value", + elem_id=eid("ad_model"), + ) + + with gr.Group(): + with gr.Row(elem_id=eid("ad_toprow_prompt")): + w.ad_prompt = gr.Textbox( + label="ad_prompt" + suffix(n), + show_label=False, + lines=3, + placeholder="ADetailer prompt" + + suffix(n) + + "\nIf blank, the main prompt is used.", + elem_id=eid("ad_prompt"), + ) + + with gr.Row(elem_id=eid("ad_toprow_negative_prompt")): + w.ad_negative_prompt = gr.Textbox( + label="ad_negative_prompt" + suffix(n), + show_label=False, + lines=2, + placeholder="ADetailer negative prompt" + + suffix(n) + + "\nIf blank, the main negative prompt is used.", + elem_id=eid("ad_negative_prompt"), + ) + + with gr.Group(): + with gr.Accordion( + "Detection", open=False, elem_id=eid("ad_detection_accordion") + ): + detection(w, n, is_img2img) + + with gr.Accordion( + "Mask Preprocessing", + open=False, + elem_id=eid("ad_mask_preprocessing_accordion"), + ): + mask_preprocessing(w, n, is_img2img) + + with gr.Accordion( + "Inpainting", open=False, elem_id=eid("ad_inpainting_accordion") + ): + inpainting(w, n, is_img2img, webui_info) + + with gr.Group(): + controlnet(w, n, is_img2img) + + all_inputs = [state, *w.tolist()] + target_button = webui_info.i2i_button if is_img2img else webui_info.t2i_button + target_button.click( + fn=on_generate_click, inputs=all_inputs, outputs=state, queue=False + ) + + infotext_fields = [(getattr(w, attr), name + suffix(n)) for attr, name in ALL_ARGS] + + return state, infotext_fields + + +def detection(w: Widgets, n: int, is_img2img: bool): + eid = partial(elem_id, n=n, is_img2img=is_img2img) + + with gr.Row(): + with gr.Column(variant="compact"): + w.ad_confidence = gr.Slider( + label="Detection model confidence threshold" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.01, + value=0.3, + visible=True, + elem_id=eid("ad_confidence"), + ) + w.ad_mask_k_largest = gr.Slider( + label="Mask only the top k largest (0 to disable)" + suffix(n), + minumum=0, + maximum=10, + step=1, + value=0, + visible=True, + elem_id=eid("ad_mask_k_largest"), + ) + + with gr.Column(variant="compact"): + w.ad_mask_min_ratio = gr.Slider( + label="Mask min area ratio" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.001, + value=0.0, + visible=True, + elem_id=eid("ad_mask_min_ratio"), + ) + w.ad_mask_max_ratio = gr.Slider( + label="Mask max area ratio" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.001, + value=1.0, + visible=True, + elem_id=eid("ad_mask_max_ratio"), + ) + + +def mask_preprocessing(w: Widgets, n: int, is_img2img: bool): + eid = partial(elem_id, n=n, is_img2img=is_img2img) + + with gr.Group(): + with gr.Row(): + with gr.Column(variant="compact"): + w.ad_x_offset = gr.Slider( + label="Mask x(→) offset" + suffix(n), + minimum=-200, + maximum=200, + step=1, + value=0, + visible=True, + elem_id=eid("ad_x_offset"), + ) + w.ad_y_offset = gr.Slider( + label="Mask y(↑) offset" + suffix(n), + minimum=-200, + maximum=200, + step=1, + value=0, + visible=True, + elem_id=eid("ad_y_offset"), + ) + + with gr.Column(variant="compact"): + w.ad_dilate_erode = gr.Slider( + label="Mask erosion (-) / dilation (+)" + suffix(n), + minimum=-128, + maximum=128, + step=4, + value=4, + visible=True, + elem_id=eid("ad_dilate_erode"), + ) + + with gr.Row(): + w.ad_mask_merge_invert = gr.Radio( + label="Mask merge mode" + suffix(n), + choices=MASK_MERGE_INVERT, + value="None", + elem_id=eid("ad_mask_merge_invert"), + ) + + +def inpainting(w: Widgets, n: int, is_img2img: bool, webui_info: WebuiInfo): + eid = partial(elem_id, n=n, is_img2img=is_img2img) + + with gr.Group(): + with gr.Row(): + w.ad_mask_blur = gr.Slider( + label="Inpaint mask blur" + suffix(n), + minimum=0, + maximum=64, + step=1, + value=4, + visible=True, + elem_id=eid("ad_mask_blur"), + ) + + w.ad_denoising_strength = gr.Slider( + label="Inpaint denoising strength" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.01, + value=0.4, + visible=True, + elem_id=eid("ad_denoising_strength"), + ) + + with gr.Row(): + with gr.Column(variant="compact"): + w.ad_inpaint_only_masked = gr.Checkbox( + label="Inpaint only masked" + suffix(n), + value=True, + visible=True, + elem_id=eid("ad_inpaint_only_masked"), + ) + w.ad_inpaint_only_masked_padding = gr.Slider( + label="Inpaint only masked padding, pixels" + suffix(n), + minimum=0, + maximum=256, + step=4, + value=32, + visible=True, + elem_id=eid("ad_inpaint_only_masked_padding"), + ) + + w.ad_inpaint_only_masked.change( + gr_interactive, + inputs=w.ad_inpaint_only_masked, + outputs=w.ad_inpaint_only_masked_padding, + queue=False, + ) + + with gr.Column(variant="compact"): + w.ad_use_inpaint_width_height = gr.Checkbox( + label="Use separate width/height" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_inpaint_width_height"), + ) + + w.ad_inpaint_width = gr.Slider( + label="inpaint width" + suffix(n), + minimum=64, + maximum=2048, + step=4, + value=512, + visible=True, + elem_id=eid("ad_inpaint_width"), + ) + + w.ad_inpaint_height = gr.Slider( + label="inpaint height" + suffix(n), + minimum=64, + maximum=2048, + step=4, + value=512, + visible=True, + elem_id=eid("ad_inpaint_height"), + ) + + w.ad_use_inpaint_width_height.change( + lambda value: (gr_interactive(value), gr_interactive(value)), + inputs=w.ad_use_inpaint_width_height, + outputs=[w.ad_inpaint_width, w.ad_inpaint_height], + queue=False, + ) + + with gr.Row(): + with gr.Column(variant="compact"): + w.ad_use_steps = gr.Checkbox( + label="Use separate steps" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_steps"), + ) + + w.ad_steps = gr.Slider( + label="ADetailer steps" + suffix(n), + minimum=1, + maximum=150, + step=1, + value=28, + visible=True, + elem_id=eid("ad_steps"), + ) + + w.ad_use_steps.change( + gr_interactive, + inputs=w.ad_use_steps, + outputs=w.ad_steps, + queue=False, + ) + + with gr.Column(variant="compact"): + w.ad_use_cfg_scale = gr.Checkbox( + label="Use separate CFG scale" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_cfg_scale"), + ) + + w.ad_cfg_scale = gr.Slider( + label="ADetailer CFG scale" + suffix(n), + minimum=0.0, + maximum=30.0, + step=0.5, + value=7.0, + visible=True, + elem_id=eid("ad_cfg_scale"), + ) + + w.ad_use_cfg_scale.change( + gr_interactive, + inputs=w.ad_use_cfg_scale, + outputs=w.ad_cfg_scale, + queue=False, + ) + + with gr.Row(): + with gr.Column(variant="compact"): + w.ad_use_checkpoint = gr.Checkbox( + label="Use separate checkpoint (experimental)" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_checkpoint"), + ) + + ckpts = ["Use same checkpoint", *webui_info.checkpoints_list] + + w.ad_checkpoint = gr.Dropdown( + label="ADetailer checkpoint" + suffix(n), + choices=ckpts, + value=ckpts[0], + visible=True, + elem_id=eid("ad_checkpoint"), + ) + + with gr.Column(variant="compact"): + w.ad_use_vae = gr.Checkbox( + label="Use separate VAE (experimental)" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_vae"), + ) + + vaes = ["Use same VAE", *webui_info.vae_list] + + w.ad_vae = gr.Dropdown( + label="ADetailer VAE" + suffix(n), + choices=vaes, + value=vaes[0], + visible=True, + elem_id=eid("ad_vae"), + ) + + with gr.Row(), gr.Column(variant="compact"): + w.ad_use_sampler = gr.Checkbox( + label="Use separate sampler" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_sampler"), + ) + + w.ad_sampler = gr.Dropdown( + label="ADetailer sampler" + suffix(n), + choices=webui_info.sampler_names, + value=webui_info.sampler_names[0], + visible=True, + elem_id=eid("ad_sampler"), + ) + + w.ad_use_sampler.change( + gr_interactive, + inputs=w.ad_use_sampler, + outputs=w.ad_sampler, + queue=False, + ) + + with gr.Row(): + with gr.Column(variant="compact"): + w.ad_use_noise_multiplier = gr.Checkbox( + label="Use separate noise multiplier" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_noise_multiplier"), + ) + + w.ad_noise_multiplier = gr.Slider( + label="Noise multiplier for img2img" + suffix(n), + minimum=0.5, + maximum=1.5, + step=0.01, + value=1.0, + visible=True, + elem_id=eid("ad_noise_multiplier"), + ) + + w.ad_use_noise_multiplier.change( + gr_interactive, + inputs=w.ad_use_noise_multiplier, + outputs=w.ad_noise_multiplier, + queue=False, + ) + + with gr.Column(variant="compact"): + w.ad_use_clip_skip = gr.Checkbox( + label="Use separate CLIP skip" + suffix(n), + value=False, + visible=True, + elem_id=eid("ad_use_clip_skip"), + ) + + w.ad_clip_skip = gr.Slider( + label="ADetailer CLIP skip" + suffix(n), + minimum=1, + maximum=12, + step=1, + value=1, + visible=True, + elem_id=eid("ad_clip_skip"), + ) + + w.ad_use_clip_skip.change( + gr_interactive, + inputs=w.ad_use_clip_skip, + outputs=w.ad_clip_skip, + queue=False, + ) + + with gr.Row(), gr.Column(variant="compact"): + w.ad_restore_face = gr.Checkbox( + label="Restore faces after ADetailer" + suffix(n), + value=False, + elem_id=eid("ad_restore_face"), + ) + + +def controlnet(w: Widgets, n: int, is_img2img: bool): + eid = partial(elem_id, n=n, is_img2img=is_img2img) + cn_models = ["None", *get_cn_models()] + + with gr.Row(variant="panel"): + with gr.Column(variant="compact"): + w.ad_controlnet_model = gr.Dropdown( + label="ControlNet model" + suffix(n), + choices=cn_models, + value="None", + visible=True, + type="value", + interactive=controlnet_exists, + elem_id=eid("ad_controlnet_model"), + ) + + w.ad_controlnet_module = gr.Dropdown( + label="ControlNet module" + suffix(n), + choices=cn_module_choices, + value="inpaint_global_harmonious", + visible=False, + type="value", + interactive=controlnet_exists, + elem_id=eid("ad_controlnet_module"), + ) + + w.ad_controlnet_weight = gr.Slider( + label="ControlNet weight" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.01, + value=1.0, + visible=True, + interactive=controlnet_exists, + elem_id=eid("ad_controlnet_weight"), + ) + + w.ad_controlnet_model.change( + on_cn_model_update, + inputs=w.ad_controlnet_model, + outputs=w.ad_controlnet_module, + queue=False, + ) + + with gr.Column(variant="compact"): + w.ad_controlnet_guidance_start = gr.Slider( + label="ControlNet guidance start" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.01, + value=0.0, + visible=True, + interactive=controlnet_exists, + elem_id=eid("ad_controlnet_guidance_start"), + ) + + w.ad_controlnet_guidance_end = gr.Slider( + label="ControlNet guidance end" + suffix(n), + minimum=0.0, + maximum=1.0, + step=0.01, + value=1.0, + visible=True, + interactive=controlnet_exists, + elem_id=eid("ad_controlnet_guidance_end"), + ) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/ultralytics.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/ultralytics.py new file mode 100644 index 0000000000000000000000000000000000000000..addd0f5c01435a03d899a562d5e5e8b113fabcbc --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/adetailer/ultralytics.py @@ -0,0 +1,50 @@ +from __future__ import annotations + +from pathlib import Path + +import cv2 +from PIL import Image +from torchvision.transforms.functional import to_pil_image +from ultralytics import YOLO + +from adetailer import PredictOutput +from adetailer.common import create_mask_from_bbox + + +def ultralytics_predict( + model_path: str | Path, + image: Image.Image, + confidence: float = 0.3, + device: str = "", +) -> PredictOutput: + model = YOLO(model_path) + pred = model(image, conf=confidence, device=device) + + bboxes = pred[0].boxes.xyxy.cpu().numpy() + if bboxes.size == 0: + return PredictOutput() + bboxes = bboxes.tolist() + + if pred[0].masks is None: + masks = create_mask_from_bbox(bboxes, image.size) + else: + masks = mask_to_pil(pred[0].masks.data, image.size) + preview = pred[0].plot() + preview = cv2.cvtColor(preview, cv2.COLOR_BGR2RGB) + preview = Image.fromarray(preview) + + return PredictOutput(bboxes=bboxes, masks=masks, preview=preview) + + +def mask_to_pil(masks, shape: tuple[int, int]) -> list[Image.Image]: + """ + Parameters + ---------- + masks: torch.Tensor, dtype=torch.float32, shape=(N, H, W). + The device can be CUDA, but `to_pil_image` takes care of that. + + shape: tuple[int, int] + (width, height) of the original image + """ + n = masks.shape[0] + return [to_pil_image(masks[i], mode="L").resize(shape) for i in range(n)] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/__init__.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0ab666835157561426d684d798735e724a5a4dbe --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/__init__.py @@ -0,0 +1,7 @@ +from .controlnet_ext import ControlNetExt, controlnet_exists, get_cn_models + +__all__ = [ + "ControlNetExt", + "controlnet_exists", + "get_cn_models", +] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/controlnet_ext.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/controlnet_ext.py new file mode 100644 index 0000000000000000000000000000000000000000..ec86d46b713c2ee39d9bdd615411494cfe05aba3 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/controlnet_ext.py @@ -0,0 +1,140 @@ +from __future__ import annotations + +import importlib +import re +from functools import lru_cache +from pathlib import Path + +from modules import extensions, sd_models, shared +from modules.paths import data_path, models_path, script_path + +ext_path = Path(data_path, "extensions") +ext_builtin_path = Path(script_path, "extensions-builtin") +controlnet_exists = False +controlnet_path = None +cn_base_path = "" + +for extension in extensions.active(): + if not extension.enabled: + continue + # For cases like sd-webui-controlnet-master + if "sd-webui-controlnet" in extension.name: + controlnet_exists = True + controlnet_path = Path(extension.path) + cn_base_path = ".".join(controlnet_path.parts[-2:]) + break + +cn_model_module = { + "inpaint": "inpaint_global_harmonious", + "scribble": "t2ia_sketch_pidi", + "lineart": "lineart_coarse", + "openpose": "openpose_full", + "tile": None, +} +cn_model_regex = re.compile("|".join(cn_model_module.keys())) + + +class ControlNetExt: + def __init__(self): + self.cn_models = ["None"] + self.cn_available = False + self.external_cn = None + + def init_controlnet(self): + import_path = cn_base_path + ".scripts.external_code" + + self.external_cn = importlib.import_module(import_path, "external_code") + self.cn_available = True + models = self.external_cn.get_models() + self.cn_models.extend(m for m in models if cn_model_regex.search(m)) + + def update_scripts_args( + self, + p, + model: str, + module: str | None, + weight: float, + guidance_start: float, + guidance_end: float, + ): + if (not self.cn_available) or model == "None": + return + + if module is None: + for m, v in cn_model_module.items(): + if m in model: + module = v + break + + cn_units = [ + self.external_cn.ControlNetUnit( + model=model, + weight=weight, + control_mode=self.external_cn.ControlMode.BALANCED, + module=module, + guidance_start=guidance_start, + guidance_end=guidance_end, + pixel_perfect=True, + ) + ] + + self.external_cn.update_cn_script_in_processing(p, cn_units) + + +def get_cn_model_dirs() -> list[Path]: + cn_model_dir = Path(models_path, "ControlNet") + if controlnet_path is not None: + cn_model_dir_old = controlnet_path.joinpath("models") + else: + cn_model_dir_old = None + ext_dir1 = shared.opts.data.get("control_net_models_path", "") + ext_dir2 = getattr(shared.cmd_opts, "controlnet_dir", "") + + dirs = [cn_model_dir] + for ext_dir in [cn_model_dir_old, ext_dir1, ext_dir2]: + if ext_dir: + dirs.append(Path(ext_dir)) + + return dirs + + +@lru_cache +def _get_cn_models() -> list[str]: + """ + Since we can't import ControlNet, we use a function that does something like + controlnet's `list(global_state.cn_models_names.values())`. + """ + cn_model_exts = (".pt", ".pth", ".ckpt", ".safetensors") + dirs = get_cn_model_dirs() + name_filter = shared.opts.data.get("control_net_models_name_filter", "") + name_filter = name_filter.strip(" ").lower() + + model_paths = [] + + for base in dirs: + if not base.exists(): + continue + + for p in base.rglob("*"): + if ( + p.is_file() + and p.suffix in cn_model_exts + and cn_model_regex.search(p.name) + ): + if name_filter and name_filter not in p.name.lower(): + continue + model_paths.append(p) + model_paths.sort(key=lambda p: p.name) + + models = [] + for p in model_paths: + model_hash = sd_models.model_hash(p) + name = f"{p.stem} [{model_hash}]" + models.append(name) + return models + + +def get_cn_models() -> list[str]: + if controlnet_exists: + return _get_cn_models() + return [] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/restore.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/restore.py new file mode 100644 index 0000000000000000000000000000000000000000..152ffd0a9732b5512e4440b795a1ad89bcb27cab --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/controlnet_ext/restore.py @@ -0,0 +1,43 @@ +from __future__ import annotations + +from contextlib import contextmanager + +from modules import img2img, processing, shared + + +class CNHijackRestore: + def __init__(self): + self.process = hasattr(processing, "__controlnet_original_process_images_inner") + self.img2img = hasattr(img2img, "__controlnet_original_process_batch") + + def __enter__(self): + if self.process: + self.orig_process = processing.process_images_inner + processing.process_images_inner = getattr( + processing, "__controlnet_original_process_images_inner" + ) + if self.img2img: + self.orig_img2img = img2img.process_batch + img2img.process_batch = getattr( + img2img, "__controlnet_original_process_batch" + ) + + def __exit__(self, *args, **kwargs): + if self.process: + processing.process_images_inner = self.orig_process + if self.img2img: + img2img.process_batch = self.orig_img2img + + +@contextmanager +def cn_allow_script_control(): + orig = False + if "control_net_allow_script_control" in shared.opts.data: + try: + orig = shared.opts.data["control_net_allow_script_control"] + shared.opts.data["control_net_allow_script_control"] = True + yield + finally: + shared.opts.data["control_net_allow_script_control"] = orig + else: + yield diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/install.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/install.py new file mode 100644 index 0000000000000000000000000000000000000000..426d8fe27249ffbb5512d91ff2865d61f337be28 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/install.py @@ -0,0 +1,76 @@ +from __future__ import annotations + +import importlib.util +import subprocess +import sys +from importlib.metadata import version # python >= 3.8 + +from packaging.version import parse + +import_name = {"py-cpuinfo": "cpuinfo", "protobuf": "google.protobuf"} + + +def is_installed( + package: str, min_version: str | None = None, max_version: str | None = None +): + name = import_name.get(package, package) + try: + spec = importlib.util.find_spec(name) + except ModuleNotFoundError: + return False + + if spec is None: + return False + + if not min_version and not max_version: + return True + + if not min_version: + min_version = "0.0.0" + if not max_version: + max_version = "99999999.99999999.99999999" + + try: + pkg_version = version(package) + return parse(min_version) <= parse(pkg_version) <= parse(max_version) + except Exception: + return False + + +def run_pip(*args): + subprocess.run([sys.executable, "-m", "pip", "install", *args]) + + +def install(): + deps = [ + # requirements + ("ultralytics", "8.0.173", None), + ("mediapipe", "0.10.3", None), + ("rich", "13.0.0", None), + # mediapipe + ("protobuf", "3.20", "3.9999"), + ] + + for pkg, low, high in deps: + if not is_installed(pkg, low, high): + if low and high: + cmd = f"{pkg}>={low},<={high}" + elif low: + cmd = f"{pkg}>={low}" + elif high: + cmd = f"{pkg}<={high}" + else: + cmd = pkg + + run_pip("-U", cmd) + + +try: + import launch + + skip_install = launch.args.skip_install +except Exception: + skip_install = False + +if not skip_install: + install() diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/preload.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/preload.py new file mode 100644 index 0000000000000000000000000000000000000000..10be161f22b0a5ef7083609829a21b547eae9aea --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/preload.py @@ -0,0 +1,9 @@ +import argparse + + +def preload(parser: argparse.ArgumentParser): + parser.add_argument( + "--ad-no-huggingface", + action="store_true", + help="Don't use adetailer models from huggingface", + ) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/pyproject.toml b/TestingforfaivsixEx/content/eichellis/extensions/adetai/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..b2407ed41791a535b5c43de6644d1a1eb6fb2d44 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/pyproject.toml @@ -0,0 +1,40 @@ +[project] +name = "adetailer" +description = "An object detection and auto-mask extension for stable diffusion webui." +authors = [{ name = "dowon", email = "ks2515@naver.com" }] +requires-python = ">=3.8,<3.12" +readme = "README.md" +license = { text = "AGPL-3.0" } + +[project.urls] +repository = "https://github.com/Bing-su/adetailer" + +[tool.isort] +profile = "black" +known_first_party = ["launch", "modules"] + +[tool.ruff] +select = [ + "A", + "B", + "C4", + "C90", + "E", + "EM", + "F", + "FA", + "I001", + "ISC", + "N", + "PIE", + "PT", + "RET", + "RUF", + "SIM", + "UP", + "W", +] +ignore = ["B008", "B905", "E501", "F401", "UP007"] + +[tool.ruff.isort] +known-first-party = ["launch", "modules"] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/adetai/scripts/!adetailer.py b/TestingforfaivsixEx/content/eichellis/extensions/adetai/scripts/!adetailer.py new file mode 100644 index 0000000000000000000000000000000000000000..544e7b2775cd656089f4e42987a94e22235ed3e6 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/adetai/scripts/!adetailer.py @@ -0,0 +1,834 @@ +from __future__ import annotations + +import os +import platform +import re +import sys +import traceback +from contextlib import contextmanager +from copy import copy, deepcopy +from functools import partial +from pathlib import Path +from textwrap import dedent +from typing import Any + +import gradio as gr +import torch +from rich import print + +import modules +from adetailer import ( + AFTER_DETAILER, + __version__, + get_models, + mediapipe_predict, + ultralytics_predict, +) +from adetailer.args import ALL_ARGS, BBOX_SORTBY, ADetailerArgs, EnableChecker +from adetailer.common import PredictOutput +from adetailer.mask import ( + filter_by_ratio, + filter_k_largest, + mask_preprocess, + sort_bboxes, +) +from adetailer.traceback import rich_traceback +from adetailer.ui import WebuiInfo, adui, ordinal, suffix +from controlnet_ext import ControlNetExt, controlnet_exists, get_cn_models +from controlnet_ext.restore import ( + CNHijackRestore, + cn_allow_script_control, +) +from modules import images, safe, script_callbacks, scripts, shared +from modules.devices import NansException +from modules.paths import data_path, models_path +from modules.processing import ( + Processed, + StableDiffusionProcessingImg2Img, + create_infotext, + process_images, +) +from modules.sd_samplers import all_samplers +from modules.shared import cmd_opts, opts, state + +no_huggingface = getattr(cmd_opts, "ad_no_huggingface", False) +adetailer_dir = Path(models_path, "adetailer") +model_mapping = get_models(adetailer_dir, huggingface=not no_huggingface) +txt2img_submit_button = img2img_submit_button = None +SCRIPT_DEFAULT = "dynamic_prompting,dynamic_thresholding,wildcard_recursive,wildcards,lora_block_weight" + +if ( + not adetailer_dir.exists() + and adetailer_dir.parent.exists() + and os.access(adetailer_dir.parent, os.W_OK) +): + adetailer_dir.mkdir() + +print( + f"[-] ADetailer initialized. version: {__version__}, num models: {len(model_mapping)}" +) + + +@contextmanager +def change_torch_load(): + orig = torch.load + try: + torch.load = safe.unsafe_torch_load + yield + finally: + torch.load = orig + + +@contextmanager +def pause_total_tqdm(): + orig = opts.data.get("multiple_tqdm", True) + try: + opts.data["multiple_tqdm"] = False + yield + finally: + opts.data["multiple_tqdm"] = orig + + +@contextmanager +def preseve_prompts(p): + all_pt = copy(p.all_prompts) + all_ng = copy(p.all_negative_prompts) + try: + yield + finally: + p.all_prompts = all_pt + p.all_negative_prompts = all_ng + + +class AfterDetailerScript(scripts.Script): + def __init__(self): + super().__init__() + self.ultralytics_device = self.get_ultralytics_device() + + self.controlnet_ext = None + + def __repr__(self): + return f"{self.__class__.__name__}(version={__version__})" + + def title(self): + return AFTER_DETAILER + + def show(self, is_img2img): + return scripts.AlwaysVisible + + def ui(self, is_img2img): + num_models = opts.data.get("ad_max_models", 2) + ad_model_list = list(model_mapping.keys()) + sampler_names = [sampler.name for sampler in all_samplers] + + try: + checkpoint_list = modules.sd_models.checkpoint_tiles(use_shorts=True) + except TypeError: + checkpoint_list = modules.sd_models.checkpoint_tiles() + vae_list = modules.shared_items.sd_vae_items() + + webui_info = WebuiInfo( + ad_model_list=ad_model_list, + sampler_names=sampler_names, + t2i_button=txt2img_submit_button, + i2i_button=img2img_submit_button, + checkpoints_list=checkpoint_list, + vae_list=vae_list, + ) + + components, infotext_fields = adui(num_models, is_img2img, webui_info) + + self.infotext_fields = infotext_fields + return components + + def init_controlnet_ext(self) -> None: + if self.controlnet_ext is not None: + return + self.controlnet_ext = ControlNetExt() + + if controlnet_exists: + try: + self.controlnet_ext.init_controlnet() + except ImportError: + error = traceback.format_exc() + print( + f"[-] ADetailer: ControlNetExt init failed:\n{error}", + file=sys.stderr, + ) + + def update_controlnet_args(self, p, args: ADetailerArgs) -> None: + if self.controlnet_ext is None: + self.init_controlnet_ext() + + if ( + self.controlnet_ext is not None + and self.controlnet_ext.cn_available + and args.ad_controlnet_model != "None" + ): + self.controlnet_ext.update_scripts_args( + p, + model=args.ad_controlnet_model, + module=args.ad_controlnet_module, + weight=args.ad_controlnet_weight, + guidance_start=args.ad_controlnet_guidance_start, + guidance_end=args.ad_controlnet_guidance_end, + ) + + def is_ad_enabled(self, *args_) -> bool: + arg_list = [arg for arg in args_ if isinstance(arg, dict)] + if not args_ or not arg_list or not isinstance(args_[0], (bool, dict)): + message = f""" + [-] ADetailer: Invalid arguments passed to ADetailer. + input: {args_!r} + ADetailer disabled. + """ + print(dedent(message), file=sys.stderr) + return False + enable = args_[0] if isinstance(args_[0], bool) else True + checker = EnableChecker(enable=enable, arg_list=arg_list) + return checker.is_enabled() + + def get_args(self, p, *args_) -> list[ADetailerArgs]: + """ + `args_` is at least 1 in length by `is_ad_enabled` immediately above + """ + args = [arg for arg in args_ if isinstance(arg, dict)] + + if not args: + message = f"[-] ADetailer: Invalid arguments passed to ADetailer: {args_!r}" + raise ValueError(message) + + if hasattr(p, "adetailer_xyz"): + args[0] = {**args[0], **p.adetailer_xyz} + + all_inputs = [] + + for n, arg_dict in enumerate(args, 1): + try: + inp = ADetailerArgs(**arg_dict) + except ValueError as e: + msgs = [ + f"[-] ADetailer: ValidationError when validating {ordinal(n)} arguments: {e}\n" + ] + for attr in ALL_ARGS.attrs: + arg = arg_dict.get(attr) + dtype = type(arg) + arg = "DEFAULT" if arg is None else repr(arg) + msgs.append(f" {attr}: {arg} ({dtype})") + raise ValueError("\n".join(msgs)) from e + + all_inputs.append(inp) + + return all_inputs + + def extra_params(self, arg_list: list[ADetailerArgs]) -> dict: + params = {} + for n, args in enumerate(arg_list): + params.update(args.extra_params(suffix=suffix(n))) + params["ADetailer version"] = __version__ + return params + + @staticmethod + def get_ultralytics_device() -> str: + if "adetailer" in shared.cmd_opts.use_cpu: + return "cpu" + + if platform.system() == "Darwin": + return "" + + vram_args = ["lowvram", "medvram", "medvram_sdxl"] + if any(getattr(cmd_opts, vram, False) for vram in vram_args): + return "cpu" + + return "" + + def prompt_blank_replacement( + self, all_prompts: list[str], i: int, default: str + ) -> str: + if not all_prompts: + return default + if i < len(all_prompts): + return all_prompts[i] + j = i % len(all_prompts) + return all_prompts[j] + + def _get_prompt( + self, ad_prompt: str, all_prompts: list[str], i: int, default: str + ) -> list[str]: + prompts = re.split(r"\s*\[SEP\]\s*", ad_prompt) + blank_replacement = self.prompt_blank_replacement(all_prompts, i, default) + for n in range(len(prompts)): + if not prompts[n]: + prompts[n] = blank_replacement + elif "[PROMPT]" in prompts[n]: + prompts[n] = prompts[n].replace("[PROMPT]", f" {blank_replacement} ") + return prompts + + def get_prompt(self, p, args: ADetailerArgs) -> tuple[list[str], list[str]]: + i = p._ad_idx + + prompt = self._get_prompt(args.ad_prompt, p.all_prompts, i, p.prompt) + negative_prompt = self._get_prompt( + args.ad_negative_prompt, p.all_negative_prompts, i, p.negative_prompt + ) + + return prompt, negative_prompt + + def get_seed(self, p) -> tuple[int, int]: + i = p._ad_idx + + if not p.all_seeds: + seed = p.seed + elif i < len(p.all_seeds): + seed = p.all_seeds[i] + else: + j = i % len(p.all_seeds) + seed = p.all_seeds[j] + + if not p.all_subseeds: + subseed = p.subseed + elif i < len(p.all_subseeds): + subseed = p.all_subseeds[i] + else: + j = i % len(p.all_subseeds) + subseed = p.all_subseeds[j] + + return seed, subseed + + def get_width_height(self, p, args: ADetailerArgs) -> tuple[int, int]: + if args.ad_use_inpaint_width_height: + width = args.ad_inpaint_width + height = args.ad_inpaint_height + else: + width = p.width + height = p.height + + return width, height + + def get_steps(self, p, args: ADetailerArgs) -> int: + return args.ad_steps if args.ad_use_steps else p.steps + + def get_cfg_scale(self, p, args: ADetailerArgs) -> float: + return args.ad_cfg_scale if args.ad_use_cfg_scale else p.cfg_scale + + def get_sampler(self, p, args: ADetailerArgs) -> str: + return args.ad_sampler if args.ad_use_sampler else p.sampler_name + + def get_override_settings(self, p, args: ADetailerArgs) -> dict[str, Any]: + d = {} + + if args.ad_use_clip_skip: + d["CLIP_stop_at_last_layers"] = args.ad_clip_skip + + if ( + args.ad_use_checkpoint + and args.ad_checkpoint + and args.ad_checkpoint not in ("None", "Use same checkpoint") + ): + d["sd_model_checkpoint"] = args.ad_checkpoint + + if ( + args.ad_use_vae + and args.ad_vae + and args.ad_vae not in ("None", "Use same VAE") + ): + d["sd_vae"] = args.ad_vae + return d + + def get_initial_noise_multiplier(self, p, args: ADetailerArgs) -> float | None: + return args.ad_noise_multiplier if args.ad_use_noise_multiplier else None + + @staticmethod + def infotext(p) -> str: + return create_infotext( + p, p.all_prompts, p.all_seeds, p.all_subseeds, None, 0, 0 + ) + + def write_params_txt(self, p) -> None: + infotext = self.infotext(p) + params_txt = Path(data_path, "params.txt") + params_txt.write_text(infotext, encoding="utf-8") + + def script_filter(self, p, args: ADetailerArgs): + script_runner = copy(p.scripts) + script_args = deepcopy(p.script_args) + self.disable_controlnet_units(script_args) + + ad_only_seleted_scripts = opts.data.get("ad_only_seleted_scripts", True) + if not ad_only_seleted_scripts: + return script_runner, script_args + + ad_script_names = opts.data.get("ad_script_names", SCRIPT_DEFAULT) + script_names_set = { + name + for script_name in ad_script_names.split(",") + for name in (script_name, script_name.strip()) + } + + if args.ad_controlnet_model != "None": + script_names_set.add("controlnet") + + filtered_alwayson = [] + for script_object in script_runner.alwayson_scripts: + filepath = script_object.filename + filename = Path(filepath).stem + if filename in script_names_set: + filtered_alwayson.append(script_object) + + script_runner.alwayson_scripts = filtered_alwayson + return script_runner, script_args + + def disable_controlnet_units(self, script_args: list[Any]) -> None: + for obj in script_args: + if "controlnet" in obj.__class__.__name__.lower(): + if hasattr(obj, "enabled"): + obj.enabled = False + if hasattr(obj, "input_mode"): + obj.input_mode = getattr(obj.input_mode, "SIMPLE", "simple") + + elif isinstance(obj, dict) and "module" in obj: + obj["enabled"] = False + + def get_i2i_p(self, p, args: ADetailerArgs, image): + seed, subseed = self.get_seed(p) + width, height = self.get_width_height(p, args) + steps = self.get_steps(p, args) + cfg_scale = self.get_cfg_scale(p, args) + initial_noise_multiplier = self.get_initial_noise_multiplier(p, args) + sampler_name = self.get_sampler(p, args) + override_settings = self.get_override_settings(p, args) + + i2i = StableDiffusionProcessingImg2Img( + init_images=[image], + resize_mode=0, + denoising_strength=args.ad_denoising_strength, + mask=None, + mask_blur=args.ad_mask_blur, + inpainting_fill=1, + inpaint_full_res=args.ad_inpaint_only_masked, + inpaint_full_res_padding=args.ad_inpaint_only_masked_padding, + inpainting_mask_invert=0, + initial_noise_multiplier=initial_noise_multiplier, + sd_model=p.sd_model, + outpath_samples=p.outpath_samples, + outpath_grids=p.outpath_grids, + prompt="", # replace later + negative_prompt="", + styles=p.styles, + seed=seed, + subseed=subseed, + subseed_strength=p.subseed_strength, + seed_resize_from_h=p.seed_resize_from_h, + seed_resize_from_w=p.seed_resize_from_w, + sampler_name=sampler_name, + batch_size=1, + n_iter=1, + steps=steps, + cfg_scale=cfg_scale, + width=width, + height=height, + restore_faces=args.ad_restore_face, + tiling=p.tiling, + extra_generation_params=p.extra_generation_params, + do_not_save_samples=True, + do_not_save_grid=True, + override_settings=override_settings, + ) + + i2i.cached_c = [None, None] + i2i.cached_uc = [None, None] + i2i.scripts, i2i.script_args = self.script_filter(p, args) + i2i._ad_disabled = True + + if args.ad_controlnet_model != "None": + self.update_controlnet_args(i2i, args) + else: + i2i.control_net_enabled = False + + return i2i + + def save_image(self, p, image, *, condition: str, suffix: str) -> None: + i = p._ad_idx + if p.all_prompts: + i %= len(p.all_prompts) + save_prompt = p.all_prompts[i] + else: + save_prompt = p.prompt + seed, _ = self.get_seed(p) + + if opts.data.get(condition, False): + images.save_image( + image=image, + path=p.outpath_samples, + basename="", + seed=seed, + prompt=save_prompt, + extension=opts.samples_format, + info=self.infotext(p), + p=p, + suffix=suffix, + ) + + def get_ad_model(self, name: str): + if name not in model_mapping: + msg = f"[-] ADetailer: Model {name!r} not found. Available models: {list(model_mapping.keys())}" + raise ValueError(msg) + return model_mapping[name] + + def sort_bboxes(self, pred: PredictOutput) -> PredictOutput: + sortby = opts.data.get("ad_bbox_sortby", BBOX_SORTBY[0]) + sortby_idx = BBOX_SORTBY.index(sortby) + return sort_bboxes(pred, sortby_idx) + + def pred_preprocessing(self, pred: PredictOutput, args: ADetailerArgs): + pred = filter_by_ratio( + pred, low=args.ad_mask_min_ratio, high=args.ad_mask_max_ratio + ) + pred = filter_k_largest(pred, k=args.ad_mask_k_largest) + pred = self.sort_bboxes(pred) + return mask_preprocess( + pred.masks, + kernel=args.ad_dilate_erode, + x_offset=args.ad_x_offset, + y_offset=args.ad_y_offset, + merge_invert=args.ad_mask_merge_invert, + ) + + @staticmethod + def ensure_rgb_image(image: Any): + if hasattr(image, "mode") and image.mode != "RGB": + image = image.convert("RGB") + return image + + @staticmethod + def i2i_prompts_replace( + i2i, prompts: list[str], negative_prompts: list[str], j: int + ) -> None: + i1 = min(j, len(prompts) - 1) + i2 = min(j, len(negative_prompts) - 1) + prompt = prompts[i1] + negative_prompt = negative_prompts[i2] + i2i.prompt = prompt + i2i.negative_prompt = negative_prompt + + @staticmethod + def compare_prompt(p, processed, n: int = 0): + if p.prompt != processed.all_prompts[0]: + print( + f"[-] ADetailer: applied {ordinal(n + 1)} ad_prompt: {processed.all_prompts[0]!r}" + ) + + if p.negative_prompt != processed.all_negative_prompts[0]: + print( + f"[-] ADetailer: applied {ordinal(n + 1)} ad_negative_prompt: {processed.all_negative_prompts[0]!r}" + ) + + @staticmethod + def need_call_process(p) -> bool: + i = p._ad_idx + bs = p.batch_size + return i % bs == bs - 1 + + @staticmethod + def need_call_postprocess(p) -> bool: + i = p._ad_idx + bs = p.batch_size + return i % bs == 0 + + @rich_traceback + def process(self, p, *args_): + if getattr(p, "_ad_disabled", False): + return + + if self.is_ad_enabled(*args_): + arg_list = self.get_args(p, *args_) + extra_params = self.extra_params(arg_list) + p.extra_generation_params.update(extra_params) + + def _postprocess_image_inner( + self, p, pp, args: ADetailerArgs, *, n: int = 0 + ) -> bool: + """ + Returns + ------- + bool + + `True` if image was processed, `False` otherwise. + """ + if state.interrupted or state.skipped: + return False + + i = p._ad_idx + + i2i = self.get_i2i_p(p, args, pp.image) + seed, subseed = self.get_seed(p) + ad_prompts, ad_negatives = self.get_prompt(p, args) + + is_mediapipe = args.ad_model.lower().startswith("mediapipe") + + kwargs = {} + if is_mediapipe: + predictor = mediapipe_predict + ad_model = args.ad_model + else: + predictor = ultralytics_predict + ad_model = self.get_ad_model(args.ad_model) + kwargs["device"] = self.ultralytics_device + + with change_torch_load(): + pred = predictor(ad_model, pp.image, args.ad_confidence, **kwargs) + + masks = self.pred_preprocessing(pred, args) + + if not masks: + print( + f"[-] ADetailer: nothing detected on image {i + 1} with {ordinal(n + 1)} settings." + ) + return False + + self.save_image( + p, + pred.preview, + condition="ad_save_previews", + suffix="-ad-preview" + suffix(n, "-"), + ) + + steps = len(masks) + processed = None + state.job_count += steps + + if is_mediapipe: + print(f"mediapipe: {steps} detected.") + + p2 = copy(i2i) + for j in range(steps): + p2.image_mask = masks[j] + p2.init_images[0] = self.ensure_rgb_image(p2.init_images[0]) + self.i2i_prompts_replace(p2, ad_prompts, ad_negatives, j) + + if re.match(r"^\s*\[SKIP\]\s*$", p2.prompt): + continue + + p2.seed = seed + j + p2.subseed = subseed + j + + try: + processed = process_images(p2) + except NansException as e: + msg = f"[-] ADetailer: 'NansException' occurred with {ordinal(n + 1)} settings.\n{e}" + print(msg, file=sys.stderr) + continue + finally: + p2.close() + + self.compare_prompt(p2, processed, n=n) + p2 = copy(i2i) + p2.init_images = [processed.images[0]] + + if processed is not None: + pp.image = processed.images[0] + return True + + return False + + @rich_traceback + def postprocess_image(self, p, pp, *args_): + if getattr(p, "_ad_disabled", False): + return + + if not self.is_ad_enabled(*args_): + return + + p._ad_idx = getattr(p, "_ad_idx", -1) + 1 + init_image = copy(pp.image) + arg_list = self.get_args(p, *args_) + + if p.scripts is not None and self.need_call_postprocess(p): + dummy = Processed(p, [], p.seed, "") + with preseve_prompts(p): + p.scripts.postprocess(copy(p), dummy) + + is_processed = False + with CNHijackRestore(), pause_total_tqdm(), cn_allow_script_control(): + for n, args in enumerate(arg_list): + if args.ad_model == "None": + continue + is_processed |= self._postprocess_image_inner(p, pp, args, n=n) + + if is_processed: + self.save_image( + p, init_image, condition="ad_save_images_before", suffix="-ad-before" + ) + + if p.scripts is not None and self.need_call_process(p): + with preseve_prompts(p): + p.scripts.process(copy(p)) + + try: + ia = p._ad_idx + lenp = len(p.all_prompts) + if ia % lenp == lenp - 1: + self.write_params_txt(p) + except Exception: + pass + + +def on_after_component(component, **_kwargs): + global txt2img_submit_button, img2img_submit_button + if getattr(component, "elem_id", None) == "txt2img_generate": + txt2img_submit_button = component + return + + if getattr(component, "elem_id", None) == "img2img_generate": + img2img_submit_button = component + + +def on_ui_settings(): + section = ("ADetailer", AFTER_DETAILER) + shared.opts.add_option( + "ad_max_models", + shared.OptionInfo( + default=2, + label="Max models", + component=gr.Slider, + component_args={"minimum": 1, "maximum": 10, "step": 1}, + section=section, + ), + ) + + shared.opts.add_option( + "ad_save_previews", + shared.OptionInfo(False, "Save mask previews", section=section), + ) + + shared.opts.add_option( + "ad_save_images_before", + shared.OptionInfo(False, "Save images before ADetailer", section=section), + ) + + shared.opts.add_option( + "ad_only_seleted_scripts", + shared.OptionInfo( + True, "Apply only selected scripts to ADetailer", section=section + ), + ) + + textbox_args = { + "placeholder": "comma-separated list of script names", + "interactive": True, + } + + shared.opts.add_option( + "ad_script_names", + shared.OptionInfo( + default=SCRIPT_DEFAULT, + label="Script names to apply to ADetailer (separated by comma)", + component=gr.Textbox, + component_args=textbox_args, + section=section, + ), + ) + + shared.opts.add_option( + "ad_bbox_sortby", + shared.OptionInfo( + default="None", + label="Sort bounding boxes by", + component=gr.Radio, + component_args={"choices": BBOX_SORTBY}, + section=section, + ), + ) + + +# xyz_grid + + +def make_axis_on_xyz_grid(): + xyz_grid = None + for script in scripts.scripts_data: + if script.script_class.__module__ == "xyz_grid.py": + xyz_grid = script.module + break + + if xyz_grid is None: + return + + model_list = ["None", *model_mapping.keys()] + samplers = [sampler.name for sampler in all_samplers] + + def set_value(p, x, xs, *, field: str): + if not hasattr(p, "adetailer_xyz"): + p.adetailer_xyz = {} + p.adetailer_xyz[field] = x + + axis = [ + xyz_grid.AxisOption( + "[ADetailer] ADetailer model 1st", + str, + partial(set_value, field="ad_model"), + choices=lambda: model_list, + ), + xyz_grid.AxisOption( + "[ADetailer] ADetailer prompt 1st", + str, + partial(set_value, field="ad_prompt"), + ), + xyz_grid.AxisOption( + "[ADetailer] ADetailer negative prompt 1st", + str, + partial(set_value, field="ad_negative_prompt"), + ), + xyz_grid.AxisOption( + "[ADetailer] Mask erosion / dilation 1st", + int, + partial(set_value, field="ad_dilate_erode"), + ), + xyz_grid.AxisOption( + "[ADetailer] Inpaint denoising strength 1st", + float, + partial(set_value, field="ad_denoising_strength"), + ), + xyz_grid.AxisOption( + "[ADetailer] Inpaint only masked 1st", + str, + partial(set_value, field="ad_inpaint_only_masked"), + choices=lambda: ["True", "False"], + ), + xyz_grid.AxisOption( + "[ADetailer] Inpaint only masked padding 1st", + int, + partial(set_value, field="ad_inpaint_only_masked_padding"), + ), + xyz_grid.AxisOption( + "[ADetailer] ADetailer sampler 1st", + str, + partial(set_value, field="ad_sampler"), + choices=lambda: samplers, + ), + xyz_grid.AxisOption( + "[ADetailer] ControlNet model 1st", + str, + partial(set_value, field="ad_controlnet_model"), + choices=lambda: ["None", *get_cn_models()], + ), + ] + + if not any(x.label.startswith("[ADetailer]") for x in xyz_grid.axis_options): + xyz_grid.axis_options.extend(axis) + + +def on_before_ui(): + try: + make_axis_on_xyz_grid() + except Exception: + error = traceback.format_exc() + print( + f"[-] ADetailer: xyz_grid error:\n{error}", + file=sys.stderr, + ) + + +script_callbacks.on_ui_settings(on_ui_settings) +script_callbacks.on_after_component(on_after_component) +script_callbacks.on_before_ui(on_before_ui) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.github/workflows/pytest.yml b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.github/workflows/pytest.yml new file mode 100644 index 0000000000000000000000000000000000000000..1c57d08221beaffd96176da66384661b4c4c899a --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.github/workflows/pytest.yml @@ -0,0 +1,31 @@ +name: Tests + +on: + pull_request: + push: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + + strategy: + matrix: + python-version: ['3.11', '3.10'] + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install tox + + - name: Run tox + run: tox diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.gitignore b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..689264bad5776046b9d205383c4983c599db144a --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.gitignore @@ -0,0 +1,2 @@ +.idea +.pytest_cache diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.pre-commit-config.yaml b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0e1a718fa24808c7f30521d606ab5251ddc2d284 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/.pre-commit-config.yaml @@ -0,0 +1,35 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: debug-statements + - id: double-quote-string-fixer + - id: name-tests-test + - repo: https://github.com/asottile/reorder_python_imports + rev: v3.9.0 + hooks: + - id: reorder-python-imports + args: [--py37-plus, --add-import, "from __future__ import annotations"] + - repo: https://github.com/asottile/add-trailing-comma + rev: v2.4.0 + hooks: + - id: add-trailing-comma + args: [--py36-plus] + - repo: https://github.com/asottile/pyupgrade + rev: v3.3.2 + hooks: + - id: pyupgrade + args: [--py37-plus] + - repo: https://github.com/pre-commit/mirrors-autopep8 + rev: v2.0.2 + hooks: + - id: autopep8 + - repo: https://github.com/PyCQA/flake8 + rev: 6.0.0 + hooks: + - id: flake8 + args: + - --max-line-length=120 diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/README.md b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6236dd14fadf3e670d365aae1557562322d13123 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/README.md @@ -0,0 +1,91 @@ +# Aspect Ratio Helper [![pytest](https://github.com/thomasasfk/sd-webui-aspect-ratio-helper/actions/workflows/pytest.yml/badge.svg?branch=main)](https://github.com/thomasasfk/sd-webui-aspect-ratio-helper/actions/workflows/pytest.yml) + +Simple extension to easily maintain aspect ratio while changing dimensions. + +Install via the extensions tab on the [AUTOMATIC1111 webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui). + +## Features + +**(note this list is a little out of date, will need to find time to update it)** + +- JavaScript aspect ratio controls + - Adds a dropdown of configurable aspect ratios, to which the dimensions will auto-scale + - When selected, you will only be able to modify the higher dimension + - The smaller or equivalent dimension will scale accordingly + - If "Lock/🔒" is selected, the aspect ratio of the current dimensions will be kept + - If "Image/🖼️" is selected, the aspect ratio of the current image will be kept (img2img only) + - If you click the "Swap/⇅" button, the current dimensions will swap + - Configurable aspect ratios will also flip, reducing the need for duplication of config + +https://user-images.githubusercontent.com/22506439/227396634-7a63671a-fd38-419a-b734-a3d26647cc1d.mp4 + +
+ +- Scale to maximum dimension + - Upon clicking, the width and height will scale according to the configured maximum value + - Aspect ratio will be retained, the smaller or equivalent dimension will be scaled to match +- Scale to aspect ratio + - Upon clicking, the current dimensions will be scaled to the given aspect ratio, using the highest width or height + - i.e `4:3 of 256x512 = 512x384` `9:16 of 512x256 = 288x512` `1:1 of 256x300 = 300x300` + - You can optionally toggle this to use the "Maximum dimension" slider value + - i.e `4:3 of 512 = 512x384` `9:16 of 512 = 288x512` `1:1 of 300 = 300x300` +- Scale by percentage + - Upon clicking, the current dimensions will be multiplied by the given percentage, with aspect ratio maintained + - i.e `-25% of 512x256 = 384x192` `+50% of 512x512 = 768x768` + - You can also change the display of these if you find it more intuitive + - i.e `75% of 512x256 = 384x192` `150% of 512x512 = 768x768` + - i.e `x0.75 of 512x256 = 384x192` `x1.5 of 512x512 = 768x768` + +![user-interface.png](docs%2Fui.png) + +## Settings + +- Hide accordion by default (`False`) +- Expand accordion by default (`False`) + - Determines whether the 'Aspect Ratio Helper' accordion expands by default +- UI Component order (`MaxDimensionScaler, PredefinedAspectRatioButtons, PredefinedPercentageButtons`) + - Determines the order in which the UI components will render +- Enable JavaScript aspect ratio controls +- JavaScript aspect ratio buttons `(1:1, 4:3, 16:9, 9:16, 21:9)` + - i.e `1:1, 4:3, 16:9, 9:16, 21:9` `2:3, 1:5, 3:5` +- Show maximum dimension button (`True`) +- Maximum dimension default (`1024`) +- Show pre-defined aspect ratio buttons (`True`) +- Use "Maximum dimension" for aspect ratio buttons (`False`) +- Pre-defined aspect ratio buttons (`1:1, 4:3, 16:9, 9:16, 21:9`) + - i.e `1:1, 4:3, 16:9, 9:16, 21:9` `2:3, 1:5, 3:5` +- Show pre-defined percentage buttons (`True`) +- Pre-defined percentage buttons (`25, 50, 75, 125, 150, 175, 200`) + - i.e `25, 50, 75, 125, 150, 175, 200` `50, 125, 300` +- Pre-defined percentage display format (`Incremental/decremental percentage (-50%, +50%)`) + - `Incremental/decremental percentage (-50%, +50%)` + - `Raw percentage (50%, 150%)` + - `Multiplication (x0.5, x1.5)` + +![settings.png](docs%2Fopts.png) + + +JavaScript & accordion aspect ratios _might_ not play well together - I don't think many users will use both simultaneously, but we'll see. + +## Contributing + +- Open an issue for suggestions +- Raise a pull request + +## Dependencies + +Developed using existing [AUTOMATIC1111 webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) dependencies. + +It's recommended to use the python version specified by A1111 webui. + +However - for running unit tests, we use pytest. + +```bash +pip install pytest +``` + +## Testing +From the root of the repository. +```bash +pytest +``` diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_components.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_components.py new file mode 100644 index 0000000000000000000000000000000000000000..2fae4e7f0e258024c3bfb868f88fa3ae040513dc --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_components.py @@ -0,0 +1,360 @@ +from __future__ import annotations + +from abc import ABC +from abc import abstractmethod +from functools import partial +from typing import Callable + +import gradio as gr + +import aspect_ratio_helper._constants as _constants +import aspect_ratio_helper._settings as _settings +import aspect_ratio_helper._util as _util + + +class ArhUIComponent(ABC): + + def __init__(self, script): + self.script = script + + @abstractmethod + def render(self): ... + + @staticmethod + @abstractmethod + def should_show() -> bool: ... + + @staticmethod + @abstractmethod + def add_options(): ... + + +class MaxDimensionScaler(ArhUIComponent): + + def render(self): + max_dim_default = _settings.safe_opt( + _constants.ARH_MAX_WIDTH_OR_HEIGHT_KEY, + ) + self.script.max_dimension = float(max_dim_default) + + inputs = outputs = [self.script.wc, self.script.hc] + + with gr.Row( + visible=self.should_show(), + ): + max_dim_default = _settings.safe_opt( + _constants.ARH_MAX_WIDTH_OR_HEIGHT_KEY, + ) + # todo: when using gr.Slider (not deprecated), the default value + # is somehow always 270?... can't figure out why. + # using legacy inputs.Slider for now as it doesn't have the issue. + max_dimension_slider = gr.inputs.Slider( + minimum=_constants.MIN_DIMENSION, + maximum=_constants.MAX_DIMENSION, + step=8, + default=max_dim_default, + label='Maximum dimension', + ) + + def _update_max_dimension(_max_dimension): + self.script.max_dimension = _max_dimension + + max_dimension_slider.change( + _update_max_dimension, + inputs=[max_dimension_slider], + show_progress=False, + ) + + gr.Button( + value='Scale to maximum dimension', + visible=self.should_show(), + ).click( + fn=_util.scale_dimensions_to_max_dim, + inputs=[*inputs, max_dimension_slider], + outputs=outputs, + ) + + @staticmethod + def should_show() -> bool: + return _settings.safe_opt(_constants.ARH_SHOW_MAX_WIDTH_OR_HEIGHT_KEY) + + @staticmethod + def add_options(shared): + shared.opts.add_option( + key=_constants.ARH_SHOW_MAX_WIDTH_OR_HEIGHT_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_SHOW_MAX_WIDTH_OR_HEIGHT_KEY, + ), + label='Show maximum dimension button', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_MAX_WIDTH_OR_HEIGHT_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_MAX_WIDTH_OR_HEIGHT_KEY, + ), + label='Maximum dimension default', + component=gr.Slider, + component_args={ + 'minimum': _constants.MIN_DIMENSION, + 'maximum': _constants.MAX_DIMENSION, + 'step': 8, + }, + section=_constants.SECTION, + ), + ) + + +class MinDimensionScaler(ArhUIComponent): + + def render(self): + min_dim_default = _settings.safe_opt( + _constants.ARH_MIN_WIDTH_OR_HEIGHT_KEY, + ) + self.script.min_dimension = float(min_dim_default) + + inputs = outputs = [self.script.wc, self.script.hc] + + with gr.Row( + visible=self.should_show(), + ): + min_dim_default = _settings.safe_opt( + _constants.ARH_MIN_WIDTH_OR_HEIGHT_KEY, + ) + # todo: when using gr.Slider (not deprecated), the default value + # is somehow always 270?... can't figure out why. + # using legacy inputs.Slider for now as it doesn't have the issue. + min_dimension_slider = gr.inputs.Slider( + minimum=_constants.MIN_DIMENSION, + maximum=_constants.MAX_DIMENSION, + step=8, + default=min_dim_default, + label='Minimum dimension', + ) + + def _update_min_dimension(_min_dimension): + self.script.min_dimension = _min_dimension + + min_dimension_slider.change( + _update_min_dimension, + inputs=[min_dimension_slider], + show_progress=False, + ) + + gr.Button( + value='Scale to minimum dimension', + visible=self.should_show(), + ).click( + fn=_util.scale_dimensions_to_min_dim, + inputs=[*inputs, min_dimension_slider], + outputs=outputs, + ) + + @staticmethod + def should_show() -> bool: + return _settings.safe_opt(_constants.ARH_SHOW_MIN_WIDTH_OR_HEIGHT_KEY) + + @staticmethod + def add_options(shared): + shared.opts.add_option( + key=_constants.ARH_SHOW_MIN_WIDTH_OR_HEIGHT_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_SHOW_MIN_WIDTH_OR_HEIGHT_KEY, + ), + label='Show minimum dimension button', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_MIN_WIDTH_OR_HEIGHT_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_MIN_WIDTH_OR_HEIGHT_KEY, + ), + label='Minimum dimension default', + component=gr.Slider, + component_args={ + 'minimum': _constants.MIN_DIMENSION, + 'maximum': _constants.MAX_DIMENSION, + 'step': 8, + }, + section=_constants.SECTION, + ), + ) + + +class PredefinedAspectRatioButtons(ArhUIComponent): + + def render(self): + use_max_dim_op = _settings.safe_opt( + _constants.ARH_PREDEFINED_ASPECT_RATIO_USE_MAX_DIM_KEY, + ) + aspect_ratios = _settings.safe_opt( + _constants.ARH_PREDEFINED_ASPECT_RATIOS_KEY, + ).split(',') + + with gr.Column( + variant='panel', + visible=self.should_show(), + ), gr.Row( + variant='compact', + visible=self.should_show(), + elem_classes='arh-btn-row', + ): + for ar_str in aspect_ratios: + w, h, *_ = (abs(float(d)) for d in ar_str.split(':')) + + inputs = [] + if use_max_dim_op: + ar_func = partial( + _util.scale_dimensions_to_max_dim_func, + width=w, height=h, + max_dim=lambda: self.script.max_dimension, + ) + else: + inputs.extend([self.script.wc, self.script.hc]) + ar_func = partial( + _util.scale_dimensions_to_ui_width_or_height, + arw=w, arh=h, + ) + + gr.Button( + value=self.display_func(ar_str) or ar_str, + visible=self.should_show(), + ).click( + fn=ar_func, + inputs=inputs, + outputs=[self.script.wc, self.script.hc], + ) + + @staticmethod + def should_show() -> bool: + return _settings.safe_opt( + _constants.ARH_SHOW_PREDEFINED_ASPECT_RATIOS_KEY, + ) + + @staticmethod + def add_options(shared): + shared.opts.add_option( + key=_constants.ARH_SHOW_PREDEFINED_ASPECT_RATIOS_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_SHOW_PREDEFINED_ASPECT_RATIOS_KEY, + ), + label='Show pre-defined aspect ratio buttons', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_PREDEFINED_ASPECT_RATIO_USE_MAX_DIM_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_PREDEFINED_ASPECT_RATIO_USE_MAX_DIM_KEY, + ), + label='Use "Maximum dimension" for aspect ratio buttons (by ' + 'default we use the max width or height)', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_PREDEFINED_ASPECT_RATIOS_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_PREDEFINED_ASPECT_RATIOS_KEY, + ), + label='Pre-defined aspect ratio buttons ' + '(1:1, 4:3, 16:9, 9:16, 21:9)', + section=_constants.SECTION, + ), + ) + + @property + def display_func(self) -> Callable[[str], str]: + return lambda _: None # todo: different displays for aspect ratios. + + +class PredefinedPercentageButtons(ArhUIComponent): + + def render(self): + inputs = outputs = [self.script.wc, self.script.hc] + with gr.Column( + variant='panel', + visible=self.should_show(), + ), gr.Row( + variant='compact', + visible=self.should_show(), + elem_classes='arh-btn-row', + ): + pps = _settings.safe_opt(_constants.ARH_PREDEFINED_PERCENTAGES_KEY) + percentages = [abs(int(x)) for x in pps.split(',')] + + for percentage in percentages: + display = self.display_func(percentage) + gr.Button( + value=display, + visible=self.should_show(), + ).click( + fn=partial( + _util.scale_by_percentage, + pct=percentage / 100, + ), + inputs=inputs, + outputs=outputs, + ) + + @staticmethod + def should_show() -> bool: + return _settings.safe_opt( + _constants.ARH_SHOW_PREDEFINED_PERCENTAGES_KEY, + ) + + @staticmethod + def add_options(shared): + shared.opts.add_option( + key=_constants.ARH_SHOW_PREDEFINED_PERCENTAGES_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_SHOW_PREDEFINED_PERCENTAGES_KEY, + ), + label='Show pre-defined percentage buttons', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_PREDEFINED_PERCENTAGES_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_PREDEFINED_PERCENTAGES_KEY, + ), + label='Pre-defined percentage buttons (75, 125, 150)', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_PREDEFINED_PERCENTAGES_DISPLAY_KEY, + info=shared.OptionInfo( + default=_settings.OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_PREDEFINED_PERCENTAGES_DISPLAY_KEY, + ), + label='Pre-defined percentage display format', + component=gr.Dropdown, + component_args=lambda: { + 'choices': tuple( + _settings.PREDEFINED_PERCENTAGES_DISPLAY_MAP.keys(), + ), + }, + section=_constants.SECTION, + ), + ) + + @property + def display_func(self) -> Callable[[str], str]: + return _settings.PREDEFINED_PERCENTAGES_DISPLAY_MAP.get( + _settings.safe_opt( + _constants.ARH_PREDEFINED_PERCENTAGES_DISPLAY_KEY, + ), + ) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_constants.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_constants.py new file mode 100644 index 0000000000000000000000000000000000000000..a9a7c89c51415c63a579beaa959794469096dd4b --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_constants.py @@ -0,0 +1,27 @@ +from __future__ import annotations +EXTENSION_NAME = 'Aspect Ratio Helper' + +MAX_DIMENSION = 2048 +MIN_DIMENSION = 64 + +ARH_EXPAND_BY_DEFAULT_KEY = 'arh_expand_by_default' +ARH_HIDE_ACCORDION_BY_DEFAULT_KEY = 'arh_hide_accordion_by_default' +ARH_UI_COMPONENT_ORDER_KEY = 'arh_ui_component_order_key' +ARH_UI_JAVASCRIPT_SELECTION_METHOD = 'arh_ui_javascript_selection_method' +ARH_JAVASCRIPT_ASPECT_RATIO_SHOW_KEY = 'arh_javascript_aspect_ratio_show' +ARH_JAVASCRIPT_ASPECT_RATIOS_KEY = 'arh_javascript_aspect_ratio' +ARH_SHOW_MAX_WIDTH_OR_HEIGHT_KEY = 'arh_show_max_width_or_height' +ARH_SHOW_MIN_WIDTH_OR_HEIGHT_KEY = 'arh_show_min_width_or_height' +ARH_MAX_WIDTH_OR_HEIGHT_KEY = 'arh_max_width_or_height' +ARH_MIN_WIDTH_OR_HEIGHT_KEY = 'arh_min_width_or_height' +ARH_SHOW_PREDEFINED_PERCENTAGES_KEY = 'arh_show_predefined_percentages' +ARH_PREDEFINED_PERCENTAGES_KEY = 'arh_predefined_percentages' +ARH_SHOW_PREDEFINED_ASPECT_RATIOS_KEY = 'arh_show_predefined_aspect_ratios' +ARH_PREDEFINED_ASPECT_RATIOS_KEY = 'arh_predefined_aspect_ratios' +ARH_PREDEFINED_ASPECT_RATIO_USE_MAX_DIM_KEY \ + = 'arh_predefined_aspect_ratio_use_max_dim' +ARH_PREDEFINED_PERCENTAGES_DISPLAY_KEY \ + = 'arh_predefined_percentages_display_key' +DEFAULT_PERCENTAGES_DISPLAY_KEY \ + = 'Incremental/decremental percentage (-50%, +50%)' +SECTION = 'aspect_ratio_helper', EXTENSION_NAME diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_settings.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_settings.py new file mode 100644 index 0000000000000000000000000000000000000000..075d8bf85f84b04868c3b52a9e1f596e810a5c93 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_settings.py @@ -0,0 +1,178 @@ +from __future__ import annotations + +import itertools + +import gradio as gr +from modules import shared + +import aspect_ratio_helper._components as _components +import aspect_ratio_helper._constants as _constants +import aspect_ratio_helper._util as _util + +PREDEFINED_PERCENTAGES_DISPLAY_MAP = { + _constants.DEFAULT_PERCENTAGES_DISPLAY_KEY: _util.display_minus_and_plus, + 'Raw percentage (50%, 150%)': _util.display_raw_percentage, + 'Multiplication (x0.5, x1.5)': _util.display_multiplication, +} + +COMPONENTS = ( + _components.MaxDimensionScaler, + _components.MinDimensionScaler, + _components.PredefinedAspectRatioButtons, + _components.PredefinedPercentageButtons, +) + +DEFAULT_UI_COMPONENT_ORDER_KEY_LIST = [e.__name__ for e in COMPONENTS] +DEFAULT_UI_COMPONENT_ORDER_KEY = ', '.join( + DEFAULT_UI_COMPONENT_ORDER_KEY_LIST, +) +OPT_KEY_TO_DEFAULT_MAP = { + _constants.ARH_EXPAND_BY_DEFAULT_KEY: False, + _constants.ARH_HIDE_ACCORDION_BY_DEFAULT_KEY: True, + _constants.ARH_UI_COMPONENT_ORDER_KEY: + DEFAULT_UI_COMPONENT_ORDER_KEY, + _constants.ARH_UI_JAVASCRIPT_SELECTION_METHOD: 'Aspect Ratios Dropdown', + _constants.ARH_JAVASCRIPT_ASPECT_RATIO_SHOW_KEY: True, + _constants.ARH_JAVASCRIPT_ASPECT_RATIOS_KEY: + '1:1, 3:2, 4:3, 5:4, 16:9', + _constants.ARH_SHOW_MAX_WIDTH_OR_HEIGHT_KEY: False, + _constants.ARH_MAX_WIDTH_OR_HEIGHT_KEY: + _constants.MAX_DIMENSION / 2, + _constants.ARH_SHOW_MIN_WIDTH_OR_HEIGHT_KEY: False, + _constants.ARH_MIN_WIDTH_OR_HEIGHT_KEY: + _constants.MAX_DIMENSION / 2, + _constants.ARH_SHOW_PREDEFINED_PERCENTAGES_KEY: False, + _constants.ARH_PREDEFINED_PERCENTAGES_KEY: + '25, 50, 75, 125, 150, 175, 200', + _constants.ARH_PREDEFINED_PERCENTAGES_DISPLAY_KEY: + _constants.DEFAULT_PERCENTAGES_DISPLAY_KEY, + _constants.ARH_SHOW_PREDEFINED_ASPECT_RATIOS_KEY: False, + _constants.ARH_PREDEFINED_ASPECT_RATIO_USE_MAX_DIM_KEY: False, + _constants.ARH_PREDEFINED_ASPECT_RATIOS_KEY: + '1:1, 4:3, 16:9, 9:16, 21:9', +} + + +def safe_opt(key): + return _util.safe_opt_util(shared.opts, key, OPT_KEY_TO_DEFAULT_MAP) + + +def sort_components_by_keys( + components: list[_components.ArhUIComponent], +) -> list[_components.ArhUIComponent]: + ordered_component_keys = safe_opt( + _constants.ARH_UI_COMPONENT_ORDER_KEY, + ).split(',') + + # this can happen if we add new components, but the user has old settings. + # if this happens, we find the missing components, and append them. + if len(ordered_component_keys) != len(COMPONENTS): + all_components = set(DEFAULT_UI_COMPONENT_ORDER_KEY_LIST) + missing_components = all_components - set(ordered_component_keys) + ordered_component_keys.extend(missing_components) + + try: + component_key_to_order_dict = { + key: order for order, key in enumerate( + [k.strip() for k in ordered_component_keys], + ) + } + return sorted( + components, + key=lambda c: component_key_to_order_dict.get( + c.__class__.__name__, + ), + ) + except ValueError: + print( + f'{_constants.EXTENSION_NAME} UI component order is erroneous. ' + f'Defaulting to regular order, to fix this, please use' + f'the intended syntax for the setting, i.e ' + f'"{DEFAULT_UI_COMPONENT_ORDER_KEY}"', + ) + return components + + +def on_ui_settings(): + # javascript ui options + shared.opts.add_option( + key=_constants.ARH_JAVASCRIPT_ASPECT_RATIO_SHOW_KEY, + info=shared.OptionInfo( + default=OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_JAVASCRIPT_ASPECT_RATIO_SHOW_KEY, + ), + label='Enable JavaScript aspect ratio controls', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_JAVASCRIPT_ASPECT_RATIOS_KEY, + info=shared.OptionInfo( + default=OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_JAVASCRIPT_ASPECT_RATIOS_KEY, + ), + label='JavaScript aspect ratio buttons' + ' (1:1, 4:3, 16:9, 9:16, 21:9)', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_UI_JAVASCRIPT_SELECTION_METHOD, + info=shared.OptionInfo( + default=OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_UI_JAVASCRIPT_SELECTION_METHOD, + ), + label='JavaScript selection method', + component=gr.Dropdown, + component_args=lambda: { + 'choices': [ + 'Aspect Ratios Dropdown', + 'Default Options Button', + ], + }, + section=_constants.SECTION, + ), + ) + + # accordion options + shared.opts.add_option( + key=_constants.ARH_HIDE_ACCORDION_BY_DEFAULT_KEY, + info=shared.OptionInfo( + default=OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_HIDE_ACCORDION_BY_DEFAULT_KEY, + ), + label='Hide accordion by default', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_EXPAND_BY_DEFAULT_KEY, + info=shared.OptionInfo( + default=OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_EXPAND_BY_DEFAULT_KEY, + ), + label='Expand accordion by default', + section=_constants.SECTION, + ), + ) + shared.opts.add_option( + key=_constants.ARH_UI_COMPONENT_ORDER_KEY, + info=shared.OptionInfo( + default=OPT_KEY_TO_DEFAULT_MAP.get( + _constants.ARH_UI_COMPONENT_ORDER_KEY, + ), + label='UI Component order', + component=gr.Dropdown, + component_args=lambda: { + 'choices': [ + ', '.join(p) for p in itertools.permutations( # TODO: Rethink this, exponential growth... + DEFAULT_UI_COMPONENT_ORDER_KEY_LIST, + ) + ], + }, + section=_constants.SECTION, + ), + ) + + for component in COMPONENTS: + component.add_options(shared) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_util.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_util.py new file mode 100644 index 0000000000000000000000000000000000000000..b10be805845ec58a21eafedc0f26842f13399ffc --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/_util.py @@ -0,0 +1,119 @@ +from __future__ import annotations + +import contextlib + +import aspect_ratio_helper._constants as _const + + +def safe_opt_util(shared_opts, key, default_key_map: dict[str, object]): + # attempt to retrieve key from shared options + with contextlib.suppress(AttributeError): + value = shared_opts.__getattr__(key) + if value is not None: + return value + + # attempt to retrieve default, and last resort the constant default + return shared_opts.get_default(key) or default_key_map.get(key) + + +def display_multiplication(num) -> str: + return f'x{round(num / 100, 3)}' + + +def display_raw_percentage(num) -> str: + return f'{num}%' + + +def display_minus_and_plus(num) -> str: + num -= 100 + if num > 0: + return f'+{num}%' + return f'{num}%' + + +def scale_by_percentage(width, height, pct) -> tuple[int, int]: + aspect_ratio = float(width) / float(height) + step = (pct - 1.0) + new_width = int(round(width * (1.0 + step))) + new_height = int(round(new_width / aspect_ratio)) + return clamp_to_boundaries(new_width, new_height, aspect_ratio) + + +def scale_dimensions_to_ui_width_or_height( + width, height, arw, arh, +) -> tuple[int, int]: + return scale_dimensions_to_max_dim(arw, arh, max(width, height)) + + +def scale_dimensions_to_max_dim_func( + width, height, max_dim: callable, +) -> tuple[int, int]: + return scale_dimensions_to_max_dim(width, height, max_dim()) + + +def scale_dimensions_to_max_dim( + width, height, max_dim, +) -> tuple[int, int]: + aspect_ratio = float(width) / float(height) + return scale_dimensions_to_ar(width, height, max_dim, aspect_ratio) + + +def scale_dimensions_to_min_dim( + width, height, min_dim, +) -> tuple[int, int]: + aspect_ratio = float(width) / float(height) + if width >= height: + max_dim = min_dim * aspect_ratio + else: + max_dim = min_dim / aspect_ratio + return scale_dimensions_to_ar(width, height, max_dim, aspect_ratio) + + +def scale_dimensions_to_ar( + width, height, max_dim, aspect_ratio, +) -> tuple[int, int]: + if width > height: + new_width = max_dim + new_height = int(round(max_dim / aspect_ratio)) + else: + new_height = max_dim + new_width = int(round(max_dim * aspect_ratio)) + return clamp_to_boundaries(new_width, new_height, aspect_ratio) + + +def round_to_multiple_of_8(value): + return int(round(value / 8.0)) * 8 + + +def clamp_to_boundaries(owidth, oheight, aspect_ratio) -> tuple[int, int]: + width, height = owidth, oheight + if width > _const.MAX_DIMENSION: + width = _const.MAX_DIMENSION + height = int(round(width / aspect_ratio)) + if height > _const.MAX_DIMENSION: + height = _const.MAX_DIMENSION + width = int(round(height * aspect_ratio)) + if width < _const.MIN_DIMENSION: + width = _const.MIN_DIMENSION + height = int(round(width / aspect_ratio)) + if height < _const.MIN_DIMENSION: + height = _const.MIN_DIMENSION + width = int(round(height * aspect_ratio)) + + width = round_to_multiple_of_8(width) + height = round_to_multiple_of_8(height) + # for insane aspect ratios we don't support... i.e 1:100 + # 64:6400 when run through this function, so we clamp to 64:2048 (‾◡◝) + # also. when the user does this it breaks the "scale to max" function + # on the ui until they change to another reasonable aspect ratio. + # todo: figure out why ^ and handle it better. + if width < _const.MIN_DIMENSION: + width = _const.MIN_DIMENSION + elif width > _const.MAX_DIMENSION: + width = _const.MAX_DIMENSION + if height < _const.MIN_DIMENSION: + height = _const.MIN_DIMENSION + elif height > _const.MAX_DIMENSION: + height = _const.MAX_DIMENSION + + return width, height diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/main.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/main.py new file mode 100644 index 0000000000000000000000000000000000000000..814569e123b3d9c3e6d83cdece9b7f6b7523b468 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/aspect_ratio_helper/main.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +import gradio as gr +from modules import script_callbacks +from modules import scripts + +import aspect_ratio_helper._constants as _constants +import aspect_ratio_helper._settings as _settings + + +class AspectRatioStepScript(scripts.Script): + + def __init__(self): + self.t2i_w: gr.components.Slider | None = None + self.t2i_h: gr.components.Slider | None = None + self.i2i_w: gr.components.Slider | None = None + self.i2i_h: gr.components.Slider | None = None + self.wc: gr.components.Slider + self.hc: gr.components.Slider + self.max_dimension: float + + def title(self) -> str: + return _constants.EXTENSION_NAME + + def show(self, _) -> scripts.AlwaysVisible: + return scripts.AlwaysVisible + + def ui(self, is_img2img): + if is_img2img: + self.wc, self.hc = self.i2i_w, self.i2i_h + else: + self.wc, self.hc = self.t2i_w, self.t2i_h # noqa + + components = _settings.sort_components_by_keys( + [component(self) for component in _settings.COMPONENTS], + ) + + hide_accordion: bool = _settings.safe_opt( + _constants.ARH_HIDE_ACCORDION_BY_DEFAULT_KEY, + ) + + if hide_accordion or not any(c.should_show() for c in components): + return # no components should render, so just return. + + start_expanded: bool = _settings.safe_opt( + _constants.ARH_EXPAND_BY_DEFAULT_KEY, + ) + with gr.Group(), gr.Accordion( + _constants.EXTENSION_NAME, + open=start_expanded, + ): + for component in components: + # we deliberately DON'T check component.should_show() here. + # we need to call render to instantiate the components, we use + # the visible property on each component to hide them. + component.render() + + def after_component(self, component: gr.components.Component, **kwargs): + element_id = kwargs.get('elem_id') + + if isinstance(component, gr.components.Slider): + if element_id == 'txt2img_width': + self.t2i_w: gr.components.Slider = component + elif element_id == 'txt2img_height': + self.t2i_h: gr.components.Slider = component + elif element_id == 'img2img_width': + self.i2i_w: gr.components.Slider = component + elif element_id == 'img2img_height': + self.i2i_h: gr.components.Slider = component + + +script_callbacks.on_ui_settings(_settings.on_ui_settings) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/docs/opts.png b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/docs/opts.png new file mode 100644 index 0000000000000000000000000000000000000000..76037916f8a8501e0d8209eac0b6ec8ac4f759e0 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/docs/opts.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/docs/ui.png b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/docs/ui.png new file mode 100644 index 0000000000000000000000000000000000000000..51b1371f094efa2875be1559d009dd9fbabfb23e Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/docs/ui.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/javascript/aspectRatioController.js b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/javascript/aspectRatioController.js new file mode 100644 index 0000000000000000000000000000000000000000..c699fb708506d49b69e38bf0983e6da3a7cf3fe1 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/javascript/aspectRatioController.js @@ -0,0 +1,474 @@ +// constants +const _OFF = "Off"; // Don't use the functionality at all +const _LOCK = '🔒'; // Aspect ratio is "locked" +const _IMAGE = '🖼️'; // Aspect ratio is "locked" to that of the image + +const _MAXIMUM_DIMENSION = 2048; +const _MINIMUM_DIMENSION = 64; + +const _IMAGE_INPUT_CONTAINER_IDS = [ + 'img2img_image', + 'img2img_sketch', + 'img2maskimg', + 'inpaint_sketch', + 'img_inpaint_base', +]; + +const getSelectedImage2ImageTab = () => { + const selectedButton = gradioApp().getElementById('mode_img2img').querySelector('button.selected'); + const allButtons = gradioApp().getElementById('mode_img2img').querySelectorAll('button'); + const selectedIndex = Array.prototype.indexOf.call(allButtons, selectedButton); + return selectedIndex; +} + +const getCurrentImage = () => { + const currentTabIndex = getSelectedImage2ImageTab(); + const currentTabImageId = _IMAGE_INPUT_CONTAINER_IDS[currentTabIndex]; + return document.getElementById(currentTabImageId).querySelector('img'); +} + +const roundToClosestMultiple = (num, multiple) => { + const rounded = Math.round(Number(num) / multiple) * multiple; + return rounded; +} + +const aspectRatioFromStr = (ar) => { + if (!ar.includes(':')) return; + return ar.split(':').map(x => Number(x)); +} + +const reverseAspectRatio = (ar) => { + if (!ar.includes(':')) return; + const [width, height] = ar.split(':'); + return `${height}:${width}`; +} + +const clampToBoundaries = (width, height) => { + const aspectRatio = width / height; + width = Math.max(Math.min(width, _MAXIMUM_DIMENSION), _MINIMUM_DIMENSION); + height = Math.max(Math.min(height, _MAXIMUM_DIMENSION), _MINIMUM_DIMENSION); + if (width / height > aspectRatio) { + height = Math.round(width / aspectRatio); + } else if (width / height < aspectRatio) { + width = Math.round(height * aspectRatio); + } + + if (width > _MAXIMUM_DIMENSION) { + width = _MAXIMUM_DIMENSION; + } else if (width < _MINIMUM_DIMENSION) { + width = _MINIMUM_DIMENSION; + } + + if (height < _MINIMUM_DIMENSION) { + height = _MINIMUM_DIMENSION; + } else if (height > _MAXIMUM_DIMENSION) { + height = _MAXIMUM_DIMENSION; + } + + return [width, height]; +} + +const getOptions = () => { + return window.opts.arh_javascript_aspect_ratio.split(',').map(o => o.trim()); +} + +const reverseAllOptions = () => { + const allAspectRatioOptions = Array.from(gradioApp().querySelectorAll('.ar-option')); + allAspectRatioOptions.forEach(el => { + const reversed = reverseAspectRatio(el.value); + if (reversed) { + el.value = reversed; + el.textContent = reversed; + } + }); +} + +class OptionPickingController { + constructor(page, defaultOptions, controller) { + this.page = page; + this.options = this.getOptions(defaultOptions); + this.switchButton = gradioApp().getElementById(page + '_res_switch_btn'); + + const wrapperDiv = document.createElement('div'); + wrapperDiv.setAttribute("id", `${this.page}_size_toolbox`); + wrapperDiv.setAttribute("class", "flex flex-col relative col gap-4"); + wrapperDiv.setAttribute("style", "min-width: min(320px, 100%); flex-grow: 0"); + wrapperDiv.innerHTML = this.getElementInnerHTML(); + + const parent = this.switchButton.parentNode; + parent.removeChild(this.switchButton); + wrapperDiv.appendChild(this.switchButton); + parent.insertBefore(wrapperDiv, parent.lastChild.previousElementSibling); + + this.getPickerElement().onchange = this.pickerChanged(controller); + this.switchButton.onclick = this.switchButtonOnclick(controller); + } + + getOptions(defaultOptions) { + return [...new Set([...defaultOptions, ...getOptions()])]; + } + + pickerChanged(controller) { + return () => { + const picked = this.getCurrentOption(); + if (_IMAGE === picked) { + // this.switchButton.disabled = true; + } else { + this.switchButton.removeAttribute('disabled') + } + + controller.setAspectRatio(picked); + }; + } + + switchButtonOnclick(controller) { + return () => { + reverseAllOptions(); + const picked = this.getCurrentOption(); + if (_LOCK === picked) { + controller.setAspectRatio(`${controller.heightRatio}:${controller.widthRatio}`); + } else { + controller.setAspectRatio(picked); + } + }; + } + + getElementInnerHTML() { + throw new Error('Not implemented'); + } + + getPickerElement() { + throw new Error('Not implemented'); + } + + getCurrentOption() { + throw new Error('Not implemented'); + } +} + + +class SelectOptionPickingController extends OptionPickingController { + constructor(page, defaultOptions, controller) { + super(page, defaultOptions, controller); + } + + getElementInnerHTML() { + return ` +
+ +
+ `; + } + + getPickerElement() { + return gradioApp().getElementById(`${this.page}_select_aspect_ratio`); + } + + getCurrentOption() { + const selectElement = this.getPickerElement(); + const options = Array.from(selectElement); + return options[selectElement.selectedIndex].value; + } +} + +class DefaultOptionsButtonOptionPickingController extends OptionPickingController { + constructor(page, defaultOptions, controller) { + super(page, defaultOptions, controller); + this.currentIndex = 0; + this.getPickerElement().onclick = this.pickerChanged(controller); + } + + pickerChanged(controller) { + return () => { + this.currentIndex = (this.currentIndex + 1) % this.options.length; + this.getPickerElement().querySelector('button').textContent = this.getCurrentOption(); + super.pickerChanged(controller)(); + } + } + + getElementInnerHTML() { + const classes = Array.from(this.switchButton.classList); + return ` +
+ +
+ `; + } + + getPickerElement() { + return gradioApp().getElementById(`${this.page}_ar_default_options_button`); + } + + getOptions(defaultOptions) { + return defaultOptions; + } + + getCurrentOption() { + return this.options[this.currentIndex || 0]; + } +} + + +class SliderController { + constructor(element) { + this.element = element; + this.numberInput = this.element.querySelector('input[type=number]'); + this.rangeInput = this.element.querySelector('input[type=range]'); + this.inputs = [this.numberInput, this.rangeInput]; + this.inputs.forEach(input => { + input.isWidth = element.isWidth; + }); + } + + getVal() { + return Number(this.numberInput.value); + } + + updateVal(value) { + this.inputs.forEach(input => { + input.value = Number(value) + }) + } + + updateMin(value) { + this.inputs.forEach(input => { + input.min = roundToClosestMultiple(Number(value), 8); + }) + } + + updateMax(value) { + this.inputs.forEach(input => { + input.max = roundToClosestMultiple(Number(value), 8); + }) + } + + triggerEvent(event) { + this.numberInput.dispatchEvent(event) + } + + setVal(value) { + value = Number(value) + const newValue = roundToClosestMultiple(value, 8) + this.updateVal(newValue); + } + +} + +class AspectRatioController { + constructor(page, widthContainer, heightContainer, defaultOptions) { + widthContainer.isWidth = true; + heightContainer.isWidth = false; + this.widthContainer = new SliderController(widthContainer); + this.heightContainer = new SliderController(heightContainer); + this.inputs = [...this.widthContainer.inputs, ...this.heightContainer.inputs]; + this.inputs.forEach(input => { + input.addEventListener('change', (e) => { + e.preventDefault() + this.maintainAspectRatio(input); + }); + }) + + if (window.opts.arh_ui_javascript_selection_method === 'Default Options Button') { + this.optionPickingControler = new DefaultOptionsButtonOptionPickingController(page, defaultOptions, this); + } else { + this.optionPickingControler = new SelectOptionPickingController(page, defaultOptions, this); + } + + this.setAspectRatio(_OFF); + } + + updateInputStates() { + if (this.isLandscapeOrSquare()) { + const AR = this.widthRatio / this.heightRatio; + + const minWidthByAr = Math.round(_MINIMUM_DIMENSION * AR); + const minWidth = Math.max(minWidthByAr, _MINIMUM_DIMENSION); + this.widthContainer.updateMin(minWidth); + this.heightContainer.updateMin(_MINIMUM_DIMENSION); + + const maxHeightByAr = Math.round(_MAXIMUM_DIMENSION / AR) + const maxHeight = Math.min(_MAXIMUM_DIMENSION, maxHeightByAr); + this.heightContainer.updateMax(maxHeight); + this.widthContainer.updateMax(_MAXIMUM_DIMENSION); + } else { + const AR = this.heightRatio / this.widthRatio; + + const minHeightByAr = Math.round(_MINIMUM_DIMENSION * AR) + const minHeight = Math.max(minHeightByAr, _MINIMUM_DIMENSION); + this.heightContainer.updateMin(minHeight); + this.widthContainer.updateMin(_MINIMUM_DIMENSION); + + const maxWidthByAr = Math.round(_MAXIMUM_DIMENSION / AR) + const maxWidth = Math.min(_MAXIMUM_DIMENSION, maxWidthByAr); + this.widthContainer.updateMax(maxWidth); + this.heightContainer.updateMax(_MAXIMUM_DIMENSION); + } + } + + disable() { + this.widthContainer.updateMin(_MINIMUM_DIMENSION); + this.heightContainer.updateMin(_MINIMUM_DIMENSION); + this.widthContainer.updateMax(_MAXIMUM_DIMENSION); + this.heightContainer.updateMax(_MAXIMUM_DIMENSION); + } + + isLandscapeOrSquare() { + return this.widthRatio >= this.heightRatio; + } + + setAspectRatio(aspectRatio) { + this.aspectRatio = aspectRatio; + + let wR, hR; + if (aspectRatio === _OFF) { + return this.disable(); + } else if (aspectRatio === _IMAGE) { + const img = getCurrentImage(); + wR = img && img.naturalWidth || 1; + hR = img && img.naturalHeight || 1; + } else if (aspectRatio === _LOCK) { + wR = this.widthContainer.getVal(); + hR = this.heightContainer.getVal(); + } else { + [wR, hR] = aspectRatioFromStr(aspectRatio); + } + + [wR, hR] = clampToBoundaries(wR, hR); + + this.widthRatio = wR; + this.heightRatio = hR; + this.updateInputStates(); + this.maintainAspectRatio(); + } + + maintainAspectRatio(changedElement) { + if (this.aspectRatio === _OFF) return; + if (!changedElement) { + const allValues = Object.values(this.inputs).map(x => Number(x.value)); + changedElement = {value: Math.max(...allValues)}; + } + + const aspectRatio = this.widthRatio / this.heightRatio; + let w, h; + + if (changedElement.isWidth === undefined) { + if (this.isLandscapeOrSquare()) { + if (changedElement.isWidth) {} + w = Math.round(changedElement.value); + h = Math.round(changedElement.value / aspectRatio); + } else { + h = Math.round(changedElement.value); + w = Math.round(changedElement.value * aspectRatio); + } + } else { + if (changedElement.isWidth) { + w = Math.round(changedElement.value); + h = Math.round(changedElement.value / aspectRatio); + } else { + h = Math.round(changedElement.value); + w = Math.round(changedElement.value * aspectRatio); + } + } + + const [width, height] = clampToBoundaries(w, h) + + const inputEvent = new Event("input", {bubbles: true}); + this.widthContainer.setVal(width); + this.widthContainer.triggerEvent(inputEvent); + this.heightContainer.setVal(height); + this.heightContainer.triggerEvent(inputEvent); + this.heightContainer.inputs.forEach(input => { + dimensionChange({target: input}, false, true); + }); + this.widthContainer.inputs.forEach(input => { + dimensionChange({target: input}, true, false); + }); + } + + static observeStartup(key, page, defaultOptions, postSetup = (_) => { + }) { + let observer = new MutationObserver(() => { + const widthContainer = gradioApp().querySelector(`#${page}_width`); + const heightContainer = gradioApp().querySelector(`#${page}_height`); + + // wait for width and height containers to exist. + if (widthContainer && heightContainer && window.opts && window.opts.arh_javascript_aspect_ratio_show !== undefined) { + observer.disconnect(); + if (!window.opts.arh_javascript_aspect_ratio_show) { + return; + } + + const controller = new AspectRatioController( + page, + widthContainer, + heightContainer, + defaultOptions, + ); + + postSetup(controller); + window[key] = controller; + } + }); + + observer.observe(gradioApp(), {childList: true, subtree: true}); + } + +} + +const addImg2ImgTabSwitchClickListeners = (controller) => { + const img2imgTabButtons = Array.from(document.querySelectorAll('#img2img_settings > div > div > button:not(.selected):not(.hasTabSwitchListener)')); + img2imgTabButtons.forEach(button => { + button.addEventListener('click', (_) => { + // set aspect ratio is RECALLED to change to the image specific to the newly selected tab. + if (controller.optionPickingControler.getCurrentOption() === _IMAGE) { + controller.setAspectRatio(_IMAGE); + } + + addImg2ImgTabSwitchClickListeners(controller); + }); + + button.classList.add('hasTabSwitchListener'); + }); +} + +const postImageControllerSetupFunction = (controller) => { + const scaleToImg2ImgImage = (e) => { + const picked = controller.optionPickingControler.getCurrentOption(); + if (picked !== _IMAGE) return; + const files = e.dataTransfer ? e.dataTransfer.files : e.target.files; + const img = new Image(); + img.src = URL.createObjectURL(files[0]); + img.onload = () => { + controller.setAspectRatio(`${img.naturalWidth}:${img.naturalHeight}`) + }; + } + + _IMAGE_INPUT_CONTAINER_IDS.forEach(imageContainerId => { + const imageContainer = document.getElementById(imageContainerId); + const inputElement = imageContainer.querySelector('input'); + inputElement.parentElement.addEventListener('drop', scaleToImg2ImgImage); + inputElement.addEventListener('change', scaleToImg2ImgImage); + }) + + addImg2ImgTabSwitchClickListeners(controller); +} + +document.addEventListener("DOMContentLoaded", () => { + AspectRatioController.observeStartup( + "__txt2imgAspectRatioController", + "txt2img", + [_OFF, _LOCK] + ); + AspectRatioController.observeStartup( + "__img2imgAspectRatioController", + "img2img", + [_OFF, _LOCK, _IMAGE], + postImageControllerSetupFunction + ); +}); diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/scripts/sd_webui_aspect_ratio_helper.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/scripts/sd_webui_aspect_ratio_helper.py new file mode 100644 index 0000000000000000000000000000000000000000..ed78b20d6a33f4f180b0f04392dfbb08f72ec1a8 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/scripts/sd_webui_aspect_ratio_helper.py @@ -0,0 +1,5 @@ +from __future__ import annotations + +from aspect_ratio_helper.main import AspectRatioStepScript + +__all__ = ['AspectRatioStepScript'] diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/style.css b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/style.css new file mode 100644 index 0000000000000000000000000000000000000000..d6a3378cdb00d7d716570823ad5e49d8d091f39e --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/style.css @@ -0,0 +1,36 @@ +#txt2img_size_toolbox, #img2img_size_toolbox { + min-width: unset !important; + gap: 0; +} + +#txt2img_ratio, #img2img_ratio { + padding: 0px; + min-width: unset; + max-width: fit-content; +} + +#txt2img_ratio select, #img2img_ratio select { + background: var(--background-fill-primary); + border: 1px solid var(--block-border-color); + color: var(--block-label-text-color); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-image: none; + tab-size: 4; + font-size: 14px; + line-height: 1.4; + box-sizing: border-box; + position: relative; + border-radius: 8px; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); + padding-right: 1px; + margin-bottom: 10px; + padding-left: 2px; + text-align: center; + min-width: 2.5em; +} + +.arh-btn-row button { + min-width: fit-content; +} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tests/__init__.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tests/_util_test.py b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tests/_util_test.py new file mode 100644 index 0000000000000000000000000000000000000000..4d736c15376638b53e564b0d8449e49d00f0bcb1 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tests/_util_test.py @@ -0,0 +1,291 @@ +from __future__ import annotations + +import pytest + +import aspect_ratio_helper._constants as _constants +import aspect_ratio_helper._util as _util + + +@pytest.mark.parametrize( + 'num, expected', + [ + (50, 'x0.5'), + (150, 'x1.5'), + (175, 'x1.75'), + (250, 'x2.5'), + ], +) +def test_display_multiplication(num, expected): + assert _util.display_multiplication(num) == expected + + +@pytest.mark.parametrize( + 'num, expected', + [ + (50, '50%'), + (75, '75%'), + (100, '100%'), + (150, '150%'), + (250, '250%'), + ], +) +def test_display_raw_percentage(num, expected): + assert _util.display_raw_percentage(num) == expected + + +@pytest.mark.parametrize( + 'num, expected_output', [ + (150, '+50%'), + (100, '0%'), + (50, '-50%'), + (0, '-100%'), + (200, '+100%'), + (75, '-25%'), + ], +) +def test_display_minus_and_plus(num, expected_output): + assert _util.display_minus_and_plus(num) == expected_output + + +@pytest.mark.parametrize( + 'width, height, pct, expected', + [ + pytest.param(200, 400, 0.5, (96, 200), id='50_percent_scale_down'), + pytest.param(100, 200, 2.0, (200, 400), id='200_percent_scale_up'), + pytest.param(100, 200, 1.1, (112, 224), id='10_percent_scale_up'), + pytest.param(100, 200, 0.9, (88, 176), id='10_percent_scale_down'), + pytest.param(100, 200, 0.0, (64, 128), id='scale_full_down'), + pytest.param( + _constants.MIN_DIMENSION - 1, + _constants.MIN_DIMENSION - 1, + 0.5, + (_constants.MIN_DIMENSION, _constants.MIN_DIMENSION), + id='scale_belowMIN_DIMENSION', + ), + pytest.param( + _constants.MAX_DIMENSION + 1, + _constants.MAX_DIMENSION + 1, + 2.0, + (_constants.MAX_DIMENSION, _constants.MAX_DIMENSION), + id='scale_aboveMAX_DIMENSION', + ), + ], +) +def test_scale_by_percentage( + width, height, pct, expected, +): + assert _util.scale_by_percentage( + width, height, pct, + ) == expected + + +@pytest.mark.parametrize( + 'width, height, max_dim, expected', + [ + # pytest.param( + # 100, 200, 400, (200, 400), + # id='scale_up_to_max_dimension_horizontally', + # ), + # pytest.param( + # 200, 100, 400, (400, 200), + # id='scale_up_to_max_dimension_vertically', + # ), + # pytest.param( + # 400, 64, 400, (400, 64), + # id='no_scale_up_needed_with_max_dimension_width', + # ), + # pytest.param( + # 64, 400, 400, (64, 400), + # id='no_scale_up_needed_with_max_dimension_height', + # ), + # pytest.param( + # _constants.MIN_DIMENSION, + # _constants.MIN_DIMENSION, + # _constants.MAX_DIMENSION, + # (_constants.MAX_DIMENSION, _constants.MAX_DIMENSION), + # id='scale_from_min_to_max', + # ), + # pytest.param( + # _constants.MAX_DIMENSION, + # _constants.MAX_DIMENSION, + # _constants.MIN_DIMENSION, + # (_constants.MIN_DIMENSION, _constants.MIN_DIMENSION), + # id='scale_from_max_to_min', + # ), + pytest.param( + _constants.MIN_DIMENSION, 32, _constants.MIN_DIMENSION, + (128, _constants.MIN_DIMENSION), + id='scale_below_min_height_dimension_clamps_retains_ar', + ), + pytest.param( + 32, _constants.MIN_DIMENSION, _constants.MIN_DIMENSION, + (_constants.MIN_DIMENSION, 128), + id='scale_below_min_width_dimension_clamps_retains_ar', + ), + # pytest.param( + # _constants.MAX_DIMENSION, 4096, _constants.MAX_DIMENSION, + # (1024, _constants.MAX_DIMENSION), + # id='scale_above_max_height_dimension_clamps_retains_ar', + # ), + # pytest.param( + # 4096, _constants.MAX_DIMENSION, _constants.MAX_DIMENSION, + # (_constants.MAX_DIMENSION, 1024), + # id='scale_above_max_width_dimension_clamps_retains_ar', + # ), + # pytest.param( + # 64, 64, _constants.MIN_DIMENSION - 1, + # (_constants.MIN_DIMENSION, _constants.MIN_DIMENSION), + # id='scale_dimension_below_min_dimension_clamps_retains_ar', + # ), + # pytest.param( + # 64, 64, _constants.MAX_DIMENSION + 1, + # (_constants.MAX_DIMENSION, _constants.MAX_DIMENSION), + # id='scale_dimension_above_max_dimension_clamps_retains_ar', + # ), + ], +) +def test_scale_dimensions_to_max_dim( + width, height, max_dim, expected, +): + assert _util.scale_dimensions_to_max_dim( + width, height, max_dim, + ) == expected + + +@pytest.mark.parametrize( + 'width, height, min_dim, expected', + [ + pytest.param( + 100, 200, 400, (400, 800), + id='scale_up_to_min_dimension_with_ar_preservation', + ), + pytest.param( + 200, 100, 400, (800, 400), + id='scale_up_to_min_dimension_with_ar_preservation', + ), + pytest.param( + 100, 100, 400, (400, 400), + id='no_scale_up_needed_with_min_dimension', + ), + pytest.param( + _constants.MIN_DIMENSION, _constants.MIN_DIMENSION, _constants.MAX_DIMENSION, + (_constants.MAX_DIMENSION, _constants.MAX_DIMENSION), + id='scale_up_to_max_dimension_with_ar_preservation', + ), + pytest.param( + _constants.MAX_DIMENSION, _constants.MAX_DIMENSION, _constants.MIN_DIMENSION, + (_constants.MIN_DIMENSION, _constants.MIN_DIMENSION), + id='scale_down_to_min_dimension_with_ar_preservation', + ), + pytest.param( + 100, 100, _constants.MAX_DIMENSION, + (_constants.MAX_DIMENSION, _constants.MAX_DIMENSION), + id='scale_up_to_max_dimension_with_ar_preservation', + ), + ], +) +def test_scale_dimensions_to_min_dim( + width, height, min_dim, expected, +): + assert _util.scale_dimensions_to_min_dim( + width, height, min_dim, + ) == expected + + +class SharedOpts: + def __init__(self, options=None, defaults=None): + self.options = options or {} + self.defaults = defaults or {} + + def __getattr__(self, key): + try: + return self.options[key] + except KeyError: + raise AttributeError() + + def get_default(self, key): + return self.defaults.get(key, None) + + +def test_safe_opt_util(): + shared_opts = SharedOpts(options={'key': 'value'}) + assert _util.safe_opt_util(shared_opts, 'key', {}) == 'value' + + +def test_safe_opt_util_none(): + shared_opts = SharedOpts(options={'key': None}, defaults={'key': 'value'}) + assert _util.safe_opt_util(shared_opts, 'key', {}) == 'value' + + +def testsafe_opt_util_default_a(): + shared_opts = SharedOpts( + defaults={'key': 'default_a'}, + ) + assert _util.safe_opt_util( + shared_opts, 'key', {'key': 'default_b'}, + ) == 'default_a' + + +def test_safe_opt_util_default_b(): + shared_opts = SharedOpts(defaults={'key': None}) + assert _util.safe_opt_util( + shared_opts, 'key', {'key': 'default_b'}, + ) == 'default_b' + + +@pytest.mark.parametrize( + 'options', ({'key': None}, {}), +) +def test_safe_opt_safe_return_no_defaults_b(options): + shared_opts = SharedOpts(options=options) + assert _util.safe_opt_util(shared_opts, 'unknown_key', {}) is None + + +@pytest.mark.parametrize( + 'value, expected', [ + (0, 0), + (7, 8), + (10, 8), + (16, 16), + (23, 24), + (32, 32), + (33, 32), + (100, 96), + (10.5, 8), + (15.3, 16), + (21.8, 24), + (33.9, 32), + (98.7, 96), + ], +) +def test_round_to_multiple_of_8(value, expected): + assert _util.round_to_multiple_of_8(value) == expected + + +@pytest.mark.parametrize( + 'width, height, aspect_ratio, expected', [ + (100, 100, 1.0, (96, 96)), + (3000, 2000, 1.5, (2048, 1368)), + (500, 8000, 0.5, (1024, 2048)), + (500, 300, 2.0, (496, 304)), + (100, 200, 0.5, (96, 200)), + (500, 500, 1.2, (496, 496)), + (2048, 2048, 1.0, (2048, 2048)), + (2049, 2048, 1.0, (2048, 2048)), + (2048, 2049, 1.0, (2048, 2048)), + (2049, 2049, 1.0, (2048, 2048)), + (63, 63, 1.0, (64, 64)), + (2050, 2050, 1.0, (2048, 2048)), + (63, 64, 1.0, (64, 64)), + (64, 63, 1.0, (64, 64)), + (64, 64, 1.0, (64, 64)), + (63, 63, 1.0, (64, 64)), + (2050, 63, 1.0, (2048, 2048)), + (63, 2050, 1.0, (2048, 2048)), + (2050, 2050, 0.01, (64, 2048)), + (100.5, 100.5, 1.0, (104, 104)), + (200.3, 100.7, 0.5, (200, 104)), + ], +) +def test_clamp_to_boundaries(width, height, aspect_ratio, expected): + assert _util.clamp_to_boundaries(width, height, aspect_ratio) == expected diff --git a/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tox.ini b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tox.ini new file mode 100644 index 0000000000000000000000000000000000000000..4c6cac4b77bc3e9d6f668da6c3ce61e3c1551929 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/aspect-ratio/tox.ini @@ -0,0 +1,6 @@ +[tox] +envlist = py310, py311 + +[testenv] +deps = pytest +commands = pytest diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/.github/CODEOWNERS b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/.github/CODEOWNERS new file mode 100644 index 0000000000000000000000000000000000000000..ea30e3119f3bb1dbefb1ecddcf5e2c2af997a482 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# Global rule: +* @etherealxx diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/.gitignore b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ef06d19b1f72bc93f56af94b78a7d52724a9daf3 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/.gitignore @@ -0,0 +1,168 @@ +*.bak +*.backup +imageratio.* +*.lnk +tempCodeRunnerFile.python +.DS_Store +gradiovenv/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/LICENSE b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..dfd7367e611d85047cdf8e09109a9b77f08eb861 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Etherealxx + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/README.md b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8538b40fdd03f1dc08e19ced931461f592aee879 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/README.md @@ -0,0 +1,491 @@ +
+ +
+ + Logo + + +

BatchLinks Downloader

+ +

+ Batch-downloading models and stuff in stable-diffusion-webui colab made simple and fast. +
+ +
+ Report Bug + · + Request Feature +

+ +
+ + + + + +
+ Table of Contents +
    +
  1. Installation
  2. +
  3. About
  4. +
  5. Example
  6. +
  7. Syntax
  8. + + + + + + + +
  9. Additional Syntax
  10. + + + + + +
  11. Gradio Queue
  12. + + + + +
  13. Other Features
  14. + + + + + +
  15. Release Notes
  16. +
  17. Roadmap
  18. +
  19. Known Bugs
  20. + +
  21. Contributing
  22. +
  23. Contact
  24. +
  25. Acknowledgments
  26. + +
+
+ +[does this repo still maintained?](https://github.com/etherealxx/batchlinks-webui/blob/main/regardingthisrepo.md) + +## Installation + +Copy this line into your colab installation cell. Or into a new cell if you already launched the webui. + +``` +!git clone https://github.com/etherealxx/batchlinks-webui /content/stable-diffusion-webui/extensions/batchlinks-webui +``` + +or, you can copy the url of this repo and install it via webui and restart the UI.
+Logo
+(If `gradio no interface is running` or `bad gateway` shows up when restarting the UI, that means you need to restart the cell anyway 😅) + + + +Using `--gradio-queue` on the launch.py argument is highly recommended, as it enables this extension to show download progress bar on the UI and a cancel button. The option itself has no negative effect on the webui. [Read more here.](https://github.com/etherealxx/batchlinks-webui#gradio-queue)
+Logo
+ +You can also run this extension in [SDless mode](https://github.com/etherealxx/batchlinks-webui#sdless-mode) btw. + +While it's not recommended to use this extension on your local installation, you can use this extension on Windows. [More here.](https://github.com/etherealxx/batchlinks-webui#local-installation-support) + +## About + +This extension will streamline your downloads on your [stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) colab session. Paste the links you need to download (or you can upload a txt file containing the links), use the hashstag syntax to choose the download location (see below), and hit the `Download All` button to download them! + +## Example + +Look at this example
+Logo
+ +``` +#model +https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3_orangemixs.safetensors +#vae +https://huggingface.co/hakurei/waifu-diffusion-v1-4/resolve/main/vae/kl-f8-anime2.ckpt +#embed +https://huggingface.co/datasets/Nerfgun3/bad_prompt/resolve/main/bad_prompt_version2.pt +https://huggingface.co/etherealxx/whoseisthis/resolve/main/bad_artist.pt +#lora +https://civitai.com/api/download/models/8840 ##1-mb-lora-trained-in-5-mins-that-does-the-same-thing-as-25-gb-model-but-better +https://civitai.com/api/download/models/6891 ##sans undertale +https://mega.nz/file/gAxTWBAI#uL7EZay-OND5G6ELJlGfUNG0s7Q4TynZKqFdvs0v0tc ##agent8-finetune +https://mega.nz/file/oU43FSTY#vwAfsAb7RKJ4xtsSP7uzrKpWhh1y8BdpIBFurwsVP2o ##agent8-dreambooth +#hypernet +https://cdn.discordapp.com/attachments/1070489470127841381/1070489471964954684/MomopocoV3.pt +``` + +This piece of lines will be read from top to bottom. Every hashtag, it will change the current output directory to said directory (see below). So what this example do is it will download `AOM3` model to the model folder, then it will download the vae and put it to the Vae folder. Next it will download two embed, `bad prompt` and `bad artist`. Next it will download several LoRAs from CivitAI and MEGA, and put it to the Lora folder. Lastly, it changes the directory to hypernet directory, then + +You can also copy that example and paste it to a `.txt` file to use later. You can load a `.txt` file containing that piece of lines directly from the UI. + +When the items is downloading, you can inspect the running code on the colab cell, or just take a coffee and chill☕. If you activate logging, you can inspect the download progress from the UI, more [here](https://github.com/etherealxx/batchlinks-webui#logging) + +When the download is complete, the downloaded file will be listed
+Logo
+ +## Syntax + +#### Hashtag +- Hashtag means change current output directory to this directory. `#model` means every links below this hashtag, will be downloaded to _/content/stable-diffusion-webui/models/Stable-diffusion_, until it hits another hashtag, which will change the output directory again. See [below](https://github.com/etherealxx/batchlinks-webui#valid-hashtags) for valid hashtags. + + Note: If you use some colab that purposefully uses `sd-webui-additional-networks` extension to load Lora, use `#addnetlora` instead of `#lora`. It will download the lora to where it supposed to be. + +#### Links +- Links are the main things you wants to be downloaded. Current supported links are from: + - Huggingface (https://huggingface.co/) + - MEGA (https://mega.nz/) {using `mega-cmd`} + - CivitAI (https://civitai.com/) + - Discord attachments (https://cdn.discordapp.com/attachments/) + - catbox (https://files.catbox.moe) + - Github (https://github.com or https://raw.githubusercontent.com) + - Google Drive (https://drive.google.com) {using `gdown`} + - Pixeldrain (https://pixeldrain.com/u/) + - Mediafire (https://www.mediafire.com/file) {using `mediafire-dl`} + - anonfiles (https://anonfiles.com) + + Every links other than that will be ignored. Keep in mind the only supported links are direct download links (see [here](https://github.com/etherealxx/batchlinks-downloader/blob/main/howtogetthedirectlinks.md)). For Huggingface, Civitai (model page link method), Discord attachments, catbox, pixeldrain, and anonfiles, there will be four different method of downloading offered (see [below](https://github.com/etherealxx/batchlinks-webui#huggingfaces-download-method)). For MEGA, it will use `mega-cmd` to download. For Github, if, the link is a raw file, it will download the file. Else, it will use `git clone`, useful to clone extension repo into the webui extension folder. + + More about CivitAI download method [here](https://github.com/etherealxx/batchlinks-webui#civitais-download-method). + +#### Double Hashtag +- Double hashtag means comment. You can put double hashtag in the same line of the link and it will be ignored (keep in mind to put the link first then the double hashtag) + +#### Others +- Other texts will be ignored. + +### Valid Hashtags + +`#model`, `#models`, `#checkpoint`, or `#checkpoints` will put the downloaded file to _/content/stable-diffusion-webui/models/Stable-diffusion_ + +`#embedding`, `#embeddings`, `#embed`, `#embeds`, `#textualinversion`, or `#ti` will put the downloaded file to _/content/stable-diffusion-webui/embeddings_ + +`#vae` or `#vaes` will put the downloaded file to _/content/stable-diffusion-webui/models/VAE_ + +`#hypernetwork`, `#hypernetworks`, `#hypernet`, `#hypernets`, `#hynet`, or `#hynets` will put the downloaded file to _/content/stable-diffusion-webui/models/hypernetworks_ + +`#lora` or `#loras` will put the downloaded file to _/content/stable-diffusion-webui/models/Lora_ + +`#addnetlora`, `#loraaddnet`, `#additionalnetworks`, or `#addnet` will put the downloaded file to _/content/stable-diffusion-webui/extensions/sd-webui-additional-networks/models/lora_ + +`#aestheticembedding` or `#aestheticembed` will put the downloaded file to _content/stable-diffusion-webui/extensions/stable-diffusion-webui-aesthetic-gradients/aesthetic_embeddings_ + +`#controlnet` or `#cnet` will put the downloaded file to _/content/stable-diffusion-webui/extensions/sd-webui-controlnet/models_ + +`#upscale` or `#upscaler` will put the downloaded file to _/content/stable-diffusion-webui/models/ESRGAN_ + +`#lycoris`, `#locon`, or `#loha` will put the downloaded file to _/content/stable-diffusion-webui/extensions/sd-webui-additional-networks/models/lora/lycoris_ + +`#altmodel` or `#altmodels` will put the downloaded file to the path you choose when using `--ckptdir` argument on `launch.py` line. If you didn't use that argument, this hashtag will points to the same directory as `#model` + +_Lycoris/Locon/Loha_ will works just fine if you use `#addnetlora` instead, as long as you have both [addnet extension](https://github.com/kohya-ss/sd-webui-additional-networks) and [locon extension](https://github.com/KohakuBlueleaf/a1111-sd-webui-locon) installed. It's unclear if it's can be loaded by native auto1111 lora. (Tell me if you know more about this.) + +Github links (if it does not contain `/raw/` or `/release/download/` in it) doesn't need hashtag. It will always considered as webui extension, and the repository will be cloned to _/content/stable-diffusion-webui/extensions/(reponame)_ + +### How to get the direct links (Important!) + +See [here](https://github.com/etherealxx/batchlinks-downloader/blob/main/howtogetthedirectlinks.md) + +### Huggingface's download method + +So there's four supported method: `gdown`, `wget`, `curl` and `aria2`. Use whatever, really. The difference between them are actually little. Myself love using `gdown` since the output is cleaner than the others. `aria2` has the fastest download speed though. + + + +## Additional Syntax +### Rename Downloaded Files +Using `>` symbol, you can rename files. Take this for example
+Log
+Mostly catbox file has random name, by using `>` symbol after the link, you can type the desired name on the right. (Don't forget the extension) + +### Running Shell Commands +You can run shell commands by using `!` in front of the command you want, just like in google colab cells. Then press the `Download All!` button. (Sure, it doesn't download anything, but, well😅)
+Log +Log
+You can run many lines at once too! + +### Extract Everyting (`@extract`) +You can use `@extract` to extract every `*.7z`, `*.rar`, and `*.zip` on current directory). +``` +#lora + +@extract +#embed +``` +This will extract everything on Lora folder, since the code runs from top to bottom, and when the `@extract` executes, the current directory is still on Lora folder. + +### Custom Hashtag Path (`@new`) +You can use `@new ` to make a new usable hashtag and assign a directory path to it.
For example, you type this and press the `Download All!` button: +``` +@new #private /content/stable-diffusion-webui/outputs +#private + +``` +This will make a new hashtag `#private`, make it points to _/content/stable-diffusion-webui/outputs_, set `#private` as current directory, then download whatever into it. You can check if the new hashtag is assigned successfully by looking at the hashtag table on the right/bottom of the screen. + +### Custom Direct Link Download with `aria2` (`@aria2`) +If there are other direct links that isn't supported by Batchlinks, you can use `@aria` or `@aria2` custom command to download it. The main syntax is: +``` +@aria2 {link} {path/hashtag} > {filename} +``` +You can change `@aria2` with `@aria`, both works. Both the `path/hashtag` and `filename` is optional. This command was made to avoid hassle writing this: +``` +aria2c --summary-interval=1 --console-log-level=error -c -x 16 -s 16 -k 1M {link} -d {path} -o {filename} +``` +There are several ways to use it. Here i use a [20MB download test file](http://212.183.159.230/20MB.zip) as an example. +``` +@aria2 http://212.183.159.230/20MB.zip +``` +☝️ This will download the file into the current directory (where the hashtags points to). So if before that line you use `#vae`, it will be downloaded to the vae directory. If there are no hashtags before, it'll be sent to the default `#model` directory. The filename will be the last part of the link (`512MB.zip`). +``` +@aria2 http://212.183.159.230/20MB.zip #vae +``` +☝️ This will download the file into where `#vae` points to (which is the vae directory). You can use custom hashtag here as well. +``` +@aria2 http://212.183.159.230/20MB.zip /content/stable-diffusion-webui +``` +☝️ This will download the file into the written path, which is _/content/stable-diffusion-webui_. Make sure it is a folder path, not a file path. +``` +@aria2 http://212.183.159.230/20MB.zip /content/stable-diffusion-webui > 20megabytes.zip +``` +☝️ This will download the file into the written path and rename the file into `20megabytes.zip`. Remember to make sure to write the extension too. + +## Gradio Queue + +If you use --gradio-queue argument on `launch.py`, some feature will be activated. + +### Logging + + +Enable logging by pressing the `Turn On Logging` radio button, and wait till `Logging activated` shows up and the box is blinking with orange border. Logging will tell you what are you actually downloading right now on the webui. After your download session is completed, it's recommended to turn back off the feature.
+Log
+ +### Cancel +Pressing `cancel` button while download in progress will stops the current session. Useful when at one time the download speeds is too slow. If you're currently downloading a single item, that item will be cancelled, but the other downloaded one will remain intact.
+Log
+ +### Progress Bar +There will be an additional progress bar that tells you the current activities.
+Log
+ +### Changes if `--gradio-queue` is off +Feature listed above will dissapear, and your only option for download is just `aria2` (speed is priority).
Note that when you pressed the `Download All!` button, **nothing will shows up on the UI**. You need to check the colab console.
+checkoff
+Another thing to note is your download session will always be cutted every 70 seconds (to prevent hangs/desync).
+off
+Don't worry, you can continue your session by pressing the `Resume Download` button. It will refresh the links with the one you haven't downloaded yet, then pressing `Download All!` will download the remaining links.
+off
+ +## Other Features + +### Notification + +This extension will play sound effect when the download process is completed. It's somewhat buggy at the moment though. + +### Copy From Pastebin + +You can put your links on pastebin (write it the way you wrote on Batchlinks), put the pastebin link (https://pastebin.com/xxxx) on the link input, and press the 'Copy from Pastebin' button. It will copy all the the links on the pastebin to the UI. Useful to avoid hassle copy and pasting a bunch of text while on mobile.
+off
+ +### SDless mode +This mode will run the extension without the need of stable-diffusion-webui. Good for my own purpose of debugging it😁.
+off
+ +Copy-paste this on a new colab cell then run it: +``` +from IPython.display import clear_output +!pip3 show virtualenv >/dev/null || pip install -q virtualenv +![ -d gradiovenv ] || virtualenv gradiovenv +!git clone https://github.com/etherealxx/batchlinks-webui \ +/content/stable-diffusion-webui/extensions/batchlinks-webui +pip3 show gradio >/dev/null || pip install -q gradio==3.16.2; \ +pip3 show tqdm >/dev/null || pip3 install -q tqdm +clear_output(wait=True) +!source gradiovenv/bin/activate; \ +python /content/stable-diffusion-webui/extensions/batchlinks-webui/scripts/batchlinks-downloader.py +``` +or here's the quicker version without venv: +``` +!pip install gradio==3.16.2 +!git clone https://github.com/etherealxx/batchlinks-webui /content/stable-diffusion-webui/extensions/batchlinks-webui +!python /content/stable-diffusion-webui/extensions/batchlinks-webui/scripts/batchlinks-downloader.py +``` + +For Windows, run the sdless-windows.bat. Make sure you have `python3` and `gradio` package version 3.16.2 or above. It won't use venv. + +This one for MacOS. Tested on Mojave. Create a shell script and give execute access to it. +``` +#!/usr/bin/env bash +pip3 show virtualenv >/dev/null || pip3 install virtualenv +[ -d gradiovenv ] || virtualenv gradiovenv +git clone https://github.com/etherealxx/batchlinks-webui \ +$HOME/Downloads/stable-diffusion-webui/extensions/batchlinks-webui +source gradiovenv/bin/activate; \ +pip3 show gradio >/dev/null || pip3 install gradio==3.16.2; \ +pip3 show tqdm >/dev/null || pip3 install -q tqdm +source gradiovenv/bin/activate; \ +python3 $HOME/Downloads/stable-diffusion-webui/extensions/batchlinks-webui/scripts/batchlinks-downloader.py +``` + +### Local Installation Support + +This extension was tested to work on Windows 11. But ultimately, the number one priority for me is colab use, so there's might be bugs on Windows 11 one. Maybe also works on Debian-based linux (but you better inspect the source code first). +On Windows, this extension will install [MEGAcmd](https://github.com/meganz/MEGAcmd) for MEGA file download, [wget-windows](https://github.com/webfolderio/wget-windows) for download using `wget`, [aria2-static-builds](https://github.com/q3aql/aria2-static-builds) for download using `aria2`, [7zr and 7z](https://www.7-zip.org) for extracting `aria2` installation, and for `@extract` command. +MacOS is just partially supported. + +Also remember, in order for this extension to work properly, you need make sure that you tick that `add Python 3.10 to PATH` checkbox when you installed Python (Which is already recommended when installing stable-diffusion-webui)
+python
+ +### Debug Mode (Developer only) + +By manually switching `globaldebug = False` to `True` on the source code, or using `--debug` argument when running the sdless mode, the Debug Mode will be activated. It shows every `print` calls i use to track variables. It will also tracks every files on the models (etc.) paths into a `snapshot.txt` file (if there isn't one). + +There are some batchlinks syntax features that only available on debug mode (putting it on the textbox and click `Download All!`): + +`@debugresetdownload` - This command will check every model (etc.) directory, and remove every file that isn't on `snapshot.txt`. Useful for me to removes file quickly when testing. **Be careful using this on your local installation.** + +`@debugresetdownload` - This command is (supposed to) download a single link with every method available (gdown, curl, wget, aria2), but now i rarely use this command, and haven't updated since. Might be buggy. + +## Release Notes +Moved [here](https://github.com/etherealxx/batchlinks-webui/blob/main/releasenotes.md). Check it out for latest features & bug fixes. + +## Roadmap + +- [ ] Add checker for downloaded models (so that it won't download again after the model is downloaded) +- [ ] Different UI for mobile +- [ ] Gradio progress bar +- [ ] Integrating refresh button (`create_refresh_button`) to refresh models etc. all at once +- [ ] Logo change +- [ ] Moving most of the content of this `Readme.md` to Wiki instead +- [ ] Other download sites (s-ul.eu, gitgud, bunkr.ru, icedrive) +- [ ] Separate 'download' and 'run command' function with a subtab +- [ ] Support download MEGA and Google Drive folder +- [ ] Using `yield` instead of gradio's `every` +- [ ] Youtube video (Tutorial) +- [ ] (Crawler) Download every sd-webui related file from a huggingface repo +- [ ] (Crawler) Download every model from a civitai user page +
_ +- [x] aria2 for huggingface download method +- [x] Cleaning the code from unnecesarry comments +- [x] Completed download will use the webui's notification.mp3 +- [x] Support customizable hashtag from the UI +- [x] Supports Windows local installation +- [x] UI overhaul +- [x] Using threading/subprocess instead of os.system to download files +- [x] (Windows) wget & aria2 support + +## Known Bugs + +- Progress bar (the yellow bar) doesn't progress as expected +- Sometimes notification sound doesn't play when downloading same file twice in a row +- Sometimes notification sound shows up when starting download, instead of when the download process is completed. +- There's still a chance that the UI of non `--gradio-queue` session and/or onedotsix freezes after a download session +- Windows: The delay between file is downloaded and the output shows is pretty long, and even sometimes the notification comes at the wrong time. +
+ +### Known Fixed Bugs + +
+ 👈Fixed Bugs +
    +
      +
    • Links that has bracket in it needs to be 'escaped' (For example, Baka-DiffusionV1(Fp16).safetensors must be typed Baka-DiffusionV1\(Fp16\).safetensors)
      ☝️Fixed in v2.0.0 +
    • The delay between file is downloaded and the output shows is really long (1min+) on camenduru's v1.6 colab (Gradio related?)
      ☝️Seems like fixed in v1.1.0 +
    • File downloaded from MEGA will not listed on the output, as it use different download method. There is some delay between the transfare() function complete until it writes the file. I don't know how long the delay is.
      ☝️Fixed in v1.1.0 +
    • Sometimes colab cannot be shut down with a single click on the stop button. Hitting the button several times will raise a KeyboardInterrupt and forcely stopping the cell.
      ☝️Seems like fixed somewhere on v3.0.0 and after +
    +
+
+ +## Contributing + + + +[I no longer actively maintain this project](https://github.com/etherealxx/batchlinks-webui/blob/main/regardingthisrepo.md). if you have a suggestion or code-fixing that would make this better, please notify me in the issue tab, fork the repo and create a pull request.
+But still, a star on this project would be nice. Thanks again. + + + +## Contact + +My Email - gwathon3@gmail.com
+My Youtube - [MJ Devlog](https://www.youtube.com/@mjdevlog) + +## Acknowledgments + +- [Camenduru's Webui Huggingface](https://github.com/camenduru/stable-diffusion-webui-huggingface) - I use his extension as my base (my gradio skill sucks T.T) +- [SD Civitai Browser](https://github.com/Vetchems/sd-civitai-browser) - Civit download script +- [Mega-to-Google-Drive](https://github.com/menukaonline/Mega-to-Google-Drive) - MEGA download script +- [MEGAcmd](https://github.com/meganz/MEGAcmd) +- [mediafire-dl](https://github.com/Juvenal-Yescas/mediafire-dl) +- [Pixeldrain downloader](https://github.com/FayasNoushad/Pixeldrain) - Inspiration for Pixeldrain download method +- [wget-windows](https://github.com/webfolderio/wget-windows) +- [aria2-static-builds](https://github.com/q3aql/aria2-static-builds) +- [7zr, 7z](https://www.7-zip.org) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/howtogetthedirectlinks.md b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/howtogetthedirectlinks.md new file mode 100644 index 0000000000000000000000000000000000000000..f7387a794f4dbde713f74f1e5e7f45c92000cc4e --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/howtogetthedirectlinks.md @@ -0,0 +1,104 @@ +# How to get the direct links + +Jump to: [Huggingface](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#huggingface) - [Civit AI](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#civit-ai) - [MEGA](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#mega) - [Discord](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#discord-attachments) - [Github (Extension)](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#webui-extension-github-repo-link) - [Github (Raw File)](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#raw-file-from-github) - [Github (Release File)](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#release-file-from-github) - [Google Drive](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#google-drive) - [Pixeldrain](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#pixeldrain) - - [Mediafire](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#mediafire) - [Anonfiles](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#anonfiles) - [Dropbox](https://github.com/etherealxx/batchlinks-webui/blob/main/howtogetthedirectlinks.md#dropbox) + +## Huggingface + +Locate the model page, click on `files` tab.

+hg1

+choose the model you want, **right click** the arrow button beside the LFS logo, then click `copy link address`.

+hg2

+ +## Civit AI + +There are two ways to download links from Civit. The model page link method, and the direct link method. The model page link method **will automatically** choose the directory of the saved model without even using hashtag, **except** if you want to put Lora into `#addnetlora` directory, you can use that hashtag. You still need to define the output directory when using the direct link method. + +### Model Page Link Method + +Locate the desired model on the main page of Civitai, **right click** the model thumbnail, then click `copy link address`.

+cv

+You can also click the thumbnail first then copy the link.

+cv

+The advantage of this method is you will also get the model preview images that can shows up on the latest version of [stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui). + +### Direct Link Method + +Locate the model page, **right click** the huge blue button, then click `copy link address`.

+cv

+With this method, you can also choose model variation, by clicking the dropdown icon on the blue button, then **right click** the desired model an.

+cv

+ +## MEGA + +Locate the model you wanted, **right click** the item, click `copy link address`.

+mg1

+Click the huge green copy button.

+mg2

+ +## Discord attachments + +Locate the file you wanted, **right click** the download icon, then click `get link`.

+mg1

+Then click `copy link`.

+mg2

+ +## webui Extension (Github repo link) + +Locate the extension's repository, then copy the repository link.

+mg1

+ +Extension **will automatically** cloned/downloaded on `extensions` directory of webui without the need of hashtag. + +## Raw file from Github + +Locate the file's repository, then click the desired file.

+mg1

+Then **right click** the text that says `raw` **or** `download`, and click `copy link address`

+mg1

+mg1

+ +## Release file from Github + +Locate the file's repository, then click release section.

+mg1

+Then **right click** the desired assets (the blue text), and click `copy link address`

+mg1

+ +## Google Drive + +Whether you own the file or not, make sure the file is public. If you owns the file, right click on the file on Google Drive, then click `get link` (or `share`).

+mg1

+Then change the access to `anyone with thelink`, and copy the link by clicking the button

+mg1

+ +These are some valid google drive link patterns that works: +``` +https://drive.google.com/file/d/1-UbwFtSzKTQkvjdPiKLCejH0Ztq9UJFO/view +https://drive.google.com/file/d/1-UbwFtSzKTQkvjdPiKLCejH0Ztq9UJFO/view?usp=share_link +https://drive.google.com/u/0/uc?id=1-UbwFtSzKTQkvjdPiKLCejH0Ztq9UJFO&export=download +https://drive.google.com/u/0/uc?id=1-UbwFtSzKTQkvjdPiKLCejH0Ztq9UJFO&export=download&confirm=t +``` +## Pixeldrain + +Just click the `copy link` button, or just copy the link.

+mg1

+ +## Anonfiles + +**Don't** right click the download button. Instead, copy the link on the url bar

+mg1

+ +## Mediafire + +When you arrived on this page, click the chain link icon to copy link, or just copy the link above

+mg1

+ +Don't forget that when being pasted, the link must starts with `https://www.mediafire.com/file/` (notice the triple W) + +## Dropbox + +When the item is yours, go to the homepage, and click copy link, the link will be copied to your clipboard

+mg1

+ +Or, if you got into this screen, just copy the link above, with the link ends with either `?dl=0` or `?dl=1`

+mg1

\ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/anonfiles.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/anonfiles.png new file mode 100644 index 0000000000000000000000000000000000000000..35c0c1f21d0b215c4194e32dfb92fd949f81b0d7 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/anonfiles.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/batchlinks_logo.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/batchlinks_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..dc6e5d11ab78ca77993a96f338397199f5af94d3 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/batchlinks_logo.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/cancel.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/cancel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89dc5a6831d9966aa2045a1fca8730672dee802d Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/cancel.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/checkconsole1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/checkconsole1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5a6e095623449bd460c2d272c4dfb5631b1297f9 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/checkconsole1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/checkconsole2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/checkconsole2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..59f7d9d1704fdea277bcd20cade11b87d6a461f0 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/checkconsole2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civit1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civit1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a87cccfdde87e026b0c9f602d405a7dbbafdc4da Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civit1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civit2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civit2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5eb77dc1ea9fc5b1749a0712a77b3fbd6eea203a Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civit2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civitnew1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civitnew1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e9847b166479d3429bd99cedf1a524a90764346 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civitnew1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civitnew2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civitnew2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..800ef89144fbab0e4cdf7e6e2037c8fdf181a55c Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/civitnew2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/discord1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/discord1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7ba80743b7721bc3e436e209d1e67c661f61722 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/discord1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/discord2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/discord2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..42948c286a483dab68d7ef82afadbdcb2912d91e Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/discord2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/downloaded.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/downloaded.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2dd5e1518347369bff9afb163d46ba98a9726123 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/downloaded.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/drive1.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/drive1.png new file mode 100644 index 0000000000000000000000000000000000000000..98dbc750e1768d867f8127ba353fa0783bbf3630 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/drive1.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/drive2.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/drive2.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac6901e4b2516d5fb8d846b26fe46ab656a7197 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/drive2.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/dropbox1.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/dropbox1.png new file mode 100644 index 0000000000000000000000000000000000000000..8090d94242da605587870612dcfdb6d092c1e5f3 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/dropbox1.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/dropbox2.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/dropbox2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff64657e17618e9b319e190f20faa50018ee503 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/dropbox2.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/example.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1a58c7c05d81f564c4c3573000d7e1b739b7ae0 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/example.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/ext_installer.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/ext_installer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8e5553ed6a76166a80a75ac3b8f46f6aa65ea59d Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/ext_installer.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/github.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/github.jpg new file mode 100644 index 0000000000000000000000000000000000000000..32b6a9f145e39b31aff169add332acacb86f317a Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/github.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect1.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6242bb23c1d8c5a0e3d4d620ab93d8d1f4a8ec4 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect1.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect2.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect2.png new file mode 100644 index 0000000000000000000000000000000000000000..c07cdc55f6337c61e46a4bbb3e2c00e45e1272b5 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect2.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect3.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect3.png new file mode 100644 index 0000000000000000000000000000000000000000..a1dbd9e15856c31cde956130b6062aab90265646 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubdirect3.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubrelease1.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubrelease1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e54a3f008551eaf60ff37c5f6f1e8be390ca528 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubrelease1.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubrelease2.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubrelease2.png new file mode 100644 index 0000000000000000000000000000000000000000..bf07b1f04b9811d844eb73e53ba08cfc7c292bbc Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/githubrelease2.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/gradiooff1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/gradiooff1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8baff0f3fd4c79e74b5f6cac3bc3c8018ac2a4a5 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/gradiooff1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/gradiooff2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/gradiooff2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..82ad2ced202f2b7eca44b4a2a82c9f53e57ece1f Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/gradiooff2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/huggingface1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/huggingface1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9dc10e0c6d4119d4b5b1253a0c0e35c31dbabd63 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/huggingface1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/huggingface2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/huggingface2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb8facfd8051f4254c0ea2c4235ab0c202d23985 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/huggingface2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/logging.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/logging.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9d7082231c85d3eee336a4713b76cc15ed0cbba9 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/logging.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mediafire.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mediafire.png new file mode 100644 index 0000000000000000000000000000000000000000..ed2b630d531a19c74aabd2f885b869da1c0449a5 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mediafire.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mega1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mega1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a127dd23c545fb05edf589f5ade548fad7c5577 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mega1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mega2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mega2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8124ad533f50ad86ee39fcee34d4b30a858a257 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/mega2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/pastebin.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/pastebin.png new file mode 100644 index 0000000000000000000000000000000000000000..a3b3238104845fafb7a99179daad44258a7f0bc7 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/pastebin.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/pixeldrain.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/pixeldrain.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f73a7d8a1826bb4ca67ae985a3e8a348e01b81 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/pixeldrain.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/progress.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/progress.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb1b3eab1e56f92c4bf2710637ae227a5008e2a3 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/progress.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/python.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/python.png new file mode 100644 index 0000000000000000000000000000000000000000..e036f95d9458918ff384ac380a7b07c35e4edd13 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/python.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/queue.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/queue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a577d4dbdd8eda051b4fc8abd254febc4d774671 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/queue.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/rename.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/rename.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9060050b466e906cade8ee7f315602c04cf96bf6 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/rename.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/sdless.png b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/sdless.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1cf2795830dd0f88039d46d2a41d8cf31e4609 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/sdless.png differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/shell1.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/shell1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2893bd9f4c38c6fa730f782c335ceb20a8a08d53 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/shell1.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/shell2.jpg b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/shell2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..00896f0699ffd8f1d6b266abd0d31e21b2ec29af Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/images/shell2.jpg differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/install.py b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/install.py new file mode 100644 index 0000000000000000000000000000000000000000..e7b31a25c27a092c849474ab35aa3ab1130ab210 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/install.py @@ -0,0 +1,9 @@ +import launch +import platform + +if platform.system() == "Windows": + if not launch.is_installed("gdown"): + launch.run_pip("install gdown", "requirements for Batchlinks Download extension") + + if not launch.is_installed("wget"): + launch.run_pip("install wget", "requirements for Batchlinks Download extension") \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/javascript/notification.js b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/javascript/notification.js new file mode 100644 index 0000000000000000000000000000000000000000..8339d3093e0d307db66de30999803862cca01275 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/javascript/notification.js @@ -0,0 +1,19 @@ +let prevTextAreaValue = ''; +let isTextAreaVisible = true; + +onUiUpdate(function() { + const textArea = gradioApp().querySelectorAll('#tab_batchlinks textarea')?.[2]; + const textAreaValue = textArea ? textArea.value : ''; + + if (isTextAreaVisible && textAreaValue.startsWith('All done!') && prevTextAreaValue !== textAreaValue) { + gradioApp().querySelector('#finish_audio audio')?.play(); + } + + if (!textArea) { + isTextAreaVisible = false; + } else if (textArea.style.display !== 'none') { + isTextAreaVisible = true; + } + + prevTextAreaValue = textAreaValue; +}); diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/misc/markydynamictohtml.py b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/misc/markydynamictohtml.py new file mode 100644 index 0000000000000000000000000000000000000000..09ea8b1299a9d8ad5e4d2ba4e60748e9b829c5b9 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/misc/markydynamictohtml.py @@ -0,0 +1,86 @@ +#tableofcontentmaker +intro = """ +
+ Table of Contents +
    +""" + +outro = """ + +
+
+""" + +tableofcontents = """ +- [Installation](#installation) +- [About](#about) +- [Example](#example) +- [Syntax](#syntax) + - [Hashtag](#hashtag) + - [Links](#links) + - [Double Hashtag](#double-hashtag) + - [Others](#others) + - [Valid Hashtags](#valid-hashtags) + - [How to get the direct links (Important!)](#how-to-get-the-direct-links-important) + - [Huggingface's download method](#huggingfaces-download-method) +- [Additional Syntax](#additional-syntax) + - [Rename Downloaded Files](#rename-downloaded-files) + - [Running Shell Commands](#running-shell-commands) + - [Extract Everyting (`@extract`)](#extract-everyting-extract) + - [Custom Hashtag Path (`@new`)](#custom-hashtag-path-new) + - [Custom Direct Link Download with `aria2` (`@aria2`)](#custom-direct-link-download-with-aria2-aria2) +- [Gradio Queue](#gradio-queue) + - [Logging](#logging) + - [Cancel](#cancel) + - [Progress Bar](#progress-bar) + - [Changes if `--gradio-queue` is off](#changes-if---gradio-queue-is-off) +- [Other Features](#other-features) + - [Notification](#notification) + - [Copy From Pastebin](#copy-from-pastebin) + - [SDless mode](#sdless-mode) + - [Local Installation Support](#local-installation-support) + - [Debug Mode (Developer only)](#debug-mode-developer-only) +- [Release Notes](#release-notes) +- [Roadmap](#roadmap) +- [Known Bugs](#known-bugs) + - [Known Fixed Bugs](#known-fixed-bugs) +- [Contributing](#contributing) +- [Contact](#contact) +- [Acknowledgments](#acknowledgments) +""" + +def mlineprint(toprint): + if toprint[-1] == '\n': + toprint = toprint[:-1] + print(toprint.replace('\n', '', 1)) + + +def writehtmllist(space, namehead, hashtaghead): + spaces = "" + for _ in range(space): + spaces += " " + if initialspace >= 2: + return spaces + f'' + else: + return spaces + f'
  • {namehead}
  • ' + +if __name__ == "__main__": + rows = tableofcontents.replace('\n', '', 1).splitlines()#split('\n') # split into a list of rows + mlineprint(intro) + for row in rows: + if not row == '': + initialspace = 0 + for char in row: + if char == ' ': + initialspace += 1 + else: + break + extractedrow = row.split("[") + cuttedrow = extractedrow[1].partition("](") + headingname = cuttedrow[0] + headinghashtag = cuttedrow[2].rstrip(")") + print(writehtmllist(initialspace+4, headingname, headinghashtag)) + # print(cuttedrow[0]) + # print(cuttedrow[2].rstrip(")")) + # hashtagrow = row.partit + mlineprint(outro) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/notification.mp3 b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/notification.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4d95d7a29934c476bcf0f813aefdb6346252da90 Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/notification.mp3 differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/regardingthisrepo.md b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/regardingthisrepo.md new file mode 100644 index 0000000000000000000000000000000000000000..f576057ca17c5150e1753def4922aacb28a7078d --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/regardingthisrepo.md @@ -0,0 +1,14 @@ +#### Dear beloved Batchlinks user, + +I want to share with you that I have lost interest in this project/repo. It was a time when I was fully invested in it, spending countless hours fixing bugs, adding new features, and learning Python/Markdown. I remember the excitement of refreshing the notification page on Github to find a new bug report or feature request. It was an addicting experience, and I enjoyed it more than my college studies. + +But unfortunately, things have changed, and my mood and interests shift rapidly. I have been into different things throughout my life, such as game development, graphic design, video editing, music creation, gaming, and more. Even though I loved generating images with AI during the early days of stable diffusion, I rarely do it now, since my focus has shifted into this project. + +Despite my change in interests, I want to emphasize that I don't want to abandon this project. I have made many friends through this project, and it holds a special place in my heart. However, I just can't continue to give it the same level of attention and dedication that it deserves. I might still do some small bug fixes, but for adding features, maybe not. + +I will miss those days of working on this project, but I'm excited to explore new interests in gaming, video editing, and many others. I want to thank camenduru, machiavel, 7743, NUROISEA, NoCrypt, and many other people who supported me on various Discord servers, github issues, and many other places. Also thanks to everyone who has contributed to this project, whether by reporting bug, requesting features, pull request, and many others. And lastly, thank YOU for using this tool. It might just helps you a little, but every single user means A LOT to me. + +I hope this continues to thrive and helps people in the future.💖 + +Best regards,
    +MJ \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/releasenotes.md b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/releasenotes.md new file mode 100644 index 0000000000000000000000000000000000000000..d17521bd5222b0b006d419f6b376f3a271be7bf9 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/releasenotes.md @@ -0,0 +1,138 @@ +# Release Notes + +### Latest Patch: v3.2.1 +- Changed "pruned" option to "fp precision" due to CivitAI API changes +- Fixed bug: No matter when the download process is cancelled or not, CivitAI download will give print out notification that the download process is successful +- Fixed bug: Preventing the UI errored out when storage is full and trying to convert jpg image while downloading civitai stuff (PIL.UnidentifiedImageError) +- UI overhaul + +#### Patch: v3.2.0a +- Added support for [vladmandic's fork of automatic1111's webui](https://github.com/vladmandic/automatic) + +## Latest Release: v3.2.0 +- Bug fixed when downloading with aria2 on Windows +- Bug fixed on gradio update checker on sdless batch file for windows +- CivitAi error prevention (when the website is down) +- Cleaned the code of the hashtag system +- `Copy from Pastebin` feature +- Custom aria command with `@aria` +- Making sure custom hashtag doesn't start with number +- New calmer notification sound +- Readme page cleanup +- Some help link changed to link into wiki instead +- UI fix to adapt with latest gradio (v3.23.0) +- Various bug fixes related to CivitAI download + +#### Release v3.1.1b +- Hotfix: Fixed CivitAI link refuses to be downloaded properly. Seems like CivitAI changes its API. +- Fixed several bugs on Windows, especially SDless + +#### Release v3.1.1a +- Hotfix: Fixed CivitAI 'model type chooser' bug and fixed `@extract` bug on colab + +#### Release v3.1.1 +- Added some fix in case CivitAI website is down +- Added message when user pressed "Download All!" but the textbox is empty +- Fixed bug where Lycoris folder always shows on downloaded files the first time user download something + +#### Release v3.1.0a +- Hotfix: Indented block on line 1497 fix + +### Release v3.1.0 +- New hashtag: `#altmodel`, when you use `--ckptdir` argument on `launch.py` line, this hashtag will points to that directory. Otherwise, it'll point to the same directory as `#model` +- New hashtag: `#lycoris`, change current save directory to _/content/stable-diffusion-webui/extensions/sd-webui-additional-networks/models/lora/lycoris_
    (Side note: _Lycoris/Locon/Loha_ will works just fine if you use `#addnetlora` instead, as long as you have both [addnet extension](https://github.com/kohya-ss/sd-webui-additional-networks) and [locon extension](https://github.com/KohakuBlueleaf/a1111-sd-webui-locon) installed) +- New hashtag: `#upscaler`, change current save directory to _/content/stable-diffusion-webui/models/ESRGAN_ (This was added few commits ago, but i forgot to write it on the release notes) + +Fixes: +- Fixed bug when installing wget/aria2 on Windows +- Fixed sdless scripts so that it also installs `tqdm` +- Fixed bug where custom paths doesn't put CivitAi download (Model Path method) when custom hashtag is used +- Ongoing downloads will correctly stops when Cancel button is pressed on Windows +- CivitAi (Model Path method) now will not download training dataset by accident + +#### Release v3.0.2 +- Hotfix: removed a comment that messed up the non queue mode. Now the extension works again without `--gradio-queue`. + +#### Release v3.0.1 +- Hotfix: using `urllib.request` instead of `curl -sI` to get the model name on CivitAI direct link method, since it's more reliable (and the curl method always fails somehow). The `requests` method is returned as a fallback. + +### Release v3.0.0 +- Added `@extract` syntax +- (Almost) Full Windows support +- Auto-download config file if available when downloading from CivitAI (SD 2.0+) +- Auto-renaming for downloading ckpt/safetensors and pruned model from CivitAI using direct link method +- CivitAI direct link now use `curl` to get the filename, and use the chosen download method (from the four) to download. Huge download speed boost. `requests` is no longer needed. +- Supports download from Anonfiles, Dropbox, Google Drive, Mediafire, Pixeldrain +- Supports download from Github (raw and release files) +- Supports for custom hashtags with `@new` syntax +- Supports for SDless mode (read more [here](https://github.com/etherealxx/batchlinks-webui#sdless-mode)) +- UI overhaul: + - Now there's a table that shows where does the hashtags points into + - Option to stretch the UI, if your monitor is small, or using colab on mobile + - Option to hide help text + - Option to choose preferred CivitAI models. This will works if you download the model via model page link (https://civitai.com/models/) + - Upload txt now use a little button instead of covering half of the screen + +Fixes: +- CivitAI `model page link` no longer randomly download the first model on the json list. +- Most of Windows bugs +- Renaming problem when using CivitAI model page link method +- Warning message when CivitAI download isn't possible (server down) + +### Older Release +
    + 👈v2.0.0 - v2.1.1 +
      +

      Release v2.1.1

      + Partial Windows support is back + Changes: +
        +
      • wget disabled on windows currently, until it fixed +
      + Fixes: +
        +
      • gdown & curl bug fixed +
      • utf-8 as default encoding for queue checker (fix bug in Windows) +
      +

      Release v2.1.0

      + Features: +
        +
      • Supports renaming downloaded file with > (for example: https://files.catbox.moe/uarze8.safetensors > neurosama.safetensors) +
      • Supports extension usage without --gradio-queue (ported from onedotsix) +
      • Supports running shell command from the UI with ! (for example: type !pip freeze, then hit the Download all! button and see the colab console) +
      • Progress bar for --gradio-queue +
      + Changes: +
        +
      • aria2 as the only download method when using without --gradio-queue +
      • Download session will be cut every 80 seconds on when using without --gradio-queue (just like onedotsix) +
      • Debug stopwatch (decorator) won't run automatically when globaldebug = True, must be uncommented manually (it disrupt the progress bar) +
      • Dropped support for webui based on Gradio 3.9 (update your installation, or use onedotsix instead) +
      • UI tweak (Smaller font size) +
      +

      Release v2.0.0

      + Features: +
        +
      • aria2 as download method. +
      • Cancel button for cancelling download process (--gradio-queue required) +
      • Detection if a CivitAI links no longer exist +
      • New hashtags: #textualinversion, #ti, #aestheticembedding, #aestheticembed, #controlnet, and #cnet +
      • Toggle logging on/off +
      • shlex.quote to properly quote links (Thanks @rti7743!) +
      • Supports cloning webui extensions +
      • Supports download from catbox.moe +
      • Supports download from CivitAI model links (Thanks @rti7743!) +
      • Supports download from Github (repository and raw files) +
      • Supports for aesthetic gradients, controlnet model, and extensions path. +
      • UI font scaled down +
      • Uses subprocess.Popen instead of os.system +
        _ +
      • Debug snapshot
        + When globaldebug = True, the moment this extension launch, it saves the current state of the webui on various location (into snapshot.txt), and when you type #debugresetdownloads on the textbox, it will compare the current state and the last saved state, and removes every new file/folder. This will be useful for debugging and testing. +
      • Debug every download method
        + When globaldebug = True and you type #debugevery method on the textbox, every link that has 4 different method of download (Huggingface etc.) will be downloaded with every method, regardless of the radio button choice. The result is 4 file being downloaded. +
      • Debug stopwatch
        + When globaldebug = True, it will give an output for how long a single download session lasts +
      +
    +
    \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/scripts/a_gradiocheck.py b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/scripts/a_gradiocheck.py new file mode 100644 index 0000000000000000000000000000000000000000..3250a3156bb4b1db2c1cd937e6c5c7519788ee3c --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/scripts/a_gradiocheck.py @@ -0,0 +1,36 @@ +from modules.shared import cmd_opts +import os, inspect, re #, sys, shlex + +script_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +batchlinks_dir = os.path.join(script_dir, "batchlinks-downloader.py") + +# remove the progress bar if queue off +with open(batchlinks_dir, 'r', encoding='utf-8') as f: + contents = f.read() + +gradio_queue_on = False + +try: + if cmd_opts.gradio_queue: #automatic1111 + gradio_queue_on = True +except AttributeError: + if not cmd_opts.disable_queue: #vladmandic + gradio_queue_on = True + +if gradio_queue_on: + #os.system(f"sed -i 's/def run(command, choosedowner):/def run(command, choosedowner, progress=gr.Progress()):/g' {batchlinks_dir}") + # os.system(f"sed -i '/^#progress/s/^#//' {batchlinks_dir}") + new_contents = re.sub(r'^(\s*)#progress\(', r'\1progress(', contents, flags=re.MULTILINE) + contents = re.sub(r'civitvae\):', 'civitvae, progress=gr.Progress()):', new_contents, flags=re.MULTILINE) + + with open(batchlinks_dir, 'w', encoding='utf-8') as f: + f.write(contents) + +else: + # os.system(f"sed -i 's/def run(command, choosedowner, progress=gr.Progress()):/def run(command, choosedowner):/g' {batchlinks_dir}") + # os.system(f"sed -i '/^progress(/ s/^/#/' {batchlinks_dir}") + new_contents = re.sub(r'^(\s*)progress\(', r'\1#progress(', contents, flags=re.MULTILINE) + contents = re.sub(r'civitvae,\s*progress=gr\.Progress\(\)\):$', 'civitvae):', new_contents, flags=re.MULTILINE) + + with open(batchlinks_dir, 'w', encoding='utf-8') as f: + f.write(contents) \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/scripts/batchlinks-downloader.py b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/scripts/batchlinks-downloader.py new file mode 100644 index 0000000000000000000000000000000000000000..c278cedb87caf56bb5802a6f515d2f0baa1e3a69 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/scripts/batchlinks-downloader.py @@ -0,0 +1,2289 @@ +#github.com/etherealxx +import os +import time +import gradio as gr +import urllib.request, subprocess, contextlib #these handle mega.nz +import http.client +import requests #this handle civit +import re +from tqdm import tqdm +#from IPython.display import display, clear_output +import pathlib +import inspect +import platform +import shlex +import signal +import sys +sdless = False +try: + from modules import script_callbacks #,scripts + from modules.paths import models_path, script_path #, data_path + from modules.shared import cmd_opts #check for gradio queue +except ImportError: #sdless + if platform.system() == "Windows": + userprofile = os.environ['USERPROFILE'] + downloadpath = os.path.join(userprofile, "Downloads") + script_path = os.path.join(downloadpath, "stable-diffusion-webui") + elif platform.system() == "Darwin": + userhome = os.environ['HOME'] + downloadpath = os.path.join(userhome, "Downloads") + script_path = os.path.join(downloadpath, "stable-diffusion-webui") + else: + script_path = '/content/stable-diffusion-webui' + models_path = os.path.join(script_path, 'models') + gradio_queue = True + ckpt_dir = None + import sys + import types + module = types.ModuleType('cmd_opts') + module.gradio_queue = gradio_queue + module.ckpt_dir = ckpt_dir + sys.modules['cmd_opts'] = module + import cmd_opts + sdless = True + +script_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +extension_dir = os.path.abspath(os.path.join(script_dir, "../")) +#Version checking{ +version_dir = os.path.join(extension_dir, "version.txt") +with open(version_dir, 'r', encoding='utf-8') as file: + curverall = file.readlines() +currentversion = curverall[0].strip() + +try: + versionurl = "https://raw.githubusercontent.com/etherealxx/batchlinks-webui/main/version.txt" + versionresp = requests.get(versionurl) + version_lines = versionresp.text.splitlines() + latestversion = version_lines[0].strip() +except requests.exceptions.RequestException: + latestversion = '??' + +if latestversion != '??': + if currentversion == latestversion: + latestversiontext = "" + else: + latestversiontext = f"[Latest version: {latestversion}]" +else: + latestversiontext = "" + +currentverforlink = latestversion.replace('.', '') +#} + +vladmandic = False +try: + global gradiostate + if cmd_opts.gradio_queue: #automatic1111 + gradiostate = True + else: + gradiostate = False +except AttributeError: + try: + if not cmd_opts.disable_queue: #vladmandic + gradiostate = True + else: + gradiostate = False + vladmandic = True + except AttributeError: + gradiostate = False #at this point just use onedotsix + pass + +typechecker = [ + "embedding", "embeddings", "embed", "embeds", "textualinversion", "ti", + "model", "models", "checkpoint", "checkpoints", + "vae", "vaes", + "lora", "loras", + "hypernetwork", "hypernetworks", "hypernet", "hypernets", "hynet", "hynets", + "addnetlora", "loraaddnet", "additionalnetworks", "addnet", + "aestheticembedding", "aestheticembed", + "controlnet", "cnet", + "extension", "extensions", "ext", #obsolete + "upscaler", "upscale", + "altmodel", "altmodels", + "lycoris", "locon", "loha" + ] + +typemain = [ + "model", "altmodel", "vae", + "embed", "hynet", "lora", + "addnetlora", "aestheticembed", "cnet", + "ext", "upscaler", "lycoris" +] +countofdefaulthashtags = len(typemain) + +supportedlinks = [ + "https://mega.nz", + "https://huggingface.co", + "https://civitai.com/api/download/models", + "https://civitai.com/models/", + "https://cdn.discordapp.com/attachments", + "https://github.com", + "https://raw.githubusercontent.com", + "https://files.catbox.moe", + "https://drive.google.com", + "https://pixeldrain.com", + "https://www.mediafire.com/file", + "https://anonfiles.com", + "https://www.dropbox.com/s" +] + +modelpath = os.path.join(script_path, "models/Stable-diffusion") +embedpath = os.path.join(script_path, "embeddings") +vaepath = os.path.join(script_path, "models/VAE") +lorapath = os.path.join(script_path, "models/Lora") +addnetlorapath = os.path.join(script_path, "extensions/sd-webui-additional-networks/models/lora") +hynetpath = os.path.join(script_path, "models/hypernetworks") +aestheticembedpath = os.path.join(script_path, "extensions/stable-diffusion-webui-aesthetic-gradients/aesthetic_embeddings") +cnetpath = os.path.join(script_path, "extensions/sd-webui-controlnet/models") +extpath = os.path.join(script_path, "extensions") #obsolete +upscalerpath = os.path.join(script_path, "models/ESRGAN") +lycorispath = os.path.join(addnetlorapath, "lycoris") + +if vladmandic: + cnetpath = os.path.join(script_path, "models/ControlNet") + lycorispath = os.path.join(script_path, "models/LyCORIS") + +if cmd_opts.ckpt_dir: + altmodelpath = cmd_opts.ckpt_dir + currentfolder = altmodelpath +else: + altmodelpath = modelpath + currentfolder = modelpath + +if platform.system() == "Windows": + for x in typemain: + # exec(f"{x}path = os.path.normpath({x}path)") + exec(f"{x}path = {x}path.replace('/', '\\\\')") + #exec(f"print({x}path)") +if os.path.exists(addnetlorapath) and not os.path.exists(lycorispath): + os.makedirs(lycorispath, exist_ok=True) + +newlines = ['\n', '\r\n', '\r'] +currentlink = '' +finalwrite = [] +currentcondition = '' +currentsuboutput = '' +processid = '' +logging = False +#currentiterfolder = '' +prockilled = False +currentfoldertrack = [] +everyprocessid = [] +remaininglinks = [] +gdownupgraded = False +mediafireinstalled = False +prevciviterror = False +# addedcustompath = [] +# ariamode = False + +globaldebug = False #set this to true to activate every debug features +if len(sys.argv) > 1: + if sys.argv[1] == '--debug': + globaldebug = True + +process = '' + +def stopwatch(func): #unused + """ + A function that acts as a stopwatch for another function. + + Args: + func (function): The function to be timed. + + Returns: + The return value of the timed function. + """ + def wrapper(*args, **kwargs): + if not globaldebug: + return func(*args, **kwargs) + start_time = time.time() + result = func(*args, **kwargs) + end_time = time.time() + elapsed_time = end_time - start_time + minutes = int(elapsed_time // 60) + seconds = elapsed_time % 60 + print(f"Time taken by {func.__name__}: {minutes:.0f}m {seconds:.2f}s") + return result + return wrapper + +#debuggingpurpose{ + #Hello debuggers! This will track every files when the extension is launched, and + #you can remove every downloaded files after with hashtag '@debugresetdownloads', for debugging purposes on colab + #(Note: You need to fill the textbox with only a single line of @debugresetdownloads and nothing more) + #There's also another feature, '#debugeverymethod', which will download a single link with all four possible methods available. +import shutil +snapshot = [] +paths_to_scan = [] + +# take a snapshot of the directories +def take_snapshot(): + snapshotdir = os.path.join(script_path, 'snapshot.txt') + global snapshot + global paths_to_scan + paths_to_scan = [] + for x in typemain: + exec(f"paths_to_scan.append({x}path)") + if os.path.exists(snapshotdir): + with open(snapshotdir, 'r') as f: + snapshot = [line.strip() for line in f.readlines()] + print("Batchlinks extension: snapshot already exist.") + return + else: + snapshot = [] + for path in paths_to_scan: + if os.path.exists(path): + pathtemp = os.listdir(path) + for file in pathtemp: + pathoffile = os.path.join(path, file) + snapshot.append(pathoffile) + with open(snapshotdir, 'w') as f: + for item in snapshot: + f.write(f"{item}\n") + print("Batchlinks extension: snapshot taken.") + +# rewind everything to a fresh state +def global_rewind(): + global paths_to_scan + global path + global currentsuboutput + removedall, removed_files, removed_dirs, new_snapshot = [], [], [], [] + print('Debug rewind initiated...') + print('') + for path in paths_to_scan: + if os.path.exists(path): + pathtemp = os.listdir(path) + for file in pathtemp: + pathoffile = os.path.join(path, file) + new_snapshot.append(pathoffile) + toremoves = [x for x in new_snapshot if x not in snapshot] + for fileordir in toremoves: + if os.path.exists(fileordir): + if os.path.isdir(fileordir): + try: + shutil.rmtree(fileordir) + removed_dirs.append(fileordir) + except PermissionError as e: + print("Error: " + str(e)) + else: + os.remove(fileordir) + removed_files.append(fileordir) + if removed_files or removed_dirs: + print("Removed files:") + removedall.append("Removed files:") + for file in removed_files: + print(file) + removedall.append(file) + print("Removed directories:") + removedall.append("Removed directories:") + for dir in removed_dirs: + print(dir) + removedall.append(dir) + print('rewind completed') + print('') + return removedall + +# Take a snapshot of the directories +if globaldebug == True: + take_snapshot() +# } + +def printdebug(toprint): + if globaldebug == True: + print(toprint) + +def printvardebug(toprint): + if globaldebug == True: + import inspect + caller = inspect.currentframe().f_back + try: + name = [k for k, v in caller.f_locals.items() if v is toprint][0] + except IndexError: + name = "idk" + if not isinstance(toprint, str): + toprint = str(toprint) + print(f"debug {name}: {toprint}") + +def runwithsubprocess(rawcommand, folder=None, justrun=False, additionalcontext=''): #@note runwithsubprocess + + commandtorun = shlex.split(rawcommand) #construct_command(rawcommand) + printdebug(f"raw command: {rawcommand}") + printdebug(f"merged command: {commandtorun}") + global prockilled + global everyprocessid + # if gradiostate == False and not rawcommand.startswith("aria"): + # subprocess.run(commandtorun, stderr=subprocess.STDOUT, universal_newlines=True) + # else: + if folder != None: + printdebug("debug folderforsavestate: " + str(folder)) + savestate_folder(folder) + printdebug("debug currentfoldertrack: " + str(currentfoldertrack)) + + global process + if justrun: + process = subprocess.Popen(rawcommand, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True, shell=True) + else: + process = subprocess.Popen(commandtorun, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True) + global processid + processid = process.pid + everyprocessid.append(processid) + printdebug("debug processid: " + str(processid)) + + ariacomplete = False + global currentsuboutput + while True: + # Read the output from the process + nextline = process.stdout.readline() + if nextline == '' and process.poll() is not None: + break + # Check if the line contains progress information + elif additionalcontext == 'aria2': + if 'Download Results' in nextline: + ariacomplete = True + print('\n') + print(nextline, end='') + currentsuboutput = nextline + else: + if not ariacomplete: + match = re.search(r'\[[^\]]+\]', nextline) + if match: + stripnext = match.group().strip() + print("\r", end="") + print(f"\r{stripnext}", end='') + currentsuboutput = stripnext + else: + print(nextline, end='') + currentsuboutput = nextline + elif additionalcontext == '7z': + sevenzmessage = [ + "Extracting", "Everything", "ERROR" + ] + if nextline.strip().startswith(tuple(sevenzmessage)): + print(nextline, end=' ') + currentsuboutput = nextline + else: + stripnext = nextline.strip() + print("\r", end="") + print(f"\r{stripnext}", end='') + currentsuboutput = stripnext + else: + if justrun: + print(nextline, end='') + else: + if "%" in nextline.strip() or rawcommand.startswith("curl"): + stripnext = nextline.strip() + print("\r", end="") + print(f"\r{stripnext}", end='') + else: + print(nextline, end='') + if additionalcontext == 'mega': + process.kill() + if additionalcontext == 'mega': + if nextline.strip().startswith("Download finished:"): + _ = subprocess.getoutput("taskkill /f /t /im MEGAcmdServer.exe") + printdebug("MEGA server killed") + currentsuboutput = nextline + + + process.wait() + currentsuboutput = '' + processid = '' + if prockilled == True: + printdebug("before rewind folder") + printvardebug(folder) + rewind_folder(folder) + print('Operation Cancelled') + print('') + global currentcondition + currentcondition = 'Operation Cancelled' + return + +#these code below handle mega.nz +def unbuffered(proc, stream='stdout'): + stream = getattr(proc, stream) + with contextlib.closing(stream): + while prockilled == False: + out = [] + last = stream.read(1) + # Don't loop forever + if last == '' and proc.poll() is not None: + break + while last not in newlines: + # Don't loop forever + if last == '' and proc.poll() is not None: + break + out.append(last) + last = stream.read(1) + out = ''.join(out) + yield out + +def transfare(todownload, folder, torename=''): + #import codecs + #decoder = codecs.getincrementaldecoder("UTF-8")() + todownload_s = shlex.quote(todownload) + folder_s = shlex.quote(folder) + if platform.system() == "Windows": + savestate_folder(folder) + localappdata = os.environ['LOCALAPPDATA'] + megagetloc = os.path.join(localappdata, "MEGAcmd", "mega-get.bat") + global process + process = runwithsubprocess(f"{shlex.quote(megagetloc)} {todownload_s} {folder_s}", folder, False, 'mega') + else: + savestate_folder(folder_s) + cmd = ["mega-get", todownload_s, folder_s] + proc = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True, + ) + global processid + global everyprocessid + processid = proc.pid + everyprocessid.append(processid) + + global currentsuboutput + for line in unbuffered(proc): + if prockilled == False: + if not line.startswith("Download"): + currentsuboutput = line + print(f"\r{line}", end="") + else: + print(f"\n{line}") + _ = subprocess.getoutput("pkill -f \"mega-cmd-server\"") + printdebug("MEGA server killed") + + else: + currentsuboutput = '' + print('Operation Cancelled') + print('') + global currentcondition + currentcondition = 'Operation Cancelled' + return + currentsuboutput = '' + if torename: + listfilenew = os.listdir(folder) + newerfoldertrack = [] + for file in listfilenew: + pathoffile = os.path.join(folder, file) + newerfoldertrack.append(pathoffile) + checkrename = [x for x in newerfoldertrack if x not in currentfoldertrack] + if checkrename: + # renamedfile = os.path.basename(checkrename[0]) + # pathtorename = os.path.join(folder, renamedfile) + os.rename(checkrename[0], os.path.join(folder, torename)) + + +def installmega(): + HOME = os.path.expanduser("~") + ocr_file = pathlib.Path(f"{HOME}/.ipython/ocr.py") + if not ocr_file.exists(): + hCode = "https://raw.githubusercontent.com/biplobsd/" \ + "OneClickRun/master/res/ocr.py" + urllib.request.urlretrieve(hCode, str(ocr_file)) + + from importlib.util import module_from_spec, spec_from_file_location + ocr_spec = spec_from_file_location("ocr", str(ocr_file)) + ocr = module_from_spec(ocr_spec) + ocr_spec.loader.exec_module(ocr) + + if not os.path.exists("/usr/bin/mega-cmd"): + #ocr.loadingAn() + print('Installing MEGA ...') + print('') + ocr.runSh('sudo apt-get -y update') + ocr.runSh('sudo apt-get -y install libmms0 libc-ares2 libc6 libcrypto++6 libgcc1 libmediainfo0v5 libpcre3 libpcrecpp0v5 libssl1.1 libstdc++6 libzen0v5 zlib1g apt-transport-https') + ocr.runSh('sudo curl -sL -o /var/cache/apt/archives/MEGAcmd.deb https://mega.nz/linux/MEGAsync/Debian_9.0/amd64/megacmd-Debian_9.0_amd64.deb', output=True) + ocr.runSh('sudo dpkg -i /var/cache/apt/archives/MEGAcmd.deb', output=True) + print('MEGA is installed.') + print('') + +def installmegawin(): + userprofile = os.environ['USERPROFILE'] + localappdata = os.environ['LOCALAPPDATA'] + megagetloc = os.path.join(localappdata, "MEGAcmd", "mega-get.bat") + megacmdloc = os.path.join(userprofile, "Downloads", "MEGAcmdSetup64.exe") + if not os.path.exists(megagetloc): + print('Installing MEGA ...') + print('') + runwithsubprocess(f"curl -o {shlex.quote(megacmdloc)} https://mega.nz/MEGAcmdSetup64.exe") + time.sleep(1) + runwithsubprocess(f"{shlex.quote(megacmdloc)} /S") + time.sleep(4) + print('MEGA is installed.') + print('') + #clear_output() +#these code above handle mega.nz + +def civitdown(url, folder, torename=''): + filename = url.split('?')[0].rsplit('/', 1)[-1] + ".bdgh" + pathtodown = os.path.join(folder, filename) + max_retries = 5 + retry_delay = 10 + # url_s = quote(url) + + while prockilled == False: + + downloaded_size = 0 + headers = {} + + progress = tqdm(total=1000000000, unit="B", unit_scale=True, desc=f"Downloading {filename}. (will be renamed correctly after downloading)", initial=downloaded_size, leave=False) + global currentsuboutput + global currentcondition + with open(pathtodown, "ab") as f: + while prockilled == False: + try: + response = requests.get(url, headers=headers, stream=True) + total_size = int(response.headers.get("Content-Length", 0)) + # if total_size == 0: + # total_size = downloaded_size + # progress.total = total_size + + + for chunk in response.iter_content(chunk_size=1024): + if chunk and prockilled == False: + f.write(chunk) + progress.update(len(chunk)) + currentsuboutput = str(progress) + else: + break + + downloaded_size = os.path.getsize(pathtodown) + currentsuboutput = '' + break + except ConnectionError as e: + max_retries -= 1 + + if max_retries == 0: + raise e + + time.sleep(retry_delay) + + progress.close() + if prockilled == True: + if os.path.exists(pathtodown): + os.remove(pathtodown) + print('Operation Cancelled') + print('') + currentcondition = 'Operation Cancelled' + currentsuboutput = '' + return "Operation Cancelled" + + if torename: + actualfilename = torename + else: + try: + actualfilename = response.headers['Content-Disposition'].split("filename=")[1].strip('"') + except KeyError: + print('Link Error') + print('') + break + #%cd {folder} + actualpath = os.path.join(folder, actualfilename) + os.rename(pathtodown, actualpath) + downloaded_size = os.path.getsize(actualpath) + # Check if the download was successful + if downloaded_size >= total_size: + print(f"{actualfilename} successfully downloaded.") + break + else: + print(f"Error: File download failed. Retrying...") + +def getcivitname(link, frommodeltypechooser=False): #@note getcivitname + # searcher = "findstr" if platform.system() == "Windows" else "grep" + printdebug("getcivitname:") + printvardebug(link) + global currentcondition + tempcondition = currentcondition + currentcondition = "Connecting to CivitAI..." + try: + req = urllib.request.Request(link, headers={'User-Agent': 'Mozilla/5.0'}) + response = urllib.request.urlopen(req, timeout=7) + contentdis = response.geturl() + # contentdis = [line for line in subprocess.getoutput(f"curl -sI {link} | {searcher} -i content-disposition").splitlines() if line.startswith('location')][0] + except Exception as e: + errortype = str(type(e)) + printdebug("Error: " + errortype) + if 'TimeoutError' in errortype: + print("Unable to connect to CivitAI in 7 seconds. Skipping the link...") + currentcondition = tempcondition + return 'batchlinksskip' + else: + if frommodeltypechooser: + currentcondition = tempcondition + return '' + else: + print("Cannot get the filename. Download will continue with the old slow method.\nReason:" + str(e)) + currentcondition = tempcondition + return 'batchlinksold' + if contentdis == "https://civitai.com/": + print('CivitAI website is currently down ツ') + print('') + currentcondition = tempcondition + return 'batchlinksskip' + cuttedcontent = contentdis.find('response-content-disposition=attachment%3B%20filename%3D%22') + 59 + # filename = str(contentdis[cuttedcontent:]).replace('%22&x-id=GetObject', '') #obsolete since 30-03-2023 + filename = str(contentdis[cuttedcontent:]).partition('%22&')[0] + # filename = contentdis.split('filename=')[-1].split('%22')[1] #this also works i guess + filename = civitmodeltypename(filename, link) + currentcondition = tempcondition + return filename + +def getcivitname2(link): + searcher = "findstr" if platform.system() == "Windows" else "grep" + try: + contentdis = [line for line in subprocess.getoutput(f"curl -sI {link} | {searcher} -i content-disposition").splitlines() if line.startswith('location')][0] + cuttedcontent = contentdis.find('response-content-disposition=attachment%3B%20filename%3D%22') + 59 + filename = str(contentdis[cuttedcontent:]).replace('%22&x-id=GetObject', '') + if filename: + return [0, link, filename] + except: + return [] + +def civitmodeltypename(name, filelink): + nameonly, extension = os.path.splitext(name) + if 'type=Pruned' in filelink: + nameonly += "_pruned" + + if 'format=Safetensor' in filelink: + extension = '.safetensors' + elif 'format=PickleTensor' in filelink: + extension = '.ckpt' + + nameoffile = nameonly + extension + return nameoffile + +def checkcivitconfig(link): #check if the current civit link has a config file (v2.0+) @note checkcivitconfig + def getrequest(link2): + response = requests.get(link2) + return response.status_code + + params = ['?type=Config','?type=Config&format=Other'] + + for param in params: + response = getrequest(link + param) + if response == 200: + #print('The link exists') + return link + param + return '' + +def civitmodeltypechooser(modeljson, prunedmodel, torchortensor, linkandnames): + +# prunedorfull = ['?type=Model', '?type=Pruned%20Model'] +# if prunedmodel == 'True': + prunedorfull = ['&fp=fp32', '&fp=fp16'] + if prunedmodel == 'fp16': + prunedorfull.reverse() + pickleorsafe = ['&format=SafeTensor', '&format=PickleTensor'] + if torchortensor=='ckpt': + pickleorsafe.reverse() + + defaultlinkurl = [link.get('downloadUrl') for link in modeljson['modelVersions'][0]['files'] if not '?type=' in link.get('downloadUrl')][0] + + indexlinkname = list() + checklater = '' + for index, (link, name) in enumerate(linkandnames.items()): + if prunedorfull[0] in link: + if pickleorsafe[0] in link: + indexlinkname.extend([index, link, name]) + break + else: + checklater = link + continue + else: + continue + + if checklater and not indexlinkname: + for index, (link, name) in enumerate(linkandnames.items()): + if checklater == link: + indexlinkname.extend([index, link, name]) + checklater = '' + break + + if not indexlinkname: + indexlinkname = getcivitname(defaultlinkurl+prunedorfull[0]+pickleorsafe[0], True) #@note indexlinkname + if indexlinkname == "batchlinksskip" or not indexlinkname: + indexlinkname = list() + + if not indexlinkname: + for index, (link, name) in enumerate(linkandnames.items()): + if defaultlinkurl == link: + indexlinkname.extend([index, link, name]) + break + + return indexlinkname + +#thank you @rti7743 for this part { +def civitdown2_get_json(url): + import re + m = re.search(r'https://civitai.com/models/(\d+)', url) + model_id = m.group(1) + + api_url = "https://civitai.com/api/v1/models/" + model_id + + import requests + txt = requests.get(api_url).text + + import json + try: + return json.loads(txt) + except json.decoder.JSONDecodeError: + return 'error' + +def civitdown2_get_save_directory(model_type, default_folder): + printdebug("model_type: " + model_type) + customtypemains = list(typemain[countofdefaulthashtags:]) + printdebug("customtypemains: " + str(customtypemains)) + for type in customtypemains: + xpath = eval(type + "path") + if default_folder == xpath: + printdebug("customtype returned") + return default_folder + if model_type == "Checkpoint": + if cmd_opts.ckpt_dir and default_folder == altmodelpath: + return altmodelpath + else: + return modelpath + elif model_type == "Hypernetwork": + return hynetpath + elif model_type == "TextualInversion": + return embedpath + elif model_type == "AestheticGradient": + return aestheticembedpath + elif model_type == "VAE": + return vaepath + elif model_type == "LORA": + if default_folder == addnetlorapath: + return addnetlorapath + else: + return lorapath + elif model_type == "LoCon": + return lycorispath + else: + printdebug("defaultfolder returned") + return default_folder + +def civitdown2_convertimage(imagejpg_save_path, imagepng_save_path): + from PIL import Image + try: + img = Image.open(imagejpg_save_path) + img_resized = img.resize((img.width // 2, img.height // 2)) + img_resized.save(imagepng_save_path) + if os.path.exists(imagejpg_save_path): + os.remove(imagejpg_save_path) + except Exception as e: + print("Civitai image convertion failed. Reason: " + str(e)) + pass + +def civitdown2(url, folder, downloader, renamedfilename, isdebugevery, modeldefaulttype, isprunedmodel, isdownvae): #@note civitdown2 + def civitlinkandnamer(model): + linkandname = dict() + for i, link in enumerate(model['modelVersions'][0]['files']): + name = link.get('name') + url = link.get('downloadUrl') + if name and url: + linkandname[url] = name + # print(i, url, name) + else: + pass + return linkandname + + model = civitdown2_get_json(url) + if model == 'error': + print('Failed retrieving the model data.') + print('CivitAI website might going down currently.') + print('') + return + + if model == {'error': 'Model not found'}: + print('Model ' + url + ' is not available anymore') + print('') + return + + save_directory = civitdown2_get_save_directory(model['type'], folder) + if not os.path.exists(save_directory): + os.makedirs(save_directory, exist_ok=True) + try: + parameter = url.split("?")[-1] + "?" + except: + parameter = '' + + civitlinkandnames = civitlinkandnamer(model) + + if model['type'] == "Checkpoint": + data_index, data_url, data_filename = civitmodeltypechooser(model, isprunedmodel, modeldefaulttype, civitlinkandnames) #@note + data_filename = civitmodeltypename(data_filename, data_url) + image_filename = model['modelVersions'][0]['files'][0]['name'] + else: + data_url = model['modelVersions'][0]['files'][0]['downloadUrl'] + data_filename = model['modelVersions'][0]['files'][0]['name'] + if "?type=Training%20Data" in data_url: + data_url = data_url.partition("?")[0] + wannabename = getcivitname(data_url) + if wannabename: + if wannabename != 'batchlinksskip': + data_filename = wannabename + else: + return '' + image_filename = data_filename + + if renamedfilename: + data_filename = renamedfilename + image_filename = data_filename + + image_url = model['modelVersions'][0]['images'][0]['url'] + printvardebug(data_url) + printvardebug(data_filename) + printvardebug(image_url) + if model['type'] == "TextualInversion": + image_filename_jpg = pathlib.PurePath(image_filename).stem + ".preview.jpg" + image_filename_png = pathlib.PurePath(image_filename).stem + ".preview.png" + else: + image_filename_jpg = pathlib.PurePath(image_filename).stem + ".jpg" + image_filename_png = pathlib.PurePath(image_filename).stem + ".png" + + data_save_path = os.path.join(save_directory, data_filename) + imagejpg_save_path = os.path.join(save_directory, image_filename_jpg) + imagepng_save_path = os.path.join(save_directory, image_filename_png) + + currentmode = 'civit' + if isdebugevery: + currentmode = 'civitdebugevery' + + printdebug(f"debug download_url({data_url}, {data_save_path}, {downloader})") + if prockilled == False: + hfdown(data_url, data_save_path, downloader, currentmode) + printdebug("normal download done, now check for the config") + config_url = checkcivitconfig(data_url) + vae_url, vae_name = '','' + for link, name in civitlinkandnames.items(): + if '?type=VAE' in link: + vae_url, vae_name = link, name + break + if model['type'] == "Checkpoint": + if prockilled == False and isdownvae and vae_url: + namefile = os.path.splitext(data_filename)[0] + vae_name = namefile + '.vae.pt' + data_save_path = os.path.join(os.path.dirname(data_save_path), vae_name) + hfdown(vae_url, data_save_path, downloader, currentmode) + if prockilled == False and config_url: + namefile = os.path.splitext(data_filename)[0] + config_name = namefile + '.yaml' + data_save_path = os.path.join(os.path.dirname(data_save_path), config_name) + hfdown(config_url, data_save_path, downloader, currentmode) + + if prockilled == False: + hfdown(image_url, imagejpg_save_path, downloader, currentmode) + if os.path.exists(imagejpg_save_path): + civitdown2_convertimage(imagejpg_save_path, imagepng_save_path) + else: + print(imagejpg_save_path + " doesn't exist") + if prockilled == False: + print(f"{data_save_path} successfully downloaded.") + + if isdebugevery: + additionalname = '-' + downloader + + if model['type'] == "TextualInversion": + image_filename_jpg = pathlib.PurePath(data_filename).stem + additionalname + ".preview.jpg" + image_filename_png = pathlib.PurePath(data_filename).stem + additionalname + ".preview.png" + else: + image_filename_jpg = pathlib.PurePath(data_filename).stem + additionalname + ".jpg" + image_filename_png = pathlib.PurePath(data_filename).stem + additionalname + ".png" + + imagejpg_save_path = os.path.join(save_directory, image_filename_jpg) + imagepng_save_path = os.path.join(save_directory, image_filename_png) + +#} +def mediadrivedown(todownload, folder, mode, torename=''): #@note mediadrivedown + todownload_s = shlex.quote(todownload) + if platform.system() == "Windows": + folder_s = folder + else: + folder_s = shlex.quote(folder) + prevcurdir = os.getcwd() + os.chdir(folder) + savestate_folder(folder_s) + + if mode=='gdrive': + runwithsubprocess(f"gdown --fuzzy {todownload_s}", folder_s) + elif mode=='mediafire': + runwithsubprocess(f"mediafire-dl {todownload_s}", folder_s) + + os.chdir(prevcurdir) + if torename: + listfilenew = os.listdir(folder) + newerfoldertrack = [] + for file in listfilenew: + pathoffile = os.path.join(folder, file) + newerfoldertrack.append(pathoffile) + checkrename = [x for x in newerfoldertrack if x not in currentfoldertrack] + if checkrename: + os.rename(checkrename[0], os.path.join(folder, torename)) + +def hfdown(todownload, folder, downloader, mode='default', torename=''): #@note hfdown + global currentcondition + global prevciviterror + prevciviterror = False + # global ariamode + if mode=='civit' or mode=='civitdebugevery': + filename = pathlib.Path(folder).name + filename_s = shlex.quote(filename) + filepath = folder + filepath_s = shlex.quote(folder) + todownload_s = todownload + folder = os.path.dirname(filepath) + # folder_s = pathlib.Path(folder).parent.resolve() + folder_s = shlex.quote(folder) + folder_win = folder + else: + if mode=='pixeldrain' or mode=='dropbox': + filename = torename + else: + filename = todownload.rsplit('/', 1)[-1] + filename_s = shlex.quote(filename) + filepath = os.path.join(folder, filename) + filepath_s = shlex.quote(filepath) + todownload_s = shlex.quote(todownload) + folder_s = shlex.quote(folder) + folder_win = folder + ariafilename_s = filename_s + if torename: + ariafilename_s = shlex.quote(torename) + + printvardebug(folder) + printvardebug(todownload) + printvardebug(filename) + printvardebug(filename_s) + printvardebug(filepath) + printvardebug(filepath_s) + printvardebug(todownload_s) + printvardebug(folder_s) + printvardebug(folder_win) + #savestate_folder(folder_s) + + if platform.system() == "Windows": #@note windows downloader + localappdata = os.environ['LOCALAPPDATA'] + batchlinksinstallpath = os.path.join(localappdata, "batchlinks") + printvardebug(batchlinksinstallpath) + wgetpath = os.path.join(batchlinksinstallpath, "wget-gnutls-x64.exe") + + ariazippath = os.path.join(batchlinksinstallpath, "aria2-1.36.0-win-64bit-build2.7z") + ariapath = os.path.join(batchlinksinstallpath, "aria2-1.36.0-win-64bit-build2", "aria2c.exe") + os.makedirs(batchlinksinstallpath, exist_ok=True) + if os.path.exists(batchlinksinstallpath): + printdebug("batchlinksinstallpath created") + if downloader=='gdown': + global gdownupgraded + if gdownupgraded == False: + tempcondition = currentcondition + currentcondition = "Upgrading gdown..." + print('Upgrading gdown ...') + print('') + runwithsubprocess(f"pip3 install -q --upgrade --no-cache-dir gdown") + print('gdown upgraded!') + print('') + currentcondition = tempcondition + gdownupgraded = True + try: + runwithsubprocess(f"gdown {todownload_s} -O {filepath_s}", folder_win) + except FileNotFoundError: + import gdown + gdown.download(todownload, filepath, quiet=False) + elif downloader=='wget': + #os.system("python -m wget -o " + os.path.join(folder, filename) + " " + todownload) + # import wget + # wget.download(todownload, filepath) + # checkwget = subprocess.getoutput(wgetpath) + # if "is not recognized" in checkwget: + if not os.path.exists(wgetpath): + tempcondition = currentcondition + currentcondition = "Installing wget Windows..." + print('Installing wget Windows...') + print('') + wgetwinlink = "https://github.com/webfolderio/wget-windows/releases/download/v1.21.3.june.19.2022/wget-gnutls-x64.exe" + print(wgetwinlink) + runwithsubprocess("curl -Lo " + shlex.quote(wgetpath) + " " + wgetwinlink, batchlinksinstallpath) + print('wget Windows installed!') + print('') + currentcondition = tempcondition + runwithsubprocess(f"{shlex.quote(wgetpath)} -O {filepath_s} {todownload_s} --progress=bar:force", folder_win) + elif downloader=='curl': + runwithsubprocess(f"curl -Lo {filepath_s} {todownload_s}", folder_win) + elif downloader=='aria2': + # checkaria = subprocess.getoutput(ariapath) + # if "is not recognized" in checkaria or "cannot find the path" in checkaria: + if not os.path.exists(ariapath): + tempcondition = currentcondition + currentcondition = "Installing aria2 Windows..." + print('Installing aria2 Windows...') + print('') + ariaziplink = "https://github.com/q3aql/aria2-static-builds/releases/download/v1.36.0/aria2-1.36.0-win-64bit-build2.7z" + print(ariaziplink) + runwithsubprocess("curl -Lo " + shlex.quote(ariazippath) + " " + ariaziplink, batchlinksinstallpath) + sevenzpath = install7zWin() + runwithsubprocess(f"{shlex.quote(sevenzpath)} x {shlex.quote(ariazippath)} -o{shlex.quote(batchlinksinstallpath)}", batchlinksinstallpath, False, '7z') + print() + print('aria2 Windows installed!') + print('') + currentcondition = tempcondition + # ariamode = True + runwithsubprocess(f"{shlex.quote(ariapath)} --summary-interval=1 --console-log-level=error --check-certificate=false -c -x 16 -s 16 -k 1M {todownload_s} -d {folder_s} -o {ariafilename_s}", folder_win, False, 'aria2') + else: #non-windows + if downloader=='gdown': + printdebug(f"debug gdown {todownload_s} -O {filepath_s}") + runwithsubprocess(f"gdown {todownload_s} -O {filepath_s}", folder_s) + elif downloader=='wget': + runwithsubprocess(f"wget -O {filepath_s} {todownload_s} --progress=bar:force", folder_s) + elif downloader=='curl': + runwithsubprocess(f"curl -Lo {filepath_s} {todownload_s}", folder_s) + # curdir = os.getcwd() + # os.rename(os.path.join(curdir, filename), filepath) + elif downloader=='aria2': + ariachecker = "dpkg-query -W -f='${Status}' aria2" + checkaria = subprocess.getoutput(ariachecker) + if "no packages found matching aria2" in checkaria: + tempcondition = currentcondition + currentcondition = "Installing aria2..." + print('Installing aria2 ...') + print('') + runwithsubprocess(f"apt -y update -qq") + runwithsubprocess(f"apt -y install -qq aria2") + print('aria2 installed!') + print('') + currentcondition = tempcondition + # ariamode = True + runwithsubprocess(f"aria2c --summary-interval=1 --console-log-level=error -c -x 16 -s 16 -k 1M {todownload_s} -d {folder_s} -o {ariafilename_s}", folder_s, False, 'aria2') + printdebug("\nmode: " + mode) + if mode=='debugevery': + time.sleep(2) + try: + os.rename(filepath, os.path.join(folder, f"{os.path.splitext(filename)[0]}-{downloader}{os.path.splitext(filename)[1]}")) + printdebug("renamed to " + f"{os.path.splitext(filename)[0]}-{downloader}{os.path.splitext(filename)[1]}") + except FileNotFoundError or FileExistsError: + printdebug("rename failed somehow") + pass + elif mode=='civitdebugevery': + time.sleep(2) + printdebug("debug filename: " + str(filename)) + printdebug("debug filename_s: " + str(filename_s)) + printdebug("debug filepath: " + str(filepath_s)) + printdebug("debug todownload_s: " + str(todownload_s)) + printdebug("debug folder_s: " + str(folder_s)) + try: + os.rename(folder, os.path.join(folder_s, f"{os.path.splitext(filename)[0]}-{downloader}{os.path.splitext(filename)[1]}")) + printdebug("renamed to " + f"{os.path.splitext(filename)[0]}-{downloader}{os.path.splitext(filename)[1]}") + except FileNotFoundError or FileExistsError: + printdebug("rename failed somehow") + pass + if torename and prockilled == False and filename != torename and downloader != 'aria2': + def saferename(oldpath, newpath): + try: + os.rename(oldpath, newpath) + except Exception as e: + print("Rename failed. Reason: " + str(e)) + pass + + saferename(filepath, os.path.join(folder, shlex.quote(torename))) + if mode=='civit0' and prockilled == False: + # if torename: + # filepath = os.path.join(folder, torename) + try: + if os.path.exists(filepath): + if os.path.getsize(filepath) <= 5 * 1024: + try: + with open(filepath, "r", encoding="utf-8") as file: + if "We'll be right back | Civitai" in file.read(): + prevciviterror = True + print('CivitAI website is currently down ツ') + print('') + except Exception as e: + print("File size checking failed. Reason: " + str(e)) + pass + except Exception as e: + print("File size checking failed. Reason: " + str(e)) + pass + if mode=='dropbox' and prockilled == False: + if os.path.exists(filepath): + if os.path.getsize(filepath) <= 1024: + print('Dropbox filesize below 1kb') + print("There's a chance that the file got too much traffic and dropbox blocked access to it") + print('') + # if prockilled == True: + # #rewind_folder(folder_s) + # pass + +def install7zWin(): #@note install7z + #usage: sevenzpath = install7zWin() + global currentcondition + tempcondition = currentcondition + currentcondition = "Installing 7z..." + localappdata = os.environ['LOCALAPPDATA'] + batchlinksinstallpath = os.path.join(localappdata, "batchlinks") + sevenzrpath = os.path.join(batchlinksinstallpath, "7zr.exe") + sevenzrlink = "https://www.7-zip.org/a/7zr.exe" + svnzpacklink = "https://7-zip.org/a/7z2201-x64.exe" + svnzpackpath = os.path.join(batchlinksinstallpath, "7z2201-x64.exe") + svnzexecpath = os.path.join(batchlinksinstallpath, "7z.exe") + if not os.path.exists(sevenzrpath): + print(sevenzrlink) + runwithsubprocess("curl -Lo " + shlex.quote(sevenzrpath) + " " + sevenzrlink, batchlinksinstallpath) + if not os.path.exists(svnzpackpath): + print(svnzpacklink) + runwithsubprocess("curl -Lo " + shlex.quote(svnzpackpath) + " " + svnzpacklink, batchlinksinstallpath) + if not os.path.exists(svnzexecpath): + runwithsubprocess(f"{shlex.quote(sevenzrpath)} x {shlex.quote(svnzpackpath)} -p- -o{shlex.quote(batchlinksinstallpath)} -y -sdel -bb0", batchlinksinstallpath, False, '7z') + currentcondition = tempcondition + return svnzexecpath + +def savestate_folder(folder): + global currentfoldertrack + currentfoldertrack = [] + listfile = os.listdir(folder) + for file in listfile: + pathoffile = os.path.join(folder, file) + currentfoldertrack.append(pathoffile) + +def rewind_folder(folder): + listfilenew = os.listdir(folder) + newerfoldertrack = [] + for file in listfilenew: + pathoffile = os.path.join(folder, file) + newerfoldertrack.append(pathoffile) + toremove = [x for x in newerfoldertrack if x not in currentfoldertrack] + printdebug("\ndebug toremove: " + str(toremove)) + print() + for fileordir in toremove: + if os.path.exists(fileordir): + if os.path.isdir(fileordir): + shutil.rmtree(fileordir) + print("Removed incomplete download: " + fileordir) + else: + os.remove(fileordir) + print("Removed incomplete download: " + fileordir) + +def writeall(olddict, shellonly, custompaths=''): + newdict = trackall() + global finalwrite + finalwrite = [] + + finalwrite.append("All done!") + if custompaths: + finalwrite.append("⬇️Custom path added:⬇️") + for hashtag, thepath in custompaths.items(): + finalwrite.append(f"{hashtag} -> {thepath}") + finalwrite.append("Downloaded files: ") + + for oldtype, olddir in olddict.items(): + for newtype, newdir in newdict.items(): + if newtype == oldtype: + s = set(olddir) + trackcompare = [x for x in newdir if x not in s] + if len(trackcompare) > 0: + exec(f"finalwrite.append('⬇️' + {newtype}path + '⬇️')") + for item in trackcompare: + finalwrite.append(item) + if bool(remaininglinks): + finalwrite.append("(There are still some files that have not been downloaded. Click the 'Resume Download' button to load the links that haven't been downloaded.)") + printvardebug(finalwrite) + + if len(finalwrite) > 1 and "Downloaded files:" in finalwrite[1] and len(finalwrite) < 3: + finalwrite.append("(Not finding something here? Check the terminal/colab console)") + + finaloutput = list_to_text(finalwrite) + finalwrite = [] + if shellonly: + return "Commands executed successfully." + else: + return finaloutput + +def writepart(box, path): + global finalwrite + if len(box) > 0: + finalwrite.append("⬇️" + path + "⬇️") + for item in box: + finalwrite.append(item) + +def trackall(): + filesdict = dict() + for x in typemain: + if x == "altmodel" and altmodelpath == modelpath: + continue + exec(f"os.makedirs({x}path, exist_ok=True)") + exec(f"filesdict['{x}'] = os.listdir({x}path)") + return filesdict + +def currentfoldertohashtag(folder): + for x in typemain: + checkpath = str() + checkpath = eval(x+'path') + printdebug("checkpath: " + checkpath) + if str(folder).strip() == checkpath: + thehashtag = "#" + x + printdebug("thehashtag: " + thehashtag) + return thehashtag + return "#debug" + +def splitrename(linkcurrent): + renamecurrent = '' + if ">" in linkcurrent: + file_rename = linkcurrent.split(">") + file_rename = [file_rename.strip() for file_rename in file_rename] + linkcurrent = file_rename[0] + if file_rename[1]: + renamecurrent = file_rename[1] + return linkcurrent, renamecurrent + +def extractcurdir(currentdir): #@note extractcurdir + allfileshere = os.listdir(currentdir) + szfileall = [] + if platform.system() == "Windows": + sevenzpath = install7zWin() + global currentcondition + extensiontoextract = [".zip", ".rar", ".7z", ".tar"] + for filehere in allfileshere: + if filehere.endswith(tuple(extensiontoextract)): + szpath = os.path.join(currentdir, filehere) + szfileall.append(szpath) + for szfile in szfileall: + if prockilled == False: + # currentcondition = "Extracting" + os.path.basename(szfile) + "..." + if platform.system() == "Windows": + runwithsubprocess(f"{shlex.quote(sevenzpath)} x {shlex.quote(szfile)} -p- -o{shlex.quote(currentdir)} -y -sdel -bb0", currentdir, False, '7z') + else: + runwithsubprocess(f"7z x {shlex.quote(szfile)} -p- -o{shlex.quote(currentdir)} -y -sdel -bb0", currentdir, False, '7z') + +#@stopwatch #the decorator mess with the progress bar #@note run +def run(command, choosedowner, civitdefault, civitpruned, civitvae, progress=gr.Progress()): + progress(0.01, desc='') + global prockilled + prockilled = False + global everyprocessid + everyprocessid = [] + everymethod = False + global currentcondition + resumebuttonvisible = False + if command.strip().startswith('https://pastebin.com/') and command.strip().count('\n') == 0: + currentcondition = f'Done.' + if gradiostate == True: + return ["Use the 'Copy from Pastebin' button instead", gr.Dataframe.update(value=buildarrayofhashtags('bottom'))] #gr.Dataframe.update(value=buildarrayofhashtags('right')), + else: + return ["Use the 'Copy from Pastebin' button instead", gr.Dataframe.update(value=buildarrayofhashtags('bottom')), gr.Button.update(visible=resumebuttonvisible)] #gr.Dataframe.update(value=buildarrayofhashtags('right')), + + if command.strip() == '@debugresetdownloads' and snapshot != {} and globaldebug == True: + currentcondition = f'Removing downloaded files...' + removed_files = global_rewind() + texttowrite = ["⬇️Removed files⬇️"] + for item in removed_files: + texttowrite.append(item) + writefinal = list_to_text(texttowrite) + currentcondition = f'Removing done.' + if gradiostate == True: + return [writefinal, gr.Dataframe.update(value=buildarrayofhashtags('bottom'))] #gr.Dataframe.update(value=buildarrayofhashtags('right')), + else: + return [writefinal, gr.Dataframe.update(value=buildarrayofhashtags('bottom')), gr.Button.update(visible=resumebuttonvisible)] #gr.Dataframe.update(value=buildarrayofhashtags('right')), + + if not command.strip(): + currentcondition = "Logging activated." + texttowrite = ["The link box is empty."] + writefinal = list_to_text(texttowrite) + if gradiostate == True: + return [writefinal, gr.Dataframe.update(value=buildarrayofhashtags('bottom'))] #gr.Dataframe.update(value=buildarrayofhashtags('right')) + else: + return [writefinal, gr.Dataframe.update(value=buildarrayofhashtags('bottom')), gr.Button.update(visible=resumebuttonvisible)] #gr.Dataframe.update(value=buildarrayofhashtags('right')), + oldfilesdict = trackall() + if cmd_opts.ckpt_dir: + altmodelpath = cmd_opts.ckpt_dir + currentfolder = altmodelpath + else: + altmodelpath = os.path.join(models_path, "Stable-diffusion") + currentfolder = modelpath + currenthashtag = '#model' + os.makedirs(currentfolder, exist_ok=True) + currentcondition = 'Extracting links...' + links = extract_links(command) + isshell = True + for listpart in links: + if not listpart.startswith('!'): + isshell = False + break + printdebug("links: " + str(links)) + steps = float(0) + totalsteps = float(1) + + usemega = False + usegdrive = False + usemediafire = False + # global ariamode + global gdownupgraded + global mediafireinstalled + for item in links: + if not item.startswith('#'): + totalsteps += 1 + if item.startswith('https://mega.nz'): + usemega = True + if item.startswith('https://drive.google.com'): + usegdrive = True + if item.startswith('https://www.mediafire.com/file'): + usemediafire = True + + #break + printdebug("totalsteps: " + str(totalsteps)) + if usemega == True: + currentcondition = 'Installing Mega...' + progress(0.01, desc='Installing Mega...') + if platform.system() == "Windows": + installmegawin() + else: + installmega() + if usegdrive == True and gdownupgraded == False: + tempcondition = currentcondition + currentcondition = "Upgrading gdown..." + print('Upgrading gdown ...') + print('') + runwithsubprocess(f"pip3 install -q --upgrade --no-cache-dir gdown") + print('gdown upgraded!') + print('') + currentcondition = tempcondition + gdownupgraded = True + if usemediafire == True and mediafireinstalled == False: + tempcondition = currentcondition + currentcondition = "Installing mediafire-dl..." + print('Installing mediafire-dl...') + print('') + runwithsubprocess(f"pip3 install git+https://github.com/Juvenal-Yescas/mediafire-dl") + print('mediafire-dl installed!') + print('') + currentcondition = tempcondition + mediafireinstalled = True + + print('BatchLinks Downloads starting...') + print('') + printdebug('prockilled: ' + str(prockilled)) + global remaininglinks + batchtime = time.time() + addedcustompath = dict() + downmethod = ['gdown', 'wget', 'curl', 'aria2'] + hfmethods = [ + "https://raw.githubusercontent.com", + "https://huggingface.co", + "https://cdn.discordapp.com/attachments" + ] + global typemain + global typechecker + for listpart in links: + if prockilled == False: + currenttorename = '' + printdebug("steps: " + str(steps)) + printdebug("total steps: " + str(totalsteps)) + printdebug("percentage: " + str(round(steps/totalsteps, 1))) + printdebug("currenttypemain: " + str(typemain)) + # ariamode = False + if gradiostate == False: + if time.time() - batchtime >= 70: + remaininglinks = links[links.index(listpart):] + printdebug("remaining links: " + str(remaininglinks)) + if bool(remaininglinks): + printdebug("currentfolder: " + currentfolder) + tophashtag = currentfoldertohashtag(currentfolder) + printdebug("tophashtag: " + tophashtag) + remaininglinks.insert(0, tophashtag) + printdebug("remaining links new: " + str(remaininglinks)) + print() + print('Runtime was stopped to prevent hangs.') + print("Check the UI and press 'Resume Download' to load the remaining links") + print("Then click 'Download All!' again") + print('') + print("These are some links that haven't been downloaded yet.👇") + printremains = list_to_text(remaininglinks) + print(printremains) + resumebuttonvisible = True + cancelrun() + break + + if listpart.startswith("https://mega.nz"): + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading from ' + os.path.basename(currentlink).split('#')[0] + f' into {currenthashtag}...') + transfare(currentlink, currentfolder, currenttorename) + steps += 1 + + elif listpart.startswith(tuple(hfmethods)): + # elif listpart.startswith("https://huggingface.co") or listpart.startswith("https://raw.githubusercontent.com") or listpart.startswith("https://cdn.discordapp.com/attachments"): + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + os.path.basename(currentlink) + f' into {currenthashtag}...') + if everymethod == False: + hfdown(currentlink, currentfolder, choosedowner, 'default', currenttorename) + else: + for xmethod in downmethod: + if prockilled == False: + hfdown(currentlink, currentfolder, xmethod, 'debugevery') + steps += 1 + + elif listpart.startswith("https://www.dropbox.com/s"): #@note dropbox + currentlink, currenttorename = splitrename(listpart) + if currentlink.endswith("?dl=0"): + currentlink = currentlink.split("?dl=")[0] + "?dl=1" + realname = currentlink.split("/")[-1].split("?dl=")[0] + if currenttorename == '': + currenttorename = realname + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + currenttorename + f' into {currenthashtag}...') + hfdown(currentlink, currentfolder, choosedowner, 'dropbox', currenttorename) + steps += 1 + + elif listpart.startswith("https://drive.google.com"): + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + match = re.search(r'\?id=([^\&]+)\&export|/d/([^\s/]+)/', currentlink) + if match: + if match.group(1): + extracted_string = match.group(1) + else: + extracted_string = match.group(2) + progress(round(steps/totalsteps, 3), desc='Downloading from ' + extracted_string + f' into {currenthashtag}...') + mediadrivedown(currentlink, currentfolder, 'gdrive', currenttorename) + steps += 1 + + elif listpart.startswith("https://pixeldrain.com"): #@note pixeldrain + currentlink, currenttorename = splitrename(listpart) + if not currentlink.startswith("https://pixeldrain.com/api/file/"): + fileid = currentlink.split("/")[-1] + currentlink = f"https://pixeldrain.com/api/file/{fileid}" + currentcondition = f'Retrieving Pixeldrain link...' + searcher = "findstr" if platform.system() == "Windows" else "grep" + try: + filename = subprocess.getoutput(f"curl -sI {currentlink} | {searcher} -i Content-Disposition").split('filename="', 1)[1].rsplit('"', 1)[0] + except IndexError: + print("Something wrong while retrieving the Pixeldrain link") + continue + if currenttorename == '': + currenttorename = filename + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + currenttorename + f' into {currenthashtag}...') + # if everymethod == False: + hfdown(currentlink, currentfolder, choosedowner, 'pixeldrain', currenttorename) + # else: + # for xmethod in downmethod: + # if prockilled == False: + # hfdown(currentlink, currentfolder, xmethod, 'debugevery') + steps += 1 + + elif listpart.startswith("https://www.mediafire.com/file"): #@note mediafire + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + currentlink.split("/")[-2] + f' into {currenthashtag}...') + # if everymethod == False: + mediadrivedown(currentlink, currentfolder, 'mediafire', currenttorename) + # else: + # for xmethod in downmethod: + # if prockilled == False: + # hfdown(currentlink, currentfolder, xmethod, 'debugevery') + steps += 1 + + elif listpart.startswith("https://anonfiles.com"): #@note anonfiles + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + + currentcondition = f'Retrieving anonfiles link...' + # print(filename) + # Send HTTP request to the website and read the response + response = urllib.request.urlopen(currentlink) + html_content = response.read().decode('utf-8') + + # Find all links that contain "anonfiles" in them using regular expressions + download_links = re.findall(r'href=["\'](https?:\/\/.*?anonfiles.*?)["\']', html_content) + currentlink = max(download_links, key=len) + + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + currentlink.split("/")[-1] + f' into {currenthashtag}...') + if everymethod == False: + hfdown(currentlink, currentfolder, choosedowner, 'default', currenttorename) + else: + for xmethod in downmethod: + if prockilled == False: + hfdown(currentlink, currentfolder, xmethod, 'debugevery') + steps += 1 + + elif listpart.startswith("https://files.catbox.moe"): + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + try: + urllib.request.urlopen(currentlink) + except http.client.RemoteDisconnected: + print('Connection to ' + currentlink + ' failed.') + print("This colab session's server might doesn't have access to catbox") + print('') + continue + except urllib.error.URLError as e: + print('Connection to ' + currentlink + ' failed.') + print("This colab session's server might doesn't have access to catbox") + print('') + continue + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + os.path.basename(currentlink) + f' into {currenthashtag}...') + if everymethod == False: + hfdown(currentlink, currentfolder, choosedowner, 'default', currenttorename) + else: + for xmethod in downmethod: + if prockilled == False: + hfdown(currentlink, currentfolder, xmethod, 'debugevery') + steps += 1 + + elif listpart.startswith("https://civitai.com/api/download/models/"): #@note civit direct + usenewmethod = True + currentlink, currenttorename = splitrename(listpart) + if currenttorename == '': + currenttorename = getcivitname(listpart) + if currenttorename == 'batchlinksold': + usenewmethod = False + elif currenttorename == 'batchlinksskip': + continue + # print("That CivitAI link no longer exist, or the server is currently down.") + # continue + + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + if everymethod == False: + if usenewmethod: + progress(round(steps/totalsteps, 3), desc='Downloading ' + currenttorename + f' into {currenthashtag}...') + hfdown(currentlink, currentfolder, choosedowner, 'civit0', currenttorename) + else: + progress(round(steps/totalsteps, 3), desc='Downloading model number ' + os.path.basename(currentlink) + '...') + civitdown(currentlink, currentfolder, currenttorename) + if not prevciviterror: + configlink = checkcivitconfig(currentlink) + if not configlink=='': + namefile= os.path.splitext(currenttorename.split('?')[0])[0] + currenttorename = namefile + '.yaml' + hfdown(configlink, currentfolder, choosedowner, 'civit0', currenttorename) + else: + for xmethod in downmethod: + if prockilled == False: + hfdown(currentlink, currentfolder, xmethod, 'debugevery') + # civitdown(currentlink, currentfolder, currenttorename) + steps += 1 + + elif listpart.startswith("https://github.com"): + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + if '/raw/' in listpart or '/releases/download/' in listpart: + currentcondition = f'Downloading {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Downloading ' + os.path.basename(currentlink) + f' into {currenthashtag}...') + if everymethod == False: + hfdown(currentlink, currentfolder, choosedowner, 'default', currenttorename) + else: + for xmethod in downmethod: + if prockilled == False: + hfdown(currentlink, currentfolder, xmethod, 'debugevery') + else: + splits = listpart.split('#')[0].split("/") + currentlink = "/".join(splits[:5]) + foldername = listpart.split('#')[0].rsplit('/', 1)[-1] + folderpath = os.path.join(extpath, foldername) + currentcondition = f'Cloning {currentlink}...' + progress(round(steps/totalsteps, 3), desc='Cloning from ' + currentlink.split('/', 3)[-1] + f' into #ext...') + if platform.system() == "Windows": + runwithsubprocess(f"git clone {currentlink} {shlex.quote(folderpath)}") + else: + runwithsubprocess(f"git clone {currentlink} {folderpath}") + steps += 1 + + elif listpart.startswith("https://civitai.com/models/"): + currentlink, currenttorename = splitrename(listpart) + print('\n') + print(currentlink) + currentcondition = f'Downloading {currentlink}...' + #customtypemains = list + progress(round(steps/totalsteps, 3), desc='Downloading ' + os.path.basename(currentlink) + f'...') + for tag in tuple((typemain[countofdefaulthashtags:])): + if "#" + tag == currenthashtag and gradiostate: + progress(round(steps/totalsteps, 3), desc='Downloading ' + os.path.basename(currentlink) + f' into {currenthashtag}...') + pass + break + if everymethod == False: + civitdown2(currentlink, currentfolder, choosedowner, currenttorename, False, civitdefault, civitpruned, civitvae) + # else: + # for xmethod in downmethod: + # if prockilled == False: + # civitdown2(currentlink, currentfolder, xmethod, True) + steps += 1 + + elif listpart.startswith("!"): + commandtorun = listpart[1:] + currentcondition = f'Running command: {commandtorun}' + progress(round(steps/totalsteps, 3), desc=currentcondition) + runwithsubprocess(commandtorun, None, True) + steps += 1 + + elif listpart.startswith("@debugeverymethod") and globaldebug == True and gradiostate == True: + print('\n') + everymethod = True + print('DebugEveryMethod activated!') + print('One link will be downloaded with every possible download method.') + print('') + + elif listpart.startswith("@debugresetdownloads") and snapshot != {} and globaldebug == True: + print('\n') + currentcondition = f'Removing downloaded files...' + removed_files = global_rewind() + oldfilesdict = trackall() + texttowrite = ["⬇️Removed files⬇️"] + for item in removed_files: + texttowrite.append(item) + writefinal = list_to_text(texttowrite) + printdebug(str(writefinal)) + + elif listpart.startswith("@extract"): #@note hashtagextract + print('\n') + currentcondition = 'Extracting every archive file in current directory...' + print('Extracting every archive file in current directory...\n') + extractcurdir(currentfolder) + + elif listpart.startswith("@new"): #@note hashtagcustom + newcommand, newhashtag, newpath = shlex.split(listpart) + if newcommand and newhashtag and newpath: + if newhashtag.startswith("#"): + printdebug("making custom hashtag") + newtype = newhashtag[1:] + #global typemain #moved to top + #global typechecker #moved to top + if not newtype[0].isdigit(): + if not newtype in typemain and not newpath in typechecker: + try: + typemain.append(newtype) + printdebug('typemain: ' + str(typemain)) + typechecker.append(newtype) + printdebug('typechecker: ' + str(typechecker)) + newglobalpath = newtype + "path" + printdebug('newglobalpath: ' + newtype + "path") + newpath = os.path.abspath(os.path.normpath(newpath).rstrip(os.sep)) + os.makedirs(newpath, exist_ok=True) + globals()[newglobalpath] = newpath + printdebug("modelpath = " + eval(newglobalpath)) + oldfilesdict[newtype] = os.listdir(newpath) + # global addedcustompath + addedcustompath[newhashtag] = newpath + printdebug("addedcustompath: " + str(addedcustompath)) + print(f"New custom path added!\n{newhashtag} means {newpath}") + except Exception as e: + print("Adding custom path failed! Reason: " + str(e)) + else: + print("Adding custom path failed! Reason: Custom hashtag name cannot starts with a number") + + elif listpart.startswith("@aria") or listpart.startswith("@aria2"): #@note customaria + + # checkariacommand = ['##', '>'] + printvardebug(listpart) + if "##" in listpart: + listpart = listpart.split('##')[0] + if ":\\" in listpart: #windows path + listpart = listpart.replace('\\', '\\\\').replace('"', '\\"') + ariacmd = shlex.split(listpart) + printvardebug(ariacmd) + arialink, ariarename, ariapath = '', '', '' + renamedalready = False + custompath = False + # startcomment = False + if (ariacmd[0] == '@aria2' or ariacmd[0] == '@aria') and len(ariacmd) > 1: #two items. @aria and link + if ariacmd[1].startswith('http'): + arialink = ariacmd[1] + + if len(ariacmd) > 2: #three items. @aria, link, and path + if ariacmd[2].startswith(">") and len(ariacmd) > 3: #four items. @aria, link, '>', and rename (no custom path) + ariarename = shlex.quote(ariacmd[3]) + renamedalready = True + else: + if ariacmd[2].startswith('#'): #three items. @aria, link, hashtagpath + tobeariapath, _ = hashtagtopath(ariacmd[2]) + if tobeariapath: + ariapath = tobeariapath + else: #three items. @aria, link, custompath + # ariapath = shlex.quote(ariacmd[2]) + ariapath = ariacmd[2] + custompath = True #message for file downloaded to custom path will be added later + # if len(cmd) > 3: + # if cmd[3].startswith('>'): + # renaming = True + # else: + # renaming = False + if len(ariacmd) > 4 and ariacmd[3].startswith('>') and not renamedalready: #five items. @aria, link, path, '>', and rename + ariarename = shlex.quote(ariacmd[4]) + + if not ariapath: + ariapath = currentfolder + + if not ariarename: + ariarename = arialink.rsplit('/', 1)[-1] + + #finalcommand = f"aria2c --summary-interval=1 --console-log-level=error -c -x 16 -s 16 -k 1M {arialink} -d {ariapath} -o {ariarename}" + printvardebug(arialink) + printvardebug(ariapath) + printvardebug(ariarename) + if arialink and not prockilled: + try: + currentcondition = f'Downloading from {arialink} into {ariapath}...' + hfdown(arialink, ariapath, 'aria2', 'default', ariarename) + except Exception as e: + print(f"Custom aria download failed. Reason: {str(e)}") + + elif listpart.startswith("#") and listpart.endswith(tuple(typemain)): #tuple(typemain[countofdefaulthashtags:]) + try: + printdebug("one of typemain") + currenthashtag = listpart + currentfolder = eval(listpart[1:] + "path") + os.makedirs(currentfolder, exist_ok=True) + except Exception as e: + print(f"Cannot use hashtag: {str(e)}") + + else: + tobecurrentfolder, tobecurrenthashtag = hashtagtopath(listpart) + if tobecurrentfolder: + currentfolder = tobecurrentfolder + if tobecurrentfolder: + currenthashtag = tobecurrenthashtag + + else: + currentcondition = 'Operation cancelled' + return "Operation cancelled" + + currentcondition = 'Writing output...' + downloadedfiles = writeall(oldfilesdict, isshell, addedcustompath) + for tokill in everyprocessid: + try: + os.kill(tokill, signal.SIGTERM) + except ProcessLookupError: + pass + except PermissionError: + pass + except OSError: + pass + print() + print('BatchLinks Downloads finished!') + print('') + currentcondition = 'Done!' + printdebug(f"this should be the output:\n" + str(downloadedfiles)) + progress(1.00, desc='') + if gradiostate == True: + return [downloadedfiles, gr.Dataframe.update(value=buildarrayofhashtags('bottom'))] #@note dataframe #gr.Dataframe.update(value=buildarrayofhashtags('right')), was here + else: + return [downloadedfiles, gr.Dataframe.update(value=buildarrayofhashtags('bottom')), gr.Button.update(visible=resumebuttonvisible)] #gr.Dataframe.update(value=buildarrayofhashtags('right')), was here + +def hashtagtopath(thehashtag): + hashtagcurrent, foldercurrent = '','' + notbreaking = True + typemainlocal = [] + for x in typemain: + typemainlocal.append(x) + for y in typemainlocal: + if thehashtag[1:] == y: + printdebug("one of typemain, found on else") + hashtagcurrent = thehashtag + foldercurrent = eval(thehashtag[1:] + "path") + os.makedirs(foldercurrent, exist_ok=True) + notbreaking = False + for prefix in typechecker: + if thehashtag.startswith("#" + prefix) and notbreaking: + if prefix in ["embedding", "embeddings", "embed", "embeds","textualinversion", "ti"]: + hashtagcurrent = '#embed' + elif prefix in ["model", "models", "checkpoint", "checkpoints"]: + hashtagcurrent = '#model' + elif prefix in ["vae", "vaes"]: + hashtagcurrent = '#vae' + elif prefix in ["lora", "loras"]: + hashtagcurrent ='#lora' + elif prefix in ["hypernetwork", "hypernetworks", "hypernet", "hypernets", "hynet", "hynets",]: + hashtagcurrent = '#hynet' + elif prefix in ["addnetlora", "loraaddnet", "additionalnetworks", "addnet"]: + hashtagcurrent = '#addnetlora' + elif prefix in ["controlnet", "cnet"]: + hashtagcurrent = '#cnet' + elif prefix in ["extension", "extensions", "ext"]: + hashtagcurrent = '#ext' + elif prefix in ["aestheticembedding", "aestheticembed"]: + hashtagcurrent = '#aestheticembed' + elif prefix in ["upscaler", "upscale"]: + hashtagcurrent = '#upscaler' + elif prefix in ["altmodel", "altmodels"]: + hashtagcurrent = '#altmodel' + elif prefix in ["lycoris", "locon", "loha"]: + hashtagcurrent = '#lycoris' + try: + foldercurrent = eval(hashtagcurrent[1:] + 'path') + except Exception as e: + print(f"Cannot use hashtag: {e}") + continue + + os.makedirs(foldercurrent, exist_ok=True) + + return foldercurrent, hashtagcurrent + +wildcardcommand = [ + "@debugeverymethod", "@debugresetdownloads", + "@extract", "@aria", "@aria2", "@new" +] + +def extract_links(string): + links = [] + lines = string.split('\n') + for line in lines: + line = line.split('##')[0].strip() + if line.startswith(tuple(supportedlinks)): + links.append(line) + elif line.startswith(tuple(wildcardcommand)): + links.append(line) + elif line.startswith("!"): + links.append(line.strip()) + elif line.startswith("#"): + links.append(line.strip()) + # else: + # for prefix in typechecker: + # if line.startswith("#" + prefix): + # links.append(line) + + #print(f"links: {links}") + return links + +def list_to_text(lst): + stripped_list = [item.strip(',').strip('\"') for item in lst] + return '\n'.join(stripped_list) + +def uploaded(textpath): + if not textpath is None: + print(textpath) + file_paths = textpath.name + print(file_paths) + links = [] + + with open(file_paths, 'r') as file: + for line in file: + if line.startswith(tuple(supportedlinks)): + links.append(line.strip()) + elif line.startswith("!"): + links.append(line.strip()) + elif line.startswith(tuple(wildcardcommand)): + links.append(line.strip()) + elif line.startswith("#"): + links.append(line.strip()) + # else: + # for prefix in typechecker: + # if line.startswith("#" + prefix): + # links.append(line.strip()) + + text = list_to_text(links) + return text + +count = 0 +def keeplog(): + global currentcondition + global currentsuboutput + global logging + if logging == False: + currentcondition = "Logging activated." + currentsuboutput = '' + logging = True + return [currentcondition, gr.Button.update(visible=True), gr.Button.update(visible=False)] + if currentsuboutput == '': + return [currentcondition, gr.Button.update(visible=True), gr.Button.update(visible=False)] + else: + return [f"{currentcondition}\n{currentsuboutput}", gr.Button.update(visible=True), gr.Button.update(visible=False)] + +def offlog(): + global currentcondition + global currentsuboutput + global logging + if logging == True: + currentcondition = "Logging deactivated." + currentsuboutput = '' + logging = False + return [f"{currentcondition}", gr.Button.update(visible=False), gr.Button.update(visible=True)] + +def empty(): + return '' + +def cancelrun(): + global processid + global prockilled + printdebug("debug processid: " + str(processid)) + if not processid == '': + if platform.system() == "Windows": + global process + process.terminate() + _ = subprocess.getoutput("taskkill /F /T /PID" + str(process.pid)) + _ = subprocess.getoutput("taskkill /f /t /im MEGAcmdServer.exe") + else: + try: + os.kill(processid, signal.SIGTERM) + except ProcessLookupError: + pass + except PermissionError: + pass + except OSError: + pass + #os.killpg(os.getpgid(processid.pid), signal.SIGTERM) + prockilled = True + if prockilled == True and globaldebug == True: + print() + print("This should kill") + print() + return ["Operation Cancelled",gr.Dataframe.update(value=buildarrayofhashtags('bottom'))] + +def fillbox(): + global remaininglinks + if bool(remaininglinks): + text = list_to_text(remaininglinks) + remaininglinks = [] + return [text, 'Links updated!\nClick Download All! to download the rest of the links', gr.Button.update(visible=False)] + return ['', '', gr.Button.update(visible=False)] + +if gradiostate == True: + storedstatedownloader = "gdown" +else: + storedstatedownloader = "aria2" +storedstatemodeltype = "safetensors" +storedstateprecision = "fp16" +storedstatevae = True + +def grchangedown(downstate): + global storedstatedownloader + storedstatedownloader = downstate + printvardebug(storedstatedownloader) + +def grchangetype(typestate): + global storedstatemodeltype + storedstatemodeltype = typestate + printvardebug(storedstatemodeltype) + +def grchangefp(fpstate): + global storedstateprecision + storedstateprecision = fpstate + printvardebug(storedstateprecision) + +def grchangevae(vaestate): + global storedstatevae + storedstatevae = vaestate + printvardebug(storedstatevae) + +def stretchui(stretch): #outputs=[boxtohide, bottomlist] #outputs=[boxtohide, downbox, civitbox, choose_downloader, civit_default, civit_ispruned, civit_alsodownvae]) + # if stretch: + # return [gr.Box.update(visible=False), gr.Accordion.update(visible=False), gr.Accordion.update(visible=True)] + # else: + # return [gr.Box.update(visible=True), gr.Accordion.update(visible=True), gr.Accordion.update(visible=False)] + global storedstatedownloader + global storedstatemodeltype + global storedstateprecision + global storedstatevae + if stretch: + return [gr.Box.update(visible=False), gr.Row.update(visible=True), gr.Row.update(visible=True), gr.Radio.update(value=storedstatedownloader), gr.Radio.update(value=storedstatemodeltype), gr.Radio.update(value=storedstateprecision), gr.Checkbox.update(value=storedstatevae)] + else: + return [gr.Box.update(visible=True), gr.Row.update(visible=False), gr.Row.update(visible=False), gr.Radio.update(value=storedstatedownloader), gr.Radio.update(value=storedstatemodeltype), gr.Radio.update(value=storedstateprecision), gr.Checkbox.update(value=storedstatevae)] + +def hidehelp(hide): + if hide: + return [gr.Markdown.update(value=titletext), gr.Markdown.update(visible=False)] + else: + return [gr.Markdown.update(value=introductiontext), gr.Markdown.update(visible=True)] + +# countofdefaulthashtags = len(typemain) +def buildarrayofhashtags(rightorbottom): + printdebug(f"buildarray {rightorbottom} initiated!") + # defaultpathtime = True + def writingpath(j, path): + if path == modelpath: + return path + " (default path)" + elif path == altmodelpath: + return path + else: + if rightorbottom == 'right' and j < countofdefaulthashtags: + return path.replace(script_path, "~") + else: + return path + hashtagandpath = [] + for i, x in enumerate(typemain): + try: + xpath = eval(x+"path") + if cmd_opts.ckpt_dir: + hashtagandpath.append(["#"+x, writingpath(i, xpath)]) + elif x != "altmodel": + hashtagandpath.append(["#"+x, writingpath(i, xpath)]) + # defaultpathtime = False + except Exception as e: + print(str(e)) + return hashtagandpath + +def copyfrompastebin(boxwithlink): + pastebinlink = boxwithlink.strip() + if pastebinlink.startswith('https://pastebin.com/'): + if pastebinlink.count('\n') == 0: + global currentcondition + currentcondition = f'Gathering links from Pastebin..' + if not '/raw/' in pastebinlink: + pastebinlink = pastebinlink.replace("pastebin.com/", "pastebin.com/raw/") + + pbinresponse = requests.get(pastebinlink) + + if pbinresponse.status_code == 200: + pbintextlist = pbinresponse.text.splitlines() + links = [] + for line in pbintextlist: + if line.startswith(tuple(supportedlinks)): + links.append(line.strip()) + elif line.startswith("!"): + links.append(line.strip()) + elif line.startswith("@new"): + links.append(line.strip()) + elif line.startswith(tuple(wildcardcommand)): + links.append(line.strip()) + elif line.startswith("#"): + links.append(line.strip()) + currentcondition = f'Done.' + finallinks = list_to_text(links) + return [finallinks, "Pastebin links retrieved successfully."] + else: + currentcondition = f'Done.' + print("Error retrieving data from pastebin") + return [boxwithlink, "Error retrieving data from pastebin"] + else: + currentcondition = f'Done.' + return [boxwithlink, "Pastebin link must be the only one link on the textbox! (And only one pastebin link supported)"] + else: + currentcondition = f'Done.' + return [boxwithlink, "Pastebin link must be the first (and the only) link on the textbox!"] + +titletext = f"""

    ⬇️ Batchlinks Downloader ({currentversion}) {latestversiontext}

    """ +introductiontext = f""" +{titletext} +
    (what's new?)
    +

    This tool will read the textbox and download every links from top to bottom one by one
    +Put your links down below. Supported link: Huggingface, CivitAI, MEGA, Discord, Github, Catbox, Google Drive, Pixeldrain, Mediafire, Anonfiles, Dropbox
    +Use hashtag to separate downloaded items based on their download location
    +Valid hashtags: #embed, #model, #hypernet, #lora, #vae, #addnetlora, etc.
    +(For colab that uses sd-webui-additional-networks extension to load LoRA, use #addnetlora instead)
    +Use double hashtag (##) after links for comment. Useful to mark which links downloads what.
    +Remember to always press the 🔄️ refresh button on the UI after downloading models etc. in order for them to show up on the list.

    +""" +knowmoretext = f""" +

    Click these links for more:
    +Readme Page
    +Example
    +Syntax
    +Valid Hashtags
    +Here's how you can get the direct links
    +Report Bug

    +""" +testboxplaceholder = f"""#model + +#vae + +#lora + +##this is a comment, and these text is just an example +""" + +def on_ui_tabs(): + with gr.Blocks() as batchlinks: + with gr.Row(): + with gr.Column(scale=2): + introduction = gr.Markdown(introductiontext) + with gr.Column(scale=1): + with gr.Row(): + uistretcher = gr.Checkbox(value=False, label="Stretch UI", interactive=True) + helphider = gr.Checkbox(value=False, label="Hide Help", interactive=True) + knowmore = gr.Markdown(knowmoretext) + with gr.Group(): + command = gr.Textbox(label="Links", placeholder=testboxplaceholder, lines=5) + if gradiostate == True: + logbox = gr.Textbox(label="Log", interactive=False) + else: + if vladmandic: + logbox = gr.Textbox("(remove the --disable-queue args on launch.py to enable optional logging)", label="Log", interactive=False) + else: + logbox = gr.Textbox("(use --gradio-queue args on launch.py to enable optional logging)", label="Log", interactive=False) + + with gr.Row(): + with gr.Box(): + if gradiostate == True: + with gr.Column(): + # with gr.Row(): + # gr.Textbox(value=None, interactive=False, show_label=False) + btn_onlog = gr.Button("Turn On Logging", variant="primary", visible=True) + # with gr.Row(): + btn_offlog = gr.Button("Turn Off Logging", visible=False) + loggingon = btn_onlog.click(keeplog, outputs=[logbox, btn_offlog, btn_onlog], every=1) + btn_offlog.click(offlog, outputs=[logbox, btn_offlog, btn_onlog], cancels=[loggingon]) + # gr.Textbox(value=None, interactive=False, show_label=False) + # logging = gr.Radio(["Turn On Logging"], show_label=False) + # logging.change(keeplog, outputs=logbox, every=1) + out_text = gr.Textbox(label="Output") + else: + if vladmandic: + print("Batchlinks webui extension: (Optional) Remove the --disable-queue args to enable logging & cancel button on this extension") + else: + print("Batchlinks webui extension: (Optional) Use --gradio-queue args to enable logging & cancel button on this extension") + out_text = gr.Textbox("(If this text disappear, that means a download session is in progress.)", label="Output") + + # if platform.system() == "Windows": + # choose_downloader = gr.Radio(["gdown", "wget", "curl"], value="gdown", label="Download method") + # else: + + + with gr.Row(variant='panel', visible=False) as downbox: + + if gradiostate == True: + with gr.Column(scale=1): + choose_downloader2 = gr.Radio(["gdown", "wget", "curl", "aria2"], value="gdown", label="Download method") + else: + with gr.Column(scale=1): + choose_downloader2 = gr.Radio(["aria2"], value="aria2", label="Downloader") + + + with gr.Row(variant='panel', visible=False) as civitbox: + # with gr.Box(): + # with gr.Column(scale=1): + # with gr.Row(): + civit_default2 = gr.Radio(["ckpt", "safetensors"], value="safetensors", label="CivitAI Preferred Model Type", interactive=True) + civit_ispruned2 = gr.Radio(["fp16", "fp32"], value="fp16", label="Model Precision", interactive=True) + # with gr.Row(): + # civit_ispruned = gr.Checkbox(True, label="Pruned", interactive=True) + civit_alsodownvae2 = gr.Checkbox(True, label="Also Download VAE", interactive=True) + + # def passvaluebetweenradio(newval): + # return gr.Radio.update(value=newval) + + # def passvaluebetweencheckbox(newval): + # return gr.Checkbox.update(value=newval) + + # choose_downloader2.change(passvaluebetweenradio, inputs=choose_downloader2, outputs=choose_downloader) + # civit_default2.change(passvaluebetweenradio, inputs=civit_default2, outputs=civit_default) + # civit_ispruned2.change(passvaluebetweenradio, inputs=civit_ispruned2, outputs=civit_ispruned) + # civit_alsodownvae2.change(passvaluebetweencheckbox, inputs=civit_alsodownvae2, outputs=civit_alsodownvae) + + with gr.Row(): + if gradiostate == True: + with gr.Column(scale=1, min_width=100): + btn_run = gr.Button("Download All!", variant="primary") + # btn_upload = gr.UploadButton("Upload .txt", file_types="text") + # btn_upload.upload(uploaded, btn_upload, file_output) + with gr.Column(scale=1, min_width=100): + btn_cancel = gr.Button("Cancel") + with gr.Row(): + file_output = gr.UploadButton(file_types=['.txt'], label='Upload txt') + btn_pastebin = gr.Button("Copy from Pastebin") + + else: + btn_run = gr.Button("Download All!", variant="primary") + btn_resume = gr.Button("Resume Download", visible=False) + with gr.Column(scale=1, min_width=100): + with gr.Row(): + file_output = gr.UploadButton(file_types=['.txt'], label='Upload txt') + btn_pastebin = gr.Button("Copy from Pastebin") + # with gr.Column(scale=1, min_width=100): + # file_output = gr.UploadButton(file_types=['.txt'], label='Upload txt') + # copy_pastebin = gr.Button("Copy from Pastebin") + if gradiostate == False: + with gr.Row(): + gr.Markdown( + f""" +


    After clicking the Download All button, it's recommended to inspect the + colab console, as every information about the download progress is there.

    + """) + + if gradiostate == False: + btn_resume.click(fillbox, None, outputs=[command, out_text, btn_resume]) + + # file_output = gr.File(file_types=['.txt'], label="you can upload a .txt file containing links here") + # file_output.change(uploaded, file_output, command) + + file_output.upload(uploaded, file_output, command) + with gr.Box(visible=True) as boxtohide: + with gr.Row(variant='panel'): + if gradiostate == True: + with gr.Column(scale=1): + choose_downloader = gr.Radio(["gdown", "wget", "curl", "aria2"], value=storedstatedownloader, label="Download method") + else: + with gr.Column(scale=1): + choose_downloader = gr.Radio(["aria2"], value=storedstatedownloader, label="Downloader") + with gr.Row(variant='panel'): + civit_default = gr.Radio(["ckpt", "safetensors"], value=storedstatemodeltype, label="CivitAI Preferred Model Type", interactive=True) + civit_ispruned = gr.Radio(["fp16", "fp32"], value=storedstateprecision, label="Model Precision", interactive=True) + # with gr.Row(): + # civit_ispruned = gr.Checkbox(True, label="Pruned", interactive=True) + civit_alsodownvae = gr.Checkbox(storedstatevae, label="Also Download VAE", interactive=True) + choose_downloader.change(grchangedown, inputs=choose_downloader) + civit_default.change(grchangetype, inputs=civit_default) + civit_ispruned.change(grchangefp, inputs=civit_ispruned) + civit_alsodownvae.change(grchangevae, inputs=civit_alsodownvae) +# with gr.Box(visible=True) as boxtohide: + # gr.Markdown(""" + #
    If you feel the UI is too cramped, click the Stretch UI button above.
    + # """) +# with gr.Accordion("List of Every Hashtags and its Path", open=False, visible=True) as rightlist: +# righttable = gr.DataFrame( +# buildarrayofhashtags('right'), +# headers=["hashtag", "path"], +# datatype=["str", "str"], +# interactive=False +# ) + # sidetext = gr.Markdown(knowmoretext, visible=True) + def passvaluebetweenradio(newval): + return gr.Radio.update(value=newval) + + def passvaluebetweencheckbox(newval): + return gr.Checkbox.update(value=newval) + + choose_downloader2.change(passvaluebetweenradio, inputs=choose_downloader2, outputs=choose_downloader) + civit_default2.change(passvaluebetweenradio, inputs=civit_default2, outputs=civit_default) + civit_ispruned2.change(passvaluebetweenradio, inputs=civit_ispruned2, outputs=civit_ispruned) + civit_alsodownvae2.change(passvaluebetweencheckbox, inputs=civit_alsodownvae2, outputs=civit_alsodownvae) + finish_audio = gr.Audio(interactive=False, value=os.path.join(extension_dir, "notification.mp3"), elem_id="finish_audio", visible=False) + with gr.Accordion("List of Every Hashtags and its Path", open=False, visible=True) as bottomlist: + bottomtable = gr.DataFrame( + buildarrayofhashtags('bottom'), + headers=["hashtag", "path"], + datatype=["str", "str"], + interactive=False, + ) + gr.Markdown( + f""" +

    Made with ❤️ by etherealxx

    + """) + helphider.change(hidehelp, helphider, outputs=[introduction, knowmore]) + # uistretcher.change(stretchui, uistretcher, outputs=[boxtohide, rightlist, bottomlist]) + # uistretcher.change(stretchui, uistretcher, outputs=boxtohide) + uistretcher.change(stretchui, uistretcher, outputs=[boxtohide, downbox, civitbox, choose_downloader2, civit_default2, civit_ispruned2, civit_alsodownvae2]) + #batchlinks.load(debug, output=debug_txt, every=1) + if gradiostate == True: + run_event = btn_run.click(run, inputs=[command, choose_downloader, civit_default, civit_ispruned, civit_alsodownvae], outputs=[out_text, bottomtable]) #righttable was on output + btn_cancel.click(cancelrun, None, outputs=[out_text, bottomtable], cancels=[run_event]) + else: + btn_run.click(run, inputs=[command, choose_downloader, civit_default, civit_ispruned, civit_alsodownvae], outputs=[out_text, bottomtable, btn_resume]) #righttable was on output + + btn_pastebin.click(copyfrompastebin, inputs=[command], outputs=[command, out_text]) + + if sdless: + if platform.system() == "Windows": + batchlinks.queue(64).launch(inbrowser=True) + else: + batchlinks.queue(64).launch(share=True) + else: + return (batchlinks, "Batchlinks Downloader", "batchlinks"), +if not sdless: + script_callbacks.on_ui_tabs(on_ui_tabs) +else: + on_ui_tabs() diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-macos.sh b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-macos.sh new file mode 100644 index 0000000000000000000000000000000000000000..27ea063ed721ceb38d15841fa4a32a4ca2f6b8fe --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-macos.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +pip3 show virtualenv >/dev/null || pip3 install -q virtualenv +[ -d gradiovenv ] || virtualenv gradiovenv +source gradiovenv/bin/activate; \ +pip3 show gradio >/dev/null || pip3 install -q gradio==3.16.2; \ +pip3 show tqdm >/dev/null || pip3 install -q tqdm +source gradiovenv/bin/activate; \ +python3 scripts/batchlinks-downloader.py \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-windows-debug.bat b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-windows-debug.bat new file mode 100644 index 0000000000000000000000000000000000000000..bef02d4493ea3218dafb5ee31a91d998ec277237 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-windows-debug.bat @@ -0,0 +1,26 @@ +@echo off +if exist gradioinstalled.bak goto beginning +echo Checking gradio version... +echo. +python -c "import gradio" 2>nul && ( + python -c "import gradio; assert gradio.__version__ == '3.16.2'" 2>nul || ( + pip install gradio==3.16.2 + ) +) || ( + pip install gradio==3.16.2 +) +pip show tqdm >nul || pip install tqdm +pip freeze | findstr /i "\" >nul && pip freeze | findstr /i "\" >nul && (echo. > gradioinstalled.bak) +echo. + +:beginning +cd scripts +echo ^> python -m batchlinks-downloader.py --debug +echo. +python -m batchlinks-downloader.py --debug +echo. +echo Close the terminal to stop the looping launch +echo. +pause +echo. +goto beginning \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-windows.bat b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-windows.bat new file mode 100644 index 0000000000000000000000000000000000000000..565d387d9b2b1069e3907b3df77231fc8655d529 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/sdless-windows.bat @@ -0,0 +1,26 @@ +@echo off +if exist gradioinstalled.bak goto beginning +echo Checking gradio version... +echo. +python -c "import gradio" 2>nul && ( + python -c "import gradio; assert gradio.__version__ == '3.16.2'" 2>nul || ( + pip install gradio==3.16.2 + ) +) || ( + pip install gradio==3.16.2 +) +pip show tqdm >nul || pip install tqdm +pip freeze | findstr /i "\" >nul && pip freeze | findstr /i "\" >nul && (echo. > gradioinstalled.bak) +echo. + +:beginning +cd scripts +echo ^> python -m batchlinks-downloader.py +echo. +python -m batchlinks-downloader.py +echo. +echo Close the terminal to stop the looping launch +echo. +pause +echo. +goto beginning \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/batch-link/version.txt b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/version.txt new file mode 100644 index 0000000000000000000000000000000000000000..32797671a624be9819257a3bc1d12aaf10baf389 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/batch-link/version.txt @@ -0,0 +1,136 @@ +v3.2.1 +(^current version, hopefully not the last^) + +Release notes: + +## v3.2.1 +- Changed "pruned" option to "fp precision" due to CivitAI API changes +- Fixed bug: No matter when the download process is cancelled or not, CivitAI download will give print out notification that the download process is successful +- Fixed bug: Preventing the UI errored out when storage is full and trying to convert jpg image while downloading civitai stuff (PIL.UnidentifiedImageError) +- UI overhaul + +## v3.2.0a +- Added support for vladmandic's fork of automatic1111's webui + +## v3.2.0 +- Bug fixed when downloading with aria2 on Windows +- Bug fixed on gradio update checker on sdless batch file for windows +- CivitAi error prevention (when the website is down) +- Cleaned the code of the hashtag system +- `Copy from Pastebin` feature +- Custom aria command with `@aria` +- Making sure custom hashtag doesn't start with number +- New calmer notification sound +- Readme page cleanup +- Some help link changed to link into wiki instead +- UI fix to adapt with latest gradio (v3.23.0) +- Various bug fixes related to CivitAI download + +## v3.1.1b +- Hotfix: Fixed CivitAI link refuses to be downloaded properly. Seems like CivitAI changes its API. +- Fixed several bugs on Windows, especially SDless + +## v3.1.1a +- Hotfix: Fixed CivitAI 'model type chooser' bug and fixed `@extract` bug on colab + +## v3.1.1 +- Added some fix and messages in case CivitAI website is down +- Added message when user pressed "Download All!" but the textbox is empty +- Fixed bug where Lycoris folder always shows on downloaded files the first time user download something + +## v3.1.0a +- Hotfix: Indented block on line 1497 fix + +## v3.1.0 +- New hashtag: `#altmodel`, when you use `--ckptdir` argument on `launch.py` line, this hashtag will points to that directory. Otherwise, it'll point to the same directory as `#model` +- New hashtag: `#lycoris`, change current save directory to _/content/stable-diffusion-webui/extensions/sd-webui-additional-networks/models/lora/lycoris_
    (Side note: _Lycoris/Locon/Loha_ will works just fine if you use `#addnetlora` instead, as long as you have both [addnet extension](https://github.com/kohya-ss/sd-webui-additional-networks) and [locon extension](https://github.com/KohakuBlueleaf/a1111-sd-webui-locon) installed) +- New hashtag: `#upscaler`, change current save directory to _/content/stable-diffusion-webui/models/ESRGAN_ (This was added few commits ago, but i forgot to write it on the release notes) + +Fixes: +- Fixed bug when installing wget/aria2 on Windows +- Fixed bug where custom paths doesn't put CivitAi download (Model Path method) when custom hashtag is used +- Ongoing downloads will correctly stops when Cancel button is pressed on Windows +- CivitAi (Model Path method) now will not download training dataset by accident + +## v3.0.2 +- Hotfix: removed a comment that messed up the non queue mode. Now the extension works again without `--gradio-queue`. + +## v3.0.1 +- Hotfix: using `urllib.request` instead of `curl -sI` to get the model name on CivitAI direct link method, since it's more reliable (and the curl method always fails somehow). The `requests` method is returned as a fallback. + +## v3.0.0 +- Added `@extract` syntax +- Supports for custom hashtags with `@new` syntax +- (Almost) Full Windows support +- Auto-download config file if available when downloading from CivitAI (SD 2.0+) +- Auto-renaming for downloading ckpt/safetensors and pruned model from CivitAI using direct link method +- CivitAI direct link now use `curl` to get the filename, and use the chosen download method (from the four) to download. Huge download speed boost. `requests` is no longer needed. +- Supports download from Anonfiles, Dropbox, Google Drive, Mediafire, Pixeldrain +- Supports download from Github (raw and release files) +- Supports for SDless mode (read more [here](https://github.com/etherealxx/batchlinks-webui#sdless-mode)) +- UI overhaul: + - Now there's a table that shows where does the hashtags points into + - Option to stretch the UI, if your monitor is small, or using colab on mobile + - Option to hide help text + - Option to choose preferred CivitAI models. This will works if you download the model via model page link (https://civitai.com/models/) + - Upload txt now use a little button instead of covering half of the screen + +Fixes: +- CivitAI `model page link` no longer randomly download the first model on the json list. +- Most of Windows bugs +- Renaming problem when using CivitAI model page link method +- Warning message when CivitAI download isn't possible (server down) + +## v2.1.2 +- CivitAI direct link now use curl to get the filename, and use the chosen download method to download. Requests is no longer needed. + +## v2.1.1 +- Partial Windows support is back + +Changes: +- wget disabled on windows currently, until it fixed + +Fixes: +- gdown & curl bug fixed +- utf-8 as default encoding for queue checker (fix bug in Windows) + +## v2.1.0 +Features: +- Supports renaming downloaded file with `>` (for example: `https://files.catbox.moe/uarze8.safetensors > neurosama.safetensors`) +- Supports extension usage without `--gradio-queue` (ported from [onedotsix](https://github.com/etherealxx/batchlinks-webui/tree/onedotsix)) +- Supports running shell command from the UI with `!` (for example: type `!pip freeze`, then hit the `Download all!` button and see the colab console) +- Progress bar for `--gradio-queue` + +Changes: +- `aria2` as *the only* download method when using without `--gradio-queue` +- Download session will be cut every 80 seconds on when using without `--gradio-queue` (just like [onedotsix](https://github.com/etherealxx/batchlinks-webui/tree/onedotsix)) +- _Debug stopwatch (decorator)_ won't run automatically when `globaldebug = True`, must be uncommented manually (it disrupt the progress bar) +- Dropped support for webui based on Gradio 3.9 (update your installation, or use [onedotsix](https://github.com/etherealxx/batchlinks-webui/tree/onedotsix) instead) +- UI tweak (Smaller font size) + +## v2.0.0 +Features: +- `aria2` as download method. +- Cancel button for cancelling download process (`--gradio-queue` required) +- Debug snapshot.
    +When `global_debug = True`, the moment this extension launch, it saves the current state of the webui on various location (into `snapshot.txt`), and when you type `#debugresetdownloads` on the textbox, it will compare the current state and the last saved state, and removes every new file/folder. This will be useful for debugging and testing. +- Debug every download method.
    +When `global_debug = True` and you type `#debugevery method` on the textbox, every link that has 4 different method of download (Huggingface etc.) will be downloaded with every method, regardless of the radio button choice. The result is 4 file being downloaded. +- Detection if a CivitAI links no longer exist +- New hashtags: `#textualinversion`, `#ti`, `#aestheticembedding`, `#aestheticembed`, `#controlnet`, and `#cnet` +- Toggle logging on/off +- `shlex.quote` to properly quote links (Thanks **[@rti7743](https://github.com/rti7743)**!) +- Supports cloning webui extensions +- Supports download from CivitAI model links (Thanks **[@rti7743](https://github.com/rti7743)**!) +- Supports download from Github (repository and raw files) +- Supports for aesthetic gradients, controlnet model, and extensions path. +- UI font scaled down +- Uses `subprocess.Popen` instead of `os.system` + + +Older releases: + +- commit "alpha" is v0.1.0 (09b1d81806e5bfc4d1783ccf644359fabc372fb7) +- commit "Civit support, i hope it works." is v0.2.0 (2420ea4dd670ec71481a2ed43ff22c7c1a959543) +- commit "🪲Bug fix and 🖼️stuff" is v0.2.1 (c7a91b6e14ca6f35438e29ab7ad3d2e00d62c99b) +- commit "Merge pull request #1 from etherealxx/gradioevery" is v1.0.0 (a89e50fdfb5008f703750cf0e7878fc6c25f9219) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/block-weight/README.md b/TestingforfaivsixEx/content/eichellis/extensions/block-weight/README.md new file mode 100644 index 0000000000000000000000000000000000000000..3ed96f746120612db88589402722ae40894c008f --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/block-weight/README.md @@ -0,0 +1,350 @@ +# LoRA Block Weight +- custom script for [AUTOMATIC1111's stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) +- When applying Lora, strength can be set block by block. + +- [AUTOMATIC1111's stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) 用のスクリプトです +- Loraを適用する際、強さを階層ごとに設定できます + +### Updates/更新情報 +2023.5.24.2000(JST) +- changed directory for presets(extentions/sd-webui-lora-block-weight/scripts/) +- プリセットの保存フォルダがextentions/sd-webui-lora-block-weight/scripts/に変更になりました。 + +2023.5.12.2100(JST) +- changed syntax of lycoris +- lycorisの書式を変更しました + +2023.04.14.2000(JST) +- support LyCORIS(a1111-sd-webui-lycoris) +- LyCORIS(a1111-sd-webui-lycoris)に対応 + +2023.03.20.2030(JST) +- Comment lines can now be added to presets +- プリセットにコメント行を追加できるようになりました +- support XYZ plot hires.fix +- XYZプロットがhires.fixに対応しました + +2023.03.16.2030(JST) +- [LyCORIS](https://github.com/KohakuBlueleaf/LyCORIS)に対応しました +- Support [LyCORIS](https://github.com/KohakuBlueleaf/LyCORIS) + +別途[LyCORIS Extention](https://github.com/KohakuBlueleaf/a1111-sd-webui-locon)が必要です。 +For use LyCORIS, [Extension](https://github.com/KohakuBlueleaf/a1111-sd-webui-locon) for LyCORIS needed. + +日本語説明は[後半](#概要)後半にあります。 + +# Overview +Lora is a powerful tool, but it is sometimes difficult to use and can affect areas that you do not want it to affect. This script allows you to set the weights block-by-block. Using this script, you may be able to get the image you want. + +## Usage +Place lora_block_weight.py in the script folder. +Or you can install from Extentions tab in web-ui. When installing, please restart web-ui.bat. + +### Active +Check this box to activate it. + +### Prompt +In the prompt box, enter the Lora you wish to use as usual. Enter the weight or identifier by typing ":" after the strength value. The identifier can be edited in the Weights setting. +``` +. +. (a1111-sd-webui-locon, etc.) + + (a1111-sd-webui-lycoris) + (a1111-sd-webui-lycoris) +``` +For LyCORIS using a1111-sd-webui-lycoris, syntax is different. +`lbw=IN02` is used and follow lycoirs syntax for others such as unet or else. +a1111-sd-webui-lycoris is under under development, so this syntax might be changed. + +Lora strength is in effect and applies to the entire Blocks. +It is case-sensitive. +For LyCORIS, full-model blobks used,so you need to input 26 weights. +You can use weight for LoRA, in this case, the weight of blocks not in LoRA is set to 1.   +If the above format is not used, the preset will treat it as a comment line. + +### Weights Setting +Enter the identifier and weights. +Unlike the full model, Lora is divided into 17 blocks, including the encoder. Therefore, enter 17 values. +BASE, IN, OUT, etc. are the blocks equivalent to the full model. + +|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17| +|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-| +|BASE|IN01|IN02|IN04|IN05|IN07|IN08|MID|OUT03|OUT04|OUT05|OUT06|OUT07|OUT08|OUT09|OUT10|OUT11| + +LyCORIS, etc. +|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26| +|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-| +|BASE|IN00|IN01|IN02|IN03|IN04|IN05|IN06|IN07|IN08|IN09|IN10|IN11|MID|OUT00|OUT01|OUT02|OUT03|OUT04|OUT05|OUT06|OUT07|OUT08|OUT09|OUT10|OUT11| + +### Special Values (Random) +Basically, a numerical value must be entered to work correctly, but by entering `R` and `U`, a random value will be entered. +R : Numerical value with 3 decimal places from 0~1 +U : 3 decimal places from -1.5 to 1.5 + +For example, if ROUT:1,1,1,1,1,1,1,1,R,R,R,R,R,R,R,R,R +Only the OUT blocks is randomized. +The randomized values will be displayed on the command prompt screen when the image is generated. + +### Special Values (Dynamic) +The special value `X` may also be included to use a dynamic weight specified in the LoRA syntax. This is activated by including an additional weight value after the specified `Original Weight`. + +For example, if ROUT:X,1,1,1,1,1,1,1,1,1,1,1,X,X,X,X,X and you had a prompt containing \. The `X` weights in ROUT would be replaced with `0.7` at runtime. + +> NOTE: If you select an `Original Weight` tag that has a dynamic weight (`X`) and you do not specify a value in the LoRA syntax, it will default to `1`. + +### Save Presets + +The "Save Presets" button saves the text in the current text box. It is better to use a text editor, so use the "Open TextEditor" button to open a text editor, edit the text, and reload it. +The text box above the Weights setting is a list of currently available identifiers, useful for copying and pasting into an XY plot. 17 identifiers are required to appear in the list. + +### Fun Usage +Used in conjunction with the XY plot, it is possible to examine the impact of each level of the hierarchy. +![xy_grid-0017-4285963917](https://user-images.githubusercontent.com/122196982/215341315-493ce5f9-1d6e-4990-a38c-6937e78c6b46.jpg) + +The setting values are as follows. +NOT:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +ALL:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +INS:1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +IND:1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +INALL:1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 +MIDD:1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0 +OUTD:1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0 +OUTS:1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1 +OUTALL:1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1 + +## XYZ Plotting Function +The optimal value can be searched by changing the value of each layer individually. +### Usage +Check "Active" to activate the function. If Script (such as XYZ plot in Automatic1111) is enabled, it will take precedence. +Hires. fix is not supported. batch size is fixed to 1. batch count should be set to 1. +Enter XYZ as the identifier of the LoRA that you want to change. It will work even if you do not enter a value corresponding to XYZ in the preset. If a value corresponding to XYZ is entered, that value will be used as the initial value. +Inputting ZYX, inverted value will be automatically inputted. +This feature enables to match weights of two LoRAs. +Inputing XYZ for LoRA1 and ZYX for LoRA2, you get, +LoRA1 1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0 +LoRA2 0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1 +### Axis type +#### values +Sets the weight of the hierarchy to be changed. Enter the values separated by commas. 0,0.25,0.5,0.75,1", etc. + +#### Block ID +If a block ID is entered, only that block will change to the value specified by value. As with the other types, use commas to separate them. Multiple blocks can be changed at the same time by separating them with a space or hyphen. The initial NOT will invert the change, so NOT IN09-OUT02 will change all blocks except IN09-OUT02. + +#### seed +Seed changes, and is intended to be specified on the Z-axis. + +#### Original Weights +Specify the initial value to change the weight of each block. If Original Weight is enabled, the value entered for XYZ is ignored. + +### Input example +X : value, value : 1,0.25,0.5,0.75,1 +Y : Block ID, value : BASE,IN01-IN08,IN05-OUT05,OUT03-OUT11,NOT OUT03-OUT11 +Z : Original Weights, Value : NONE,ALL0.5,ALL + +In this case, an XY plot is created corresponding to the initial values NONE,ALL0.5,ALL. +If you select Seed for Z and enter -1,-1,-1, the XY plot will be created 3 times with different seeds. + +### Effective Block Analyzer +This function check which layers are working well. The effect of the block is visualized and quantified by setting the intensity of the other bocks to 1, decreasing the intensity of the block you want to examine, and taking the difference. +#### Range +If you enter 0.5, 1, all initial values are set to 1, and only the target block is calculated as 0.5. Normally, 0.5 will make a difference, but some LoRAs may have difficulty making a difference, in which case, set 0.5 to 0 or a negative value. + +#### settings +##### diff color +Specify the background color of the diff file. + +##### chnage X-Y +Swaps the X and Y axes. By default, Block is assigned to the Y axis. + +##### Threshold +Sets the threshold at which a change is recognized when calculating the difference. Basically, the default value is fine, but if you want to detect subtle differences in color, etc., lower the value. + +#### Blocks +Enter the blocks to be examined, using the same format as for XYZ plots. + +For more information on block-by-block merging, see + +https://github.com/bbc-mc/sdweb-merge-block-weighted-gui + +# 概要 +Loraは強力なツールですが、時に扱いが難しく、影響してほしくないところにまで影響がでたりします。このスクリプトではLoraを適用する際、適用度合いをU-Netの階層ごとに設定することができます。これを使用することで求める画像に近づけることができるかもしれません。 + +## 使い方 +scriptフォルダにlora_block_weightを置いてください。 インストール時はWeb-ui.batを再起動をしてください。 + +### Active +ここにチェックを入れることで動作します。 + +### プロンプト +プロンプト画面では通常通り使用したいLoraを記入してください。その際、強さの値の次に「:」を入力しウェイトか識別子を入力します。識別子はWeights setting で編集します。 +``` +. +. (a1111-sd-webui-locon, etc.) + (a1111-sd-webui-lycoris) + (a1111-sd-webui-lycoris) +``` +Loraの強さは有効で、階層全体にかかります。大文字と小文字は区別されます。 +LyCORISに対してLoRAのプリセットも使用できますが、その場合LoRAで使われていない階層のウェイトは1に設定されます。 +上記の形式になっていない場合プリセットではコメント行として扱われます。 +a1111-sd-webui-lycoris版のLyCORISを使用する場合構文が異なります。`lbw=IN02`を使って下さい。順番は問いません。その他の書式はlycorisの書式にしたがって下さい。詳しくはLyCORISのドキュメントを参照して下さい。識別子を入力して下さい。a1111-sd-webui-lycoris版は開発途中のためこの構文は変更される可能性があります。 + +### Weights setting +識別子とウェイトを入力します。 +フルモデルと異なり、Loraではエンコーダーを含め17のブロックに分かれています。よって、17個の数値を入力してください。 +BASE,IN,OUTなどはフルモデル相当の階層です。 + + +|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17| +|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-| +|BASE|IN01|IN02|IN04|IN05|IN07|IN08|MID|OUT03|OUT04|OUT05|OUT06|OUT07|OUT08|OUT09|OUT10|OUT11| + +LyCORISなどの場合 +|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26| +|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-| +|BASE|IN00|IN01|IN02|IN03|IN04|IN05|IN06|IN07|IN08|IN09|IN10|IN11|MID|OUT00|OUT01|OUT02|OUT03|OUT04|OUT05|OUT06|OUT07|OUT08|OUT09|OUT10|OUT11| + +### 特別な値 +基本的には数値を入れないと正しく動きませんが R および U を入力することでランダムな数値が入力されます。 +R : 0~1までの小数点3桁の数値 +U : -1.5~1.5までの小数点3桁の数値 + +例えば ROUT:1,1,1,1,1,1,1,1,R,R,R,R,R,R,R,R,R とすると +OUT層のみダンダム化されます +ランダム化された数値は画像生成時にコマンドプロンプト画面に表示されます + +saveボタンで現在のテキストボックスのテキストを保存できます。テキストエディタを使った方がいいので、open Texteditorボタンでテキストエディタ開き、編集後reloadしてください。 +Weights settingの上にあるテキストボックスは現在使用できる識別子の一覧です。XYプロットにコピペするのに便利です。17個ないと一覧に表示されません。 + +### 楽しい使い方 +XY plotと併用することで各階層の影響を調べることが可能になります。 +![xy_grid-0017-4285963917](https://user-images.githubusercontent.com/122196982/215341315-493ce5f9-1d6e-4990-a38c-6937e78c6b46.jpg) + +設定値は以下の通りです。 +NOT:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +ALL:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 +INS:1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 +IND:1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0 +INALL:1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 +MIDD:1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0 +OUTD:1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0 +OUTS:1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 +OUTALL:1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 + +## XYZ プロット機能 +各層の値を個別に変化させることで最適値を総当たりに探せます。 +### 使い方 +Activeをチェックすることで動作します。 Script(Automatic1111本体のXYZプロットなど)が有効になっている場合そちらが優先されます。noneを選択してください。 +Hires. fixには対応していません。Batch sizeは1に固定されます。Batch countは1に設定してください。 +変化させたいLoRAの識別子にXYZと入力します\。 プリセットにXYZに対応する値を入力していなくても動作します。その場合すべてのウェイトが0の状態からスタートします。XYZに対応する値が入力されている場合はその値が初期値になります。 +ZYXと入力するとXYZとは反対の値が入力されます。これはふたつのLoRAのウェイトを合わせる際に有効です。 +例えばLoRA1にXYZ,LoRA2にZYXと入力すると、 +LoRA1 1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0 +LoRA2 0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1 +となります。 +### 軸タイプ +#### values +変化させる階層のウェイトを設定します。カンマ区切りで入力してください。「0,0.25,0.5,0.75,1」など。 + +#### Block ID +ブロックIDを入力すると、そのブロックのみvalueで指定した値に変わります。他のタイプと同様にカンマで区切ります。スペースまたはハイフンで区切ることで複数のブロックを同時に変化させることもできます。最初にNOTをつけることで変化対象が反転します。NOT IN09-OUT02とすると、IN09-OUT02以外が変化します。NOTは最初に入力しないと効果がありません。IN08-M00-OUT03は繋がっています。 + +#### Seed +シードが変わります。Z軸に指定することを想定しています。 + +#### Original Weights +各ブロックのウェイトを変化させる初期値を指定します。プリセットに登録されている識別子を入力してください。Original Weightが有効になっている場合XYZに入力された値は無視されます。 + +### 入力例 +X : value, 値 : 1,0.25,0.5,0.75,1 +Y : Block ID, 値 : BASE,IN01-IN08,IN05-OUT05,OUT03-OUT11,NOT OUT03-OUT11 +Z : Original Weights, 値 : NONE,ALL0.5,ALL + +この場合、初期値NONE,ALL0.5,ALLに対応したXY plotが作製されます。 +ZにSeedを選び、-1,-1,-1を入力すると、異なるseedでXY plotを3回作製します。 + +### Effective Block Analyzer +どの階層が良く効いているかを判別する機能です。対象の階層以外の強度を1にして、調べたい階層の強度を下げ、差分を取ることで階層の効果を可視化・数値化します。 +#### Range +0.5, 1 と入力した場合、初期値がすべて1になり、対象のブロックのみ0.5として計算が行われます。普通は0.5で差がでますが、LoRAによっては差が出にくい場合があるので、その場合は0.5を0あるいはマイナスの値に設定してください。 + +#### 設定 +##### diff color +差分ファイルの背景カラーを指定します。 + +##### chnage X-Y +X軸とY軸を入れ替えます。デフォルトではY軸にBlockが割り当てられています。 + +##### Threshold +差分を計算する際の変化したと認識される閾値を設定します。基本的にはデフォルト値で問題ありませんが、微妙な色の違いなどを検出したい場合は値を下げて下さい。 + +#### Blocks +調べたい階層を入力します。XYZプロットと同じ書式が使用可能です。 + +階層別マージについては下記を参照してください + +### elemental +詳細は[こちら](https://github.com/hako-mikan/sd-webui-supermerger/blob/main/elemental_ja.md)を参照して下さい。 +#### 使い方 +Elementaタブにて階層指定と同じように識別子を設定します。識別子は階層の識別子の後に入力します。 +\ +ATTNON: + +書式は +識別子:階層指定:要素指定:ウェイト +のように指定します。要素は部分一致で判定されます。attn1ならattn1のみ、attnならattn1及びattn2が反応します。階層、要素共に空白で区切ると複数指定できます。 +print changeをオンにすると反応した要素がコマンドプロンプト上に表示されます。 + +ALL0:::0 +はすべての要素のウェイトをゼロに設定します。 +IN1:IN00-IN11::1 +はINのすべての要素を1にします +ATTNON::attn:1 +はすべての階層のattnを1にします。 + +#### XYZプロット +XYZプロットのelementsの項ではカンマ区切りでXYZプロットが可能になります。 +その場合は +\ +と指定して下さい。 +elements +の項に +IN05-OUT05:attn:0,IN05-OUT05:attn:0.5,IN05-OUT05:attn:1 +と入力して走らせるとIN05からOUT05までのattnのみを変化させることができます。 +この際、XYZの値を変更することで初期値を変更できます。デフォルトではelementalのXYZはXYZ:::1となっており、これは全階層、全要素を1にしますが、ここをXYZ:encoder::1とするとテキストエンコーダーのみを有効にした状態で評価ができます。 + +https://github.com/bbc-mc/sdweb-merge-block-weighted-gui + +### updates/更新情報 +2023.02.07 1250(JST) +- Changed behavior when XYZ plot Active (Script of the main UI is prioritized). + +2023.02.06 2000(JST) +- Feature added: XYZ plotting is added. + +2023.01.31 0200(JST) +- Feature added: Random feature is added +- Fixed: Weighting now works for negative values. + +2023.02.16 2040(JST) +- Original Weight をxやyに設定できない問題を解決しました +- Effective Weight Analyzer選択時にXYZのXやYがValuesとBlockIdになっていないとエラーになる問題を解決しました + +2023.02.08 2120(JST) +- 階層適応した後通常使用する際、階層適応が残る問題を解決しました +- 効果のある階層をワンクリックで判別する機能を追加しました + +2023.02.08 0050(JST) +- 一部環境でseedが固定されない問題を解決しました + +2023.02.07 2015(JST) +- マイナスのウェイトが正常に働かない問題を修正しました + +2023.02.07 1250(JST) +- XYZプロットActive時の動作を変更しました(本体のScriptが優先されるようになります) + +2023.02.06 2000(JST) +- 機能追加:XYZプロット機能を追加しました + +2023.01.31 0200(JST) +- 機能追加:ランダム機能を追加しました +- 機能修正:ウェイトがマイナスにも効くようになりました diff --git a/TestingforfaivsixEx/content/eichellis/extensions/block-weight/scripts/Roboto-Regular.ttf b/TestingforfaivsixEx/content/eichellis/extensions/block-weight/scripts/Roboto-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..500b1045b0c94d83d2e6798aaf1faa55a2dab6fc Binary files /dev/null and b/TestingforfaivsixEx/content/eichellis/extensions/block-weight/scripts/Roboto-Regular.ttf differ diff --git a/TestingforfaivsixEx/content/eichellis/extensions/block-weight/scripts/lora_block_weight.py b/TestingforfaivsixEx/content/eichellis/extensions/block-weight/scripts/lora_block_weight.py new file mode 100644 index 0000000000000000000000000000000000000000..c8f7108b26b64bf2c2d854f536711efd2526a3cc --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/block-weight/scripts/lora_block_weight.py @@ -0,0 +1,744 @@ +import cv2 +import os +import gc +import re +import sys +import torch +import shutil +import math +import numpy as np +import gradio as gr +import os.path +import random +from pprint import pprint +import modules.ui +import modules.scripts as scripts +from PIL import Image, ImageFont, ImageDraw +import modules.shared as shared +from modules import devices, sd_models, images,extra_networks +from modules.shared import opts, state +from modules.processing import process_images, Processed + +lxyz = "" +lzyx = "" +prompts = "" +xyelem = "" +princ = False + +BLOCKID=["BASE","IN00","IN01","IN02","IN03","IN04","IN05","IN06","IN07","IN08","IN09","IN10","IN11","M00","OUT00","OUT01","OUT02","OUT03","OUT04","OUT05","OUT06","OUT07","OUT08","OUT09","OUT10","OUT11"] + +BLOCKS=["encoder", +"diffusion_model_input_blocks_0_", +"diffusion_model_input_blocks_1_", +"diffusion_model_input_blocks_2_", +"diffusion_model_input_blocks_3_", +"diffusion_model_input_blocks_4_", +"diffusion_model_input_blocks_5_", +"diffusion_model_input_blocks_6_", +"diffusion_model_input_blocks_7_", +"diffusion_model_input_blocks_8_", +"diffusion_model_input_blocks_9_", +"diffusion_model_input_blocks_10_", +"diffusion_model_input_blocks_11_", +"diffusion_model_middle_block_", +"diffusion_model_output_blocks_0_", +"diffusion_model_output_blocks_1_", +"diffusion_model_output_blocks_2_", +"diffusion_model_output_blocks_3_", +"diffusion_model_output_blocks_4_", +"diffusion_model_output_blocks_5_", +"diffusion_model_output_blocks_6_", +"diffusion_model_output_blocks_7_", +"diffusion_model_output_blocks_8_", +"diffusion_model_output_blocks_9_", +"diffusion_model_output_blocks_10_", +"diffusion_model_output_blocks_11_"] + +loopstopper = True + +ATYPES =["none","Block ID","values","seed","Original Weights","elements"] + +DEF_WEIGHT_PRESET = "\ +NONE:0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\n\ +ALL:1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1\n\ +INS:1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0\n\ +IND:1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0\n\ +INALL:1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0\n\ +MIDD:1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0\n\ +OUTD:1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0\n\ +OUTS:1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1\n\ +OUTALL:1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1\n\ +ALL0.5:0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5" + +class Script(modules.scripts.Script): + def title(self): + return "LoRA Block Weight" + + def show(self, is_img2img): + return modules.scripts.AlwaysVisible + + def ui(self, is_img2img): + import lora + LWEIGHTSPRESETS = DEF_WEIGHT_PRESET + + runorigin = scripts.scripts_txt2img.run + runorigini = scripts.scripts_img2img.run + + path_root = scripts.basedir() + extpath = os.path.join(path_root,"extensions","sd-webui-lora-block-weight","scripts", "lbwpresets.txt") + extpathe = os.path.join(path_root,"extensions","sd-webui-lora-block-weight","scripts", "elempresets.txt") + filepath = os.path.join(path_root,"scripts", "lbwpresets.txt") + filepathe = os.path.join(path_root,"scripts", "elempresets.txt") + + if os.path.isfile(filepath) and not os.path.isfile(extpath): + shutil.move(filepath,extpath) + + if os.path.isfile(filepathe) and not os.path.isfile(extpathe): + shutil.move(filepathe,extpathe) + + lbwpresets="" + + try: + with open(extpath,encoding="utf-8") as f: + lbwpresets = f.read() + except OSError as e: + lbwpresets=LWEIGHTSPRESETS + if not os.path.isfile(extpath): + try: + with open(extpath,mode = 'w',encoding="utf-8") as f: + f.write(lbwpresets) + except: + pass + + try: + with open(extpathe,encoding="utf-8") as f: + elempresets = f.read() + except OSError as e: + elempresets=ELEMPRESETS + if not os.path.isfile(extpathe): + try: + with open(extpathe,mode = 'w',encoding="utf-8") as f: + f.write(elempresets) + except: + pass + + loraratios=lbwpresets.splitlines() + lratios={} + for i,l in enumerate(loraratios): + if ":" not in l or not (l.count(",") == 16 or l.count(",") == 25) : continue + lratios[l.split(":")[0]]=l.split(":")[1] + ratiostags = [k for k in lratios.keys()] + ratiostags = ",".join(ratiostags) + + with gr.Accordion("LoRA Block Weight",open = False): + with gr.Row(): + with gr.Column(min_width = 50, scale=1): + lbw_useblocks = gr.Checkbox(value = True,label="Active",interactive =True,elem_id="lbw_active") + with gr.Column(scale=5): + bw_ratiotags= gr.TextArea(label="",value=ratiostags,visible =True,interactive =True,elem_id="lbw_ratios") + with gr.Accordion("XYZ plot",open = False): + gr.HTML(value='

    changeable blocks : BASE,IN00,IN01,IN02,IN03,IN04,IN05,IN06,IN07,IN08,IN09,IN10,IN11,M00,OUT00,OUT01,OUT02,OUT03,OUT04,OUT05,OUT06,OUT07,OUT08,OUT09,OUT10,OUT11

    ') + xyzsetting = gr.Radio(label = "Active",choices = ["Disable","XYZ plot","Effective Block Analyzer"], value ="Disable",type = "index") + with gr.Row(visible = False) as esets: + diffcol = gr.Radio(label = "diff image color",choices = ["black","white"], value ="black",type = "value",interactive =True) + revxy = gr.Checkbox(value = False,label="change X-Y",interactive =True,elem_id="lbw_changexy") + thresh = gr.Textbox(label="difference threshold",lines=1,value="20",interactive =True,elem_id="diff_thr") + xtype = gr.Dropdown(label="X Types ", choices=[x for x in ATYPES], value=ATYPES [2],interactive =True,elem_id="lbw_xtype") + xmen = gr.Textbox(label="X Values ",lines=1,value="0,0.25,0.5,0.75,1",interactive =True,elem_id="lbw_xmen") + ytype = gr.Dropdown(label="Y Types ", choices=[y for y in ATYPES], value=ATYPES [1],interactive =True,elem_id="lbw_ytype") + ymen = gr.Textbox(label="Y Values " ,lines=1,value="IN05-OUT05",interactive =True,elem_id="lbw_ymen") + ztype = gr.Dropdown(label="Z type ", choices=[z for z in ATYPES], value=ATYPES[0],interactive =True,elem_id="lbw_ztype") + zmen = gr.Textbox(label="Z values ",lines=1,value="",interactive =True,elem_id="lbw_zmen") + + exmen = gr.Textbox(label="Range",lines=1,value="0.5,1",interactive =True,elem_id="lbw_exmen",visible = False) + eymen = gr.Textbox(label="Blocks" ,lines=1,value="BASE,IN00,IN01,IN02,IN03,IN04,IN05,IN06,IN07,IN08,IN09,IN10,IN11,M00,OUT00,OUT01,OUT02,OUT03,OUT04,OUT05,OUT06,OUT07,OUT08,OUT09,OUT10,OUT11",interactive =True,elem_id="lbw_eymen",visible = False) + ecount = gr.Number(value=1, label="number of seed", interactive=True, visible = True) + + with gr.Accordion("Weights setting",open = True): + with gr.Row(): + reloadtext = gr.Button(value="Reload Presets",variant='primary',elem_id="lbw_reload") + reloadtags = gr.Button(value="Reload Tags",variant='primary',elem_id="lbw_reload") + savetext = gr.Button(value="Save Presets",variant='primary',elem_id="lbw_savetext") + openeditor = gr.Button(value="Open TextEditor",variant='primary',elem_id="lbw_openeditor") + lbw_loraratios = gr.TextArea(label="",value=lbwpresets,visible =True,interactive = True,elem_id="lbw_ratiospreset") + + with gr.Accordion("Elemental",open = False): + with gr.Row(): + e_reloadtext = gr.Button(value="Reload Presets",variant='primary',elem_id="lbw_reload") + e_savetext = gr.Button(value="Save Presets",variant='primary',elem_id="lbw_savetext") + e_openeditor = gr.Button(value="Open TextEditor",variant='primary',elem_id="lbw_openeditor") + elemsets = gr.Checkbox(value = False,label="print change",interactive =True,elem_id="lbw_print_change") + elemental = gr.TextArea(label="Identifer:BlockID:Elements:Ratio,...,separated by empty line ",value = elempresets,interactive =True,elem_id="element") + + d_true = gr.Checkbox(value = True,visible = False) + d_false = gr.Checkbox(value = False,visible = False) + + import subprocess + def openeditors(b): + path = extpath if b else extpathe + subprocess.Popen(['start', path], shell=True) + + def reloadpresets(isweight): + if isweight: + try: + with open(extpath,encoding="utf-8") as f: + return f.read() + except OSError as e: + pass + else: + try: + with open(extpath,encoding="utf-8") as f: + return f.read() + except OSError as e: + pass + + def tagdicter(presets): + presets=presets.splitlines() + wdict={} + for l in presets: + if ":" not in l or not (l.count(",") == 16 or l.count(",") == 25) : continue + w=[] + if ":" in l : + key = l.split(":",1)[0] + w = l.split(":",1)[1] + if len([w for w in w.split(",")]) == 17 or len([w for w in w.split(",")]) ==26: + wdict[key.strip()]=w + return ",".join(list(wdict.keys())) + + def savepresets(text,isweight): + if isweight: + with open(extpath,mode = 'w',encoding="utf-8") as f: + f.write(text) + else: + with open(extpathe,mode = 'w',encoding="utf-8") as f: + f.write(text) + + reloadtext.click(fn=reloadpresets,inputs=[d_true],outputs=[lbw_loraratios]) + reloadtags.click(fn=tagdicter,inputs=[lbw_loraratios],outputs=[bw_ratiotags]) + savetext.click(fn=savepresets,inputs=[lbw_loraratios,d_true],outputs=[]) + openeditor.click(fn=openeditors,inputs=[d_true],outputs=[]) + + e_reloadtext.click(fn=reloadpresets,inputs=[d_false],outputs=[elemental]) + e_savetext.click(fn=savepresets,inputs=[elemental,d_false],outputs=[]) + e_openeditor.click(fn=openeditors,inputs=[d_false],outputs=[]) + + def urawaza(active): + if active > 0: + for obj in scripts.scripts_txt2img.alwayson_scripts: + if "lora_block_weight" in obj.filename: + scripts.scripts_txt2img.selectable_scripts.append(obj) + scripts.scripts_txt2img.titles.append("LoRA Block Weight") + for obj in scripts.scripts_img2img.alwayson_scripts: + if "lora_block_weight" in obj.filename: + scripts.scripts_img2img.selectable_scripts.append(obj) + scripts.scripts_img2img.titles.append("LoRA Block Weight") + scripts.scripts_txt2img.run = newrun + scripts.scripts_img2img.run = newrun + if active == 1:return [*[gr.update(visible = True) for x in range(6)],*[gr.update(visible = False) for x in range(4)]] + else:return [*[gr.update(visible = False) for x in range(6)],*[gr.update(visible = True) for x in range(4)]] + else: + scripts.scripts_txt2img.run = runorigin + scripts.scripts_img2img.run = runorigini + return [*[gr.update(visible = True) for x in range(6)],*[gr.update(visible = False) for x in range(4)]] + + xyzsetting.change(fn=urawaza,inputs=[xyzsetting],outputs =[xtype,xmen,ytype,ymen,ztype,zmen,exmen,eymen,ecount,esets]) + + return lbw_loraratios,lbw_useblocks,xyzsetting,xtype,xmen,ytype,ymen,ztype,zmen,exmen,eymen,ecount,diffcol,thresh,revxy,elemental,elemsets + + def process(self, p, loraratios,useblocks,xyzsetting,xtype,xmen,ytype,ymen,ztype,zmen,exmen,eymen,ecount,diffcol,thresh,revxy,elemental,elemsets): + #print("self =",self,"p =",p,"presets =",loraratios,"useblocks =",useblocks,"xyzsettings =",xyzsetting,"xtype =",xtype,"xmen =",xmen,"ytype =",ytype,"ymen =",ymen,"ztype =",ztype,"zmen =",zmen) + #Note that this does not use the default arg syntax because the default args are supposed to be at the end of the function + if(loraratios == None): + loraratios = DEF_WEIGHT_PRESET + if(useblocks == None): + useblocks = True + + if useblocks: + loraratios=loraratios.splitlines() + elemental = elemental.split("\n\n") if elemental is not None else [] + lratios={} + elementals={} + for l in loraratios: + if ":" not in l or not (l.count(",") == 16 or l.count(",") == 25) : continue + l0=l.split(":",1)[0] + lratios[l0.strip()]=l.split(":",1)[1] + for e in elemental: + e0=e.split(":",1)[0] + elementals[e0.strip()]=e.split(":",1)[1] + if elemsets : print(xyelem) + if xyzsetting and "XYZ" in p.prompt: + lratios["XYZ"] = lxyz + lratios["ZYX"] = lzyx + if xyelem != "": + if "XYZ" in elementals.keys(): + elementals["XYZ"] = elementals["XYZ"] + ","+ xyelem + else: + elementals["XYZ"] = xyelem + self.lratios = lratios + self.elementals = elementals + global princ + princ = elemsets + return + + def before_process_batch(self, p, loraratios,useblocks,xyzsetting,xtype,xmen,ytype,ymen,ztype,zmen,exmen,eymen,ecount,diffcol,thresh,revxy,elemental,elemsets,**kwargs): + if useblocks: + global prompts + prompts = kwargs["prompts"].copy() + + def process_batch(self, p, loraratios,useblocks,xyzsetting,xtype,xmen,ytype,ymen,ztype,zmen,exmen,eymen,ecount,diffcol,thresh,revxy,elemental,elemsets,**kwargs): + if useblocks: + o_prompts = [p.prompt] + for prompt in prompts: + if "0: + import lora + loraratios=presets.splitlines() + lratios={} + for l in loraratios: + if ":" not in l or not (l.count(",") == 16 or l.count(",") == 25) : continue + l0=l.split(":",1)[0] + lratios[l0.strip()]=l.split(":",1)[1] + + if "XYZ" in p.prompt: + base = lratios["XYZ"] if "XYZ" in lratios.keys() else "1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1" + else: return + + if xyzsetting > 1: + xmen,ymen = exmen,eymen + xtype,ytype = "values","ID" + ebase = xmen.split(",")[1] + ebase = [ebase.strip()]*26 + base = ",".join(ebase) + ztype = "" + if ecount > 1: + ztype = "seed" + zmen = ",".join([str(random.randrange(4294967294)) for x in range(int(ecount))]) + + #ATYPES =["none","Block ID","values","seed","Base Weights"] + + def dicedealer(am): + for i,a in enumerate(am): + if a =="-1": am[i] = str(random.randrange(4294967294)) + print(f"the die was thrown : {am}") + + if p.seed == -1: p.seed = str(random.randrange(4294967294)) + + #print(f"xs:{xmen},ys:{ymen},zs:{zmen}") + + def adjuster(a,at): + if "none" in at:a = "" + a = [a.strip() for a in a.split(',')] + if "seed" in at:dicedealer(a) + return a + + xs = adjuster(xmen,xtype) + ys = adjuster(ymen,ytype) + zs = adjuster(zmen,ztype) + + ids = alpha =seed = "" + p.batch_size = 1 + + print(f"xs:{xs},ys:{ys},zs:{zs}") + + images = [] + + def weightsdealer(alpha,ids,base): + blockid17=["BASE","IN01","IN02","IN04","IN05","IN07","IN08","M00","OUT03","OUT04","OUT05","OUT06","OUT07","OUT08","OUT09","OUT10","OUT11"] + blockid26=["BASE","IN00","IN01","IN02","IN03","IN04","IN05","IN06","IN07","IN08","IN09","IN10","IN11","M00","OUT00","OUT01","OUT02","OUT03","OUT04","OUT05","OUT06","OUT07","OUT08","OUT09","OUT10","OUT11"] + #print(f"weights from : {base}") + ids = [z.strip() for z in ids.split(' ')] + weights_t = [w.strip() for w in base.split(',')] + blockid = blockid17 if len(weights_t) ==17 else blockid26 + if ids[0]!="NOT": + flagger=[False]*len(weights_t) + changer = True + else: + flagger=[True]*len(weights_t) + changer = False + for id in ids: + if id =="NOT":continue + if "-" in id: + it = [it.strip() for it in id.split('-')] + if blockid.index(it[1]) > blockid.index(it[0]): + flagger[blockid.index(it[0]):blockid.index(it[1])+1] = [changer]*(blockid.index(it[1])-blockid.index(it[0])+1) + else: + flagger[blockid.index(it[1]):blockid.index(it[0])+1] = [changer]*(blockid.index(it[0])-blockid.index(it[1])+1) + else: + flagger[blockid.index(id)] =changer + for i,f in enumerate(flagger): + if f:weights_t[i]=alpha + outext = ",".join(weights_t) + #print(f"weights changed: {outext}") + return outext + + def xyzdealer(a,at): + nonlocal ids,alpha,p,base,c_base + if "ID" in at:return + if "values" in at:alpha = a + if "seed" in at: + p.seed = int(a) + if "Weights" in at:base =c_base = lratios[a] + if "elements" in at: + global xyelem + xyelem = a + + grids = [] + images =[] + + totalcount = len(xs)*len(ys)*len(zs) if xyzsetting < 2 else len(xs)*len(ys)*len(zs) //2 +1 + shared.total_tqdm.updateTotal(totalcount) + xc = yc =zc = 0 + state.job_count = totalcount + totalcount = len(xs)*len(ys)*len(zs) + c_base = base + + for z in zs: + images = [] + yc = 0 + xyzdealer(z,ztype) + for y in ys: + xc = 0 + xyzdealer(y,ytype) + for x in xs: + xyzdealer(x,xtype) + if "ID" in xtype: + if "values" in ytype:c_base = weightsdealer(y,x,base) + if "values" in ztype:c_base = weightsdealer(z,x,base) + if "ID" in ytype: + if "values" in xtype:c_base = weightsdealer(x,y,base) + if "values" in ztype:c_base = weightsdealer(z,y,base) + if "ID" in ztype: + if "values" in xtype:c_base = weightsdealer(x,z,base) + if "values" in ytype:c_base = weightsdealer(y,z,base) + + print(f"X:{xtype}, {x},Y: {ytype},{y}, Z:{ztype},{z}, base:{c_base} ({len(xs)*len(ys)*zc + yc*len(xs) +xc +1}/{totalcount})") + + global lxyz,lzyx + lxyz = c_base + + cr_base = c_base.split(",") + cr_base_t=[] + for x in cr_base: + if not identifier(x): + cr_base_t.append(str(1-float(x))) + else: + cr_base_t.append(x) + lzyx = ",".join(cr_base_t) + + if not(xc == 1 and not (yc ==0 ) and xyzsetting >1): + lora.loaded_loras.clear() + processed:Processed = process_images(p) + images.append(processed.images[0]) + xc += 1 + yc += 1 + zc += 1 + origin = loranames(processed.all_prompts) + ", "+ znamer(ztype,z,base) + images,xst,yst = effectivechecker(images,xs.copy(),ys.copy(),diffcol,thresh,revxy) if xyzsetting >1 else (images,xs.copy(),ys.copy()) + grids.append(smakegrid(images,xst,yst,origin,p)) + processed.images= grids + lora.loaded_loras.clear() + return processed + +def identifier(char): + return char[0] in ["R", "U", "X"] + +def znamer(at,a,base): + if "ID" in at:return f"Block : {a}" + if "values" in at:return f"value : {a}" + if "seed" in at:return f"seed : {a}" + if "Weights" in at:return f"original weights :\n {base}" + else: return "" + +def loranames(all_prompts): + _, extra_network_data = extra_networks.parse_prompts(all_prompts[0:1]) + calledloras = extra_network_data["lora"] if "lyco" not in extra_network_data.keys() else extra_network_data["lyco"] + names = "" + for called in calledloras: + if len(called.items) <3:continue + names += called.items[0] + return names + +def lycodealer(called): + for item in called.items[1:]: + if "lbw" in item: + called.items[2] = item.split("=")[1] + return called + +def loradealer(prompts,lratios,elementals): + _, extra_network_data = extra_networks.parse_prompts(prompts) + moduletypes = extra_network_data.keys() + + for ltype in moduletypes: + lorans = [] + lorars = [] + multipliers = [] + elements = [] + if not (ltype == "lora" or ltype == "lyco") : continue + for called in extra_network_data[ltype]: + if ltype == "lyco": + called = lycodealer(called) + multiple = float(called.items[1]) + multipliers.append(multiple) + if len(called.items) <3: + continue + lorans.append(called.items[0]) + if called.items[2] in lratios or called.items[2].count(",") ==16 or called.items[2].count(",") ==25: + wei = lratios[called.items[2]] if called.items[2] in lratios else called.items[2] + ratios = [w.strip() for w in wei.split(",")] + for i,r in enumerate(ratios): + if r =="R": + ratios[i] = round(random.random(),3) + elif r == "U": + ratios[i] = round(random.uniform(-0.5,1.5),3) + elif r[0] == "X": + base = called.items[3] if len(called.items) >= 4 else 1 + ratios[i] = getinheritedweight(base, r) + else: + ratios[i] = float(r) + print(f"LoRA Block weight ({ltype}): {called.items[0]}: {multiple} x {[x for x in ratios]}") + if len(ratios)==17: + ratios = [ratios[0]] + [1] + ratios[1:3]+ [1] + ratios[3:5]+[1] + ratios[5:7]+[1,1,1] + [ratios[7]] + [1,1,1] + ratios[8:] + lorars.append(ratios) + if len(called.items) > 3: + if called.items[3] in elementals: + elements.append(elementals[called.items[3]]) + else: + elements.append(called.items[3]) + else: + elements.append("") + if len(lorars) > 0: load_loras_blocks(lorans,lorars,multipliers,elements,ltype) + +def isfloat(t): + try: + float(t) + return True + except: + return False + +re_inherited_weight = re.compile(r"X([+-])?([\d.]+)?") + +def getinheritedweight(weight, offset): + match = re_inherited_weight.search(offset) + if match.group(1) == "+": + return float(weight) + float(match.group(2)) + elif match.group(1) == "-": + return float(weight) - float(match.group(2)) + else: + return float(weight) + +def load_loras_blocks(names, lwei,multipliers,elements = [],ltype = "lora"): + if "lora" == ltype: + print(names,lwei,elements) + import lora + for l, loaded in enumerate(lora.loaded_loras): + for n, name in enumerate(names): + if name == loaded.name: + lbw(lora.loaded_loras[l],lwei[n],elements[n]) + lora.loaded_loras[l].name = lora.loaded_loras[l].name +"added_by_lora_block_weight"+ str(random.random()) + + elif "lyco" == ltype: + import lycoris as lycomo + for l, loaded in enumerate(lycomo.loaded_lycos): + for n, name in enumerate(names): + if name == loaded.name: + lbw(lycomo.loaded_lycos[l],lwei[n],elements[n]) + lycomo.loaded_lycos[l].name = lycomo.loaded_lycos[l].name +"added_by_lora_block_weight"+ str(random.random()) + +def smakegrid(imgs,xs,ys,currentmodel,p): + ver_texts = [[images.GridAnnotation(y)] for y in ys] + hor_texts = [[images.GridAnnotation(x)] for x in xs] + + w, h = imgs[0].size + grid = Image.new('RGB', size=(len(xs) * w, len(ys) * h), color='black') + + for i, img in enumerate(imgs): + grid.paste(img, box=(i % len(xs) * w, i // len(xs) * h)) + + grid = images.draw_grid_annotations(grid,w, h, hor_texts, ver_texts) + grid = draw_origin(grid, currentmodel,w*len(xs),h*len(ys),w) + if opts.grid_save: + images.save_image(grid, opts.outdir_txt2img_grids, "xy_grid", extension=opts.grid_format, prompt=p.prompt, seed=p.seed, grid=True, p=p) + + return grid + +def get_font(fontsize): + path_root = scripts.basedir() + fontpath = os.path.join(path_root,"extensions","sd-webui-lora-block-weight","scripts", "Roboto-Regular.ttf") + try: + return ImageFont.truetype(opts.font or fontpath, fontsize) + except Exception: + return ImageFont.truetype(fontpath, fontsize) + +def draw_origin(grid, text,width,height,width_one): + grid_d= Image.new("RGB", (grid.width,grid.height), "white") + grid_d.paste(grid,(0,0)) + + d= ImageDraw.Draw(grid_d) + color_active = (0, 0, 0) + fontsize = (width+height)//25 + fnt = get_font(fontsize) + + if grid.width != width_one: + while d.multiline_textsize(text, font=fnt)[0] > width_one*0.75 and fontsize > 0: + fontsize -=1 + fnt = get_font(fontsize) + d.multiline_text((0,0), text, font=fnt, fill=color_active,align="center") + return grid_d + +def newrun(p, *args): + script_index = args[0] + + if args[0] ==0: + script = None + for obj in scripts.scripts_txt2img.alwayson_scripts: + if "lora_block_weight" in obj.filename: + script = obj + script_args = args[script.args_from:script.args_to] + else: + script = scripts.scripts_txt2img.selectable_scripts[script_index-1] + + if script is None: + return None + + script_args = args[script.args_from:script.args_to] + + processed = script.run(p, *script_args) + + shared.total_tqdm.clear() + + return processed + +def effectivechecker(imgs,ss,ls,diffcol,thresh,revxy): + diffs = [] + outnum =[] + imgs[0],imgs[1] = imgs[1],imgs[0] + im1 = np.array(imgs[0]) + + for i in range(len(imgs)-1): + im2 = np.array(imgs[i+1]) + + abs_diff = cv2.absdiff(im2 , im1) + + abs_diff_t = cv2.threshold(abs_diff, int(thresh), 255, cv2.THRESH_BINARY)[1] + res = abs_diff_t.astype(np.uint8) + percentage = (np.count_nonzero(res) * 100)/ res.size + if "white" in diffcol: abs_diff = cv2.bitwise_not(abs_diff) + outnum.append(percentage) + + abs_diff = Image.fromarray(abs_diff) + + diffs.append(abs_diff) + + outs = [] + for i in range(len(ls)): + ls[i] = ls[i] + "\n Diff : " + str(round(outnum[i],3)) + "%" + + if not revxy: + for diff,img in zip(diffs,imgs[1:]): + outs.append(diff) + outs.append(img) + outs.append(imgs[0]) + ss = ["diff",ss[0],"source"] + return outs,ss,ls + else: + outs = [imgs[0]]*len(diffs) + imgs[1:]+ diffs + ss = ["source",ss[0],"diff"] + return outs,ls,ss + +def lbw(lora,lwei,elemental): + elemental = elemental.split(",") + for key in lora.modules.keys(): + ratio = 1 + picked = False + errormodules = [] + + for i,block in enumerate(BLOCKS): + if block in key: + ratio = lwei[i] + picked = True + currentblock = i + + if not picked: + errormodules.append(key) + + if len(elemental) > 0: + skey = key + BLOCKID[currentblock] + for d in elemental: + if d.count(":") != 2 :continue + dbs,dws,dr = (hyphener(d.split(":")[0]),d.split(":")[1],d.split(":")[2]) + dbs,dws = (dbs.split(" "), dws.split(" ")) + dbn,dbs = (True,dbs[1:]) if dbs[0] == "NOT" else (False,dbs) + dwn,dws = (True,dws[1:]) if dws[0] == "NOT" else (False,dws) + flag = dbn + for db in dbs: + if db in skey: + flag = not dbn + if flag:flag = dwn + else:continue + for dw in dws: + if dw in skey: + flag = not dwn + if flag: + dr = float(dr) + if princ :print(dbs,dws,key,dr) + ratio = dr + + ltype = type(lora.modules[key]).__name__ + set = False + if ltype in LORAANDSOON.keys(): + setattr(lora.modules[key],LORAANDSOON[ltype],torch.nn.Parameter(getattr(lora.modules[key],LORAANDSOON[ltype]) * ratio)) + #print(ltype) + set = True + else: + if hasattr(lora.modules[key],"up_model"): + lora.modules[key].up_model.weight= torch.nn.Parameter(lora.modules[key].up_model.weight *ratio) + #print("LoRA using LoCON") + set = True + else: + lora.modules[key].up.weight= torch.nn.Parameter(lora.modules[key].up.weight *ratio) + #print("LoRA") + set = True + if not set : + print("unkwon LoRA") + + lora.name = lora.name +"added_by_lora_block_weight"+ str(random.random()) + if len(errormodules) > 0: + print(errormodules) + return lora + +LORAANDSOON = { + "LoraHadaModule" : "w1a", + "LycoHadaModule" : "w1a", + "FullModule" : "weight", + "IA3Module" : "w", + "LoraKronModule" : "w1", + "LycoKronModule" : "w1", +} + +def hyphener(t): + t = t.split(" ") + for i,e in enumerate(t): + if "-" in e: + e = e.split("-") + if BLOCKID.index(e[1]) > BLOCKID.index(e[0]): + t[i] = " ".join(BLOCKID[BLOCKID.index(e[0]):BLOCKID.index(e[1])+1]) + else: + t[i] = " ".join(BLOCKID[BLOCKID.index(e[1]):BLOCKID.index(e[0])+1]) + return " ".join(t) + +ELEMPRESETS="\ +ATTNDEEPON:IN05-OUT05:attn:1\n\n\ +ATTNDEEPOFF:IN05-OUT05:attn:0\n\n\ +PROJDEEPOFF:IN05-OUT05:proj:0\n\n\ +XYZ:::1" diff --git a/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/README.md b/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/README.md new file mode 100644 index 0000000000000000000000000000000000000000..fe2b51bd4c11fe215ba02f16c0f18c3141072053 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/README.md @@ -0,0 +1,2 @@ +# sd-civitai-browser +An extension to help download models from CivitAi without leaving WebUI diff --git a/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/install.py b/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/install.py new file mode 100644 index 0000000000000000000000000000000000000000..b98ec82b3a2f6cb6db480093e17eb1b36b4f6166 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/install.py @@ -0,0 +1,13 @@ +# installer script for some PyPI packages we need... + +import launch +pkgs = [ + {"fake_useragent": "fake-useragent"}, + {"PIL": "PIL"}, + {"requests": "requests"} + ] + +for pkg in pkgs: + key, val = next(iter(pkg.items())) + if not launch.is_installed(key): + launch.run_pip(f'install {val}', "requirements for CivitAI Browser") diff --git a/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/scripts/civitai-api.py b/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/scripts/civitai-api.py new file mode 100644 index 0000000000000000000000000000000000000000..a50cc39a5d945836456dd66cb5d9a066cac5db42 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/ci-browser/scripts/civitai-api.py @@ -0,0 +1,489 @@ +import requests +from PIL import Image +from io import BytesIO +from fake_useragent import UserAgent as ua +import json +import modules.scripts as scripts +import gradio as gr +from modules import script_callbacks +import time +import threading +import urllib.request +import urllib.error +import os +from tqdm import tqdm +import re +from requests.exceptions import ConnectionError +import urllib.request + +PLACEHOLDER = "" + +def download_file(url, file_name): + # Maximum number of retries + max_retries = 5 + + # Delay between retries (in seconds) + retry_delay = 10 + + while True: + # Check if the file has already been partially downloaded + if os.path.exists(file_name): + # Get the size of the downloaded file + downloaded_size = os.path.getsize(file_name) + + # Set the range of the request to start from the current + # size of the downloaded file + headers = {"Range": f"bytes={downloaded_size}-"} + else: + downloaded_size = 0 + headers = {} + + # Split filename from included path + tokens = re.split(re.escape('\\'), file_name) + file_name_display = tokens[-1] + + # Initialize the progress bar + progress = tqdm(total=1000000000, unit="B", unit_scale=True, + desc=f"Downloading {file_name_display}", + initial=downloaded_size, leave=False) + + # Open a local file to save the download + with open(file_name, "ab") as f: + while True: + try: + # Send a GET request to the URL and save the response to the local file + response = requests.get(url, headers=headers, stream=True) + + # Get the total size of the file + total_size = int(response.headers.get("Content-Length", 0)) + + # Update the total size of the progress bar if the `Content-Length` header is present + if total_size == 0: + total_size = downloaded_size + progress.total = total_size + + # Write the response to the local file and update the progress bar + for chunk in response.iter_content(chunk_size=1024): + if chunk: # filter out keep-alive new chunks + f.write(chunk) + progress.update(len(chunk)) + + downloaded_size = os.path.getsize(file_name) + # Break out of the loop if the download is successful + break + except ConnectionError as e: + # Decrement the number of retries + max_retries -= 1 + + # If there are no more retries, raise the exception + if max_retries == 0: + raise e + + # Wait for the specified delay before retrying + time.sleep(retry_delay) + + # Close the progress bar + progress.close() + downloaded_size = os.path.getsize(file_name) + # Check if the download was successful + if downloaded_size >= total_size: + print(f"{file_name_display} successfully downloaded.") + break + else: + print(f"Error: File download failed. Retrying... {file_name_display}") + +def make_new_folder(content_type, use_new_folder, model_name, lora_old): + if content_type == "Checkpoint": + folder = "models/Stable-diffusion" + new_folder = "models/Stable-diffusion/new" + elif content_type == "Hypernetwork": + folder = "models/hypernetworks" + new_folder = "models/hypernetworks/new" + elif content_type == "TextualInversion": + folder = "embeddings" + new_folder = "embeddings/new" + elif content_type == "AestheticGradient": + folder = "extensions/stable-diffusion-webui-aesthetic-gradients/aesthetic_embeddings" + new_folder = "extensions/stable-diffusion-webui-aesthetic-gradients/aesthetic_embeddings/new" + elif content_type == "VAE": + folder = "models/VAE" + new_folder = "models/VAE/new" + elif content_type == "LORA": + if lora_old: + folder = "extensions/sd-webui-additional-networks/models/lora" + new_folder = "extensions/sd-webui-additional-networks/models/lora/new" + else: + folder = "models/Lora" + new_folder = "models/Lora/new" + elif content_type == "LoCon": + if lora_old: + folder = "extensions/sd-webui-additional-networks/models/lora" + new_folder = "extensions/sd-webui-additional-networks/models/lora/new" + else: + folder = "models/Lora" + new_folder = "models/Lora/new" + if content_type == "TextualInversion" or content_type == "VAE" or \ + content_type == "AestheticGradient": + if use_new_folder: + model_folder = new_folder + if not os.path.exists(new_folder): + os.makedirs(new_folder) + + else: + model_folder = folder + if not os.path.exists(model_folder): + os.makedirs(model_folder) + else: + if use_new_folder: + model_folder = os.path.join(new_folder,model_name.replace(" ","_").replace("(","").replace(")","").replace("|","").replace(":","-")) + if not os.path.exists(new_folder): + os.makedirs(new_folder) + if not os.path.exists(model_folder): + os.makedirs(model_folder) + + else: + model_folder = os.path.join(folder,model_name.replace(" ","_").replace("(","").replace(")","").replace("|","").replace(":","-")) + if not os.path.exists(model_folder): + os.makedirs(model_folder) + return model_folder + +def download_file_thread(url, file_name, content_type, use_new_folder, model_name, lora_old): + model_folder = make_new_folder(content_type, use_new_folder, model_name, lora_old) + + path_to_new_file = os.path.join(model_folder, file_name) + + thread = threading.Thread(target=download_file, args=(url, path_to_new_file)) + + # Start the thread + thread.start() + +def save_text_file(file_name, content_type, use_new_folder, trained_words, model_name, lora_old): + model_folder = make_new_folder(content_type, use_new_folder, model_name, lora_old) + + path_to_new_file = os.path.join(model_folder, file_name.replace(".ckpt",".txt").replace(".safetensors",".txt").replace(".pt",".txt").replace(".yaml",".txt")) + if not os.path.exists(path_to_new_file): + with open(path_to_new_file, 'w') as f: + f.write(trained_words) + if os.path.getsize(path_to_new_file) == 0: + print("Current model doesn't have any trained tags") + else: + print("Trained tags saved as text file") + +# Set the URL for the API endpoint +api_url = "https://civitai.com/api/v1/models?limit=50" +json_data = None + +def api_to_data(content_type, sort_type, use_search_term, search_term=None): + if use_search_term and search_term: + search_term = search_term.replace(" ","%20") + return request_civit_api(f"{api_url}&types={content_type}&sort={sort_type}&query={search_term}") + else: + return request_civit_api(f"{api_url}&types={content_type}&sort={sort_type}") + +def api_next_page(next_page_url=None): + global json_data + try: json_data['metadata']['nextPage'] + except: return + if json_data['metadata']['nextPage'] is not None: + next_page_url = json_data['metadata']['nextPage'] + if next_page_url is not None: + return request_civit_api(next_page_url) + +def update_next_page(show_nsfw): + global json_data + json_data = api_next_page() + model_dict = {} + try: json_data['items'] + except TypeError: return gr.Dropdown.update(choices=[], value=None) + if show_nsfw: + for item in json_data['items']: + model_dict[item['name']] = item['name'] + else: + for item in json_data['items']: + temp_nsfw = item['nsfw'] + if not temp_nsfw: + model_dict[item['name']] = item['name'] + return gr.Dropdown.update(choices=[PLACEHOLDER] + [v for k, v in model_dict.items()], value=PLACEHOLDER), gr.Dropdown.update(choices=[], value=None) + + +def update_model_list(content_type, sort_type, use_search_term, search_term, show_nsfw): + global json_data + json_data = api_to_data(content_type, sort_type, use_search_term, search_term) + model_dict = {} + if show_nsfw: + for item in json_data['items']: + model_dict[item['name']] = item['name'] + else: + for item in json_data['items']: + temp_nsfw = item['nsfw'] + if not temp_nsfw: + model_dict[item['name']] = item['name'] + return gr.Dropdown.update(choices=[PLACEHOLDER] + [v for k, v in model_dict.items()], value=PLACEHOLDER), gr.Dropdown.update(choices=[], value=None) + +def update_model_versions(model_name=None): + if model_name is not None and model_name != PLACEHOLDER: + global json_data + versions_dict = {} + for item in json_data['items']: + if item['name'] == model_name: + + for model in item['modelVersions']: + versions_dict[model['name']] = item["name"] + return gr.Dropdown.update(choices=[PLACEHOLDER] + [k + ' - ' + v for k, v in versions_dict.items()], value=PLACEHOLDER) + else: + return gr.Dropdown.update(choices=[], value=None) + +def update_dl_url(model_name=None, model_version=None, model_filename=None): + if model_filename: + global json_data + dl_dict = {} + dl_url = None + model_version = model_version.replace(f' - {model_name}','').strip() + for item in json_data['items']: + if item['name'] == model_name: + for model in item['modelVersions']: + if model['name'] == model_version: + for file in model['files']: + if file['name'] == model_filename: + dl_url = file['downloadUrl'] + return gr.Textbox.update(value=dl_url) + else: + return gr.Textbox.update(value=None) + +def update_model_info(model_name=None, model_version=None): + if model_name and model_version and model_name != PLACEHOLDER and model_version != PLACEHOLDER: + model_version = model_version.replace(f' - {model_name}','').strip() + global json_data + output_html = "" + output_training = "" + img_html = "" + model_desc = "" + dl_dict = {} + for item in json_data['items']: + if item['name'] == model_name: + model_uploader = item['creator']['username'] + if item['description']: + model_desc = item['description'] + for model in item['modelVersions']: + if model['name'] == model_version: + if model['trainedWords']: + output_training = ", ".join(model['trainedWords']) + + for file in model['files']: + dl_dict[file['name']] = file['downloadUrl'] + + model_url = model['downloadUrl'] + #model_filename = model['files']['name'] + + img_html = '
    ' + for pic in model['images']: + img_html = img_html + f'' + img_html = img_html + '
    ' + output_html = f"

    Model: {model_name}
    Version: {model_version}
    Uploaded by: {model_uploader}

    Download Here



    {model_desc}
    {img_html}
    " + + return gr.HTML.update(value=output_html), gr.Textbox.update(value=output_training), gr.Dropdown.update(choices=[PLACEHOLDER] + [k for k, v in dl_dict.items()], value=PLACEHOLDER) + else: + return gr.HTML.update(value=None), gr.Textbox.update(value=None), gr.Dropdown.update(choices=[], value=None) + + +def request_civit_api(api_url=None): + # Make a GET request to the API + response = requests.get(api_url) + + # Check the status code of the response + if response.status_code != 200: + print("Request failed with status code: {}".format(response.status_code)) + exit() + + data = json.loads(response.text) + return data + +#from https://github.com/thetrebor/sd-civitai-browser/blob/add-download-images/scripts/civitai-api.py +def update_everything(list_models, list_versions, model_filename, dl_url): + (a, d, f) = update_model_info(list_models, list_versions) + dl_url = update_dl_url(list_models, list_versions, f['value']) + return (a, d, f, list_versions, list_models, dl_url) + +def save_image_files(preview_image_html, model_filename, content_type, use_new_folder, list_models, lora_old): + print("Save Images Clicked") + model_folder = make_new_folder(content_type, use_new_folder, list_models, lora_old) + + img_urls = re.findall(r'src=[\'"]?([^\'" >]+)', preview_image_html) + + name = os.path.splitext(model_filename)[0] + assert(name != ""), "Please select a Model Filename to download" + current_directory = os.getcwd() + while os.path.basename(current_directory) != "stable-diffusion-webui": + current_directory = os.path.dirname(current_directory) + new_model_folder = os.path.join(current_directory, model_folder) + # new_model_folder = os.path.join(current_directory,list_models.replace(" ","_").replace("(","").replace(")","").replace("|","").replace(":","-")) + + headers = {"User-Agent": str(ua.random)} + print(img_urls) + + for i, img_url in enumerate(img_urls): + filename = f'{name}_{i}.png' + # img_url = img_url.replace("https", "http").replace("=","%3D") + + print(f'Downloading {img_url} to {filename}') + try: + with requests.get(img_url, headers) as url: + with open(os.path.join(new_model_folder, filename), 'wb') as f: + with Image.open(BytesIO(url.content)) as save_me: + save_me.save(f) + print(f'Downloaded {img_url}') + # with urllib.request.urlretrieve(img_url, os.path.join(model_folder, filename)) as dl: + + except urllib.error.URLError as e: + print(f'Error: {e.reason}') + + finally: + print("Images downloaded.") + + if os.path.exists(os.path.join(new_model_folder, f'{name}_0.png')): + with open(os.path.join(new_model_folder, f'{name}_0.png'), 'rb') as f_in: + with open(os.path.join(new_model_folder, f'{name}.png'), 'wb') as f_out: + f_out.write(f_in.read()) + +def on_ui_tabs(): + with gr.Blocks() as civitai_interface: + with gr.Row(): + with gr.Column(scale=2): + content_type = gr.Radio(label='Content type:', choices=["Checkpoint","Hypernetwork","TextualInversion","AestheticGradient", "VAE", "LORA", "LoCon"], value="Checkpoint", type="value") + with gr.Column(scale=2): + sort_type = gr.Radio(label='Sort List by:', choices=["Newest","Most Downloaded","Highest Rated","Most Liked"], value="Newest", type="value") + with gr.Column(scale=1): + show_nsfw = gr.Checkbox(label="Show NSFW", value=True) + with gr.Row(): + use_search_term = gr.Checkbox(label="Search by term?", value=False) + search_term = gr.Textbox(label="Search Term", interactive=True, lines=1) + with gr.Row(): + get_list_from_api = gr.Button(label="Get List", value="Get List") + get_next_page = gr.Button(value="Next Page") + with gr.Row(): + list_models = gr.Dropdown(label="Model", choices=[], interactive=True, elem_id="quicksettings", value=None) + list_versions = gr.Dropdown(label="Version", choices=[], interactive=True, elem_id="quicksettings", value=None) + with gr.Row(): + txt_list = "" + dummy = gr.Textbox(label='Trained Tags (if any)', value=f'{txt_list}', interactive=True, lines=1) + model_filename = gr.Dropdown(label="Model Filename", choices=[], interactive=True, value=None) + dl_url = gr.Textbox(label="Download Url", interactive=False, value=None) + with gr.Row(): + update_info = gr.Button(value='1st - Get Model Info') + save_text = gr.Button(value="2nd - Save Trained Tags as Text") + save_images = gr.Button(value="3rd - Save Images") + download_model = gr.Button(value="4th - Download Model") + with gr.Row(): + save_model_in_new = gr.Checkbox(label="Save Model to new folder", value=False) + old_lora = gr.Checkbox(label="Save LoRA to additional-networks", value=True) + with gr.Row(): + preview_image_html = gr.HTML() + save_text.click( + fn=save_text_file, + inputs=[ + model_filename, + content_type, + save_model_in_new, + dummy, + list_models, + old_lora, + ], + outputs=[] + ) + save_images.click( + fn=save_image_files, + inputs=[ + preview_image_html, + model_filename, + content_type, + save_model_in_new, + list_models, + old_lora, + ], + outputs=[] + ) + download_model.click( + fn=download_file_thread, + inputs=[ + dl_url, + model_filename, + content_type, + save_model_in_new, + list_models, + old_lora, + ], + outputs=[] + ) + get_list_from_api.click( + fn=update_model_list, + inputs=[ + content_type, + sort_type, + use_search_term, + search_term, + show_nsfw, + ], + outputs=[ + list_models, + list_versions, + ] + ) + update_info.click( + fn=update_everything, + #fn=update_model_info, + inputs=[ + list_models, + list_versions, + model_filename, + dl_url + ], + outputs=[ + preview_image_html, + dummy, + model_filename, + list_versions, + list_models, + dl_url + ] + ) + list_models.change( + fn=update_model_versions, + inputs=[ + list_models, + ], + outputs=[ + list_versions, + ] + ) + + list_versions.change( + fn=update_model_info, + inputs=[ + list_models, + list_versions, + ], + outputs=[ + preview_image_html, + dummy, + model_filename, + ] + ) + model_filename.change( + fn=update_dl_url, + inputs=[list_models, list_versions, model_filename,], + outputs=[dl_url,] + ) + get_next_page.click( + fn=update_next_page, + inputs=[ + show_nsfw, + ], + outputs=[ + list_models, + list_versions, + ] + ) + + return (civitai_interface, "CivitAi", "civitai_interface"), + +script_callbacks.on_ui_tabs(on_ui_tabs) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.env.example b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.env.example new file mode 100644 index 0000000000000000000000000000000000000000..95a93366aef0424d96fd1e8e566e9d2737ebd3a8 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.env.example @@ -0,0 +1,33 @@ +# This document is used for additional control over the security and privacy of IIB. By default, IIB is already sufficiently secure, and you do not need to take any additional actions. +# Copy this file and rename it to ".env" . Then, fill in the necessary values for your specific use case. +# Remember to never share your .env file with anyone else as it may contain sensitive information. + +# This attribute is used for authentication. If you input a key here, it will be validated for authentication purposes. +# It will be prompted to enter your key when you open the extension. If the authentication fails, all your requests will be rejected. +IIB_SECRET_KEY= + +# Configuring the server-side language for this extension, +# including the tab title and most of the server-side error messages returned. Options are 'zh', 'en', or 'auto'. +# If you want to configure the language for the front-end pages, please set it on the extension's global settings page. +IIB_SERVER_LANG=auto + + +# ---------------------------- ACCESS_CONTROL ---------------------------- + +# Used to configure whether to enable access control to the file system. +# If enabled, only access to the provided pre-set folders (including those provided by sd-webui and manually \ +# added to Quick Move or specified via IIB_ACCESS_CONTROL_ALLOWED_PATHS) will be allowed. +# The available options are 'enable', 'disable', and 'auto'. +# The default value is 'auto', which will be determined based on the command-line parameters used to start sd-webui (such as --server-name, --share, --listen). +IIB_ACCESS_CONTROL=auto + +# This variable is used to define a list of allowed paths for the application to access when access control mode is enabled. +# It can be set to a comma-separated string of file paths or directory paths, representing the resources that are allowed to be accessed by the application. +# In addition, if sd_webui_config or sd_webui_dir has been configured, or if you're running this repository as an extension of sd-webui, +# you can use the following shortcuts (txt2img, img2img, extra, save) as values for the ALLOWED_PATHS variable. +# IIB_ACCESS_CONTROL_ALLOWED_PATHS=save,extra,/output ...etc + +# This variable is used to control fine-grained access control for different types of requests, but only if access control mode is enabled. +# It can be set to a string value that represents a specific permission or set of permissions, such as "read-only", "write-only", "read-write", or "no-access". +# This variable can be used to restrict access to certain API endpoints or data sources based on the permissions required by the user. +# IIB_ACCESS_CONTROL_PERMISSION=read-write diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.github/FUNDING.yml b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.github/FUNDING.yml new file mode 100644 index 0000000000000000000000000000000000000000..c784f74441198c4191fa00f7424c3f4a14fea566 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +ko_fi: zanllp diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.github/workflows/tauri_app_build.yml b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.github/workflows/tauri_app_build.yml new file mode 100644 index 0000000000000000000000000000000000000000..4a9494f88030ec0d62f8fd1fd1fa40b9a1acf8b8 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.github/workflows/tauri_app_build.yml @@ -0,0 +1,130 @@ +name: tauri_app_build + +on: + push: + branches: + - 'releases/**' + +jobs: + build: + strategy: + matrix: + os: [windows-latest,ubuntu-20.04] + + runs-on: ${{ matrix.os }} + + permissions: + contents: write + steps: + - name: Check-out repository + uses: actions/checkout@v3 + + - run: echo "VERSION=$(jq -r '.package.version' vue/src-tauri/tauri.conf.json)" >> "$GITHUB_ENV" + if: matrix.os == 'ubuntu-20.04' + - run: echo "VERSION=$(jq -r '.package.version' vue/src-tauri/tauri.conf.json)" >> $env:GITHUB_ENV + if: matrix.os == 'windows-latest' + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + cache: 'pip' + cache-dependency-path: | + **/requirements*.txt + + - name: Install Dependencies + run: | + pip install -r requirements.txt + + - name: Build Executable + uses: Nuitka/Nuitka-Action@main + with: + nuitka-version: main + script-name: app.py + output-file: iib_api_server + output-dir: out + + - name: Upload Server Artifacts + uses: actions/upload-artifact@v3 + with: + name: iib_api_server-${{ env.VERSION }}-${{ runner.os }} + path: | + out/iib_api_server.exe + out/iib_api_server + + - run: mv out/iib_api_server.exe vue/src-tauri/iib_api_server-x86_64-pc-windows-msvc.exe + if: matrix.os == 'windows-latest' + + - run: mv out/iib_api_server vue/src-tauri/iib_api_server-x86_64-unknown-linux-gnu + if: matrix.os == 'ubuntu-20.04' + + - name: Install frontend dependencies + run: yarn install + working-directory: vue + + - name: Rust setup + uses: dtolnay/rust-toolchain@stable + + - name: Use Node.js + uses: actions/setup-node@v3 + with: + node-version: 18 + + - name: Rust cache + uses: swatinem/rust-cache@v2 + with: + workspaces: './vue/src-tauri -> target' + + - name: Install dependencies (ubuntu only) + if: matrix.os == 'ubuntu-20.04' + run: | + sudo apt-get update + sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libayatana-appindicator3-dev librsvg2-dev patchelf + + - name: Build the app + run: | + yarn tauri-build + working-directory: vue + + + - name: Upload Artifacts + uses: actions/upload-artifact@v3 + with: + name: bundle-${{ env.VERSION }}-${{ runner.os }} + path: | + vue/src-tauri/target/release/bundle/nsis/Infinite Image Browsing_${{ env.VERSION }}_x64-setup.exe + vue/src-tauri/target/release/bundle/deb/infinite-image-browsing_${{ env.VERSION }}_amd64.deb + + release: + needs: build + runs-on: ubuntu-latest + + permissions: + contents: write + steps: + - name: Check-out repository + uses: actions/checkout@v3 + - run: echo "VERSION=$(jq -r '.package.version' vue/src-tauri/tauri.conf.json)" >> "$GITHUB_ENV" + + - name: Delete drafts + uses: hugo19941994/delete-draft-releases@v1.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - uses: actions/download-artifact@v3 + with: + name: bundle-${{ env.VERSION }}-Windows + path: artifacts + + - uses: actions/download-artifact@v3 + with: + name: bundle-${{ env.VERSION }}-Linux + path: artifacts + + - name: Release + uses: softprops/action-gh-release@v1 + with: + draft: true + tag_name: v${{ env.VERSION }} + files: artifacts/**/* + diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.gitignore b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b521c26cf000395cb4afbd8691072f8fe715af16 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.gitignore @@ -0,0 +1,17 @@ + +*.log +__pycache__ +iib.db +tags-translate.csv +launch.sh +conf.json +iib.db-journal +.env +standalone.cmd +.vscode +build/**/* +dist/**/* +*.spec +out/**/* +venv/**/* +zip_temp/*.zip diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.vscode/settings.json b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.vscode/settings.json new file mode 100644 index 0000000000000000000000000000000000000000..6ba1afd2f5a4843c84363308d83a515e8f3bb589 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "python.formatting.provider": "none" +} \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/LICENSE b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..46d1025428452c2dfcfb56411d8a1bd4f5d026d2 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 zanllp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/README-zh.md b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/README-zh.md new file mode 100644 index 0000000000000000000000000000000000000000..c6e24b9318e1a84cb624a163f8a50775f9be3d20 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/README-zh.md @@ -0,0 +1,147 @@ + + +# Stable-Diffusion-WebUI无边图像浏览 + +> 百度云部分已独立,如果你有需要请[点此单独安装](https://github.com/zanllp/sd-webui-baidu-netdisk) + +[查看近期更新](https://github.com/zanllp/sd-webui-infinite-image-browsing/wiki/Change-log) + +

    不仅仅是图像浏览器,更是一个强大的图像管理器。精确的图像搜索配合多选操作进行筛选/归档/打包,成倍提高效率。更是支持以独立模式运行,无需SD-Webui

    + + + +https://github.com/zanllp/sd-webui-infinite-image-browsing/assets/25872019/807b890b-7be8-4816-abba-f3ad340a2232 + + +## 主要特性 + +### 🔥 极佳性能 +- 存在缓存的情况下后,图像可以在几毫秒内显示。 +- 默认使用缩略图显示图像,默认大小为512像素,您可以在全局设置页中调整缩略图分辨率。 +- 你还可以控制网格图像的宽度,允许以64px到1024px的宽度范围进行显示 + +### 🔍 图像搜索和收藏 +- 将会把Prompt、Model、Lora等信息转成标签,将根据使用频率排序以供进行精确的搜索。 +- 支持标签自动完成、[翻译](https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/39)和自定义。 +- 可通过在右键菜单切换自定义标签来实现图像收藏。 +- 支持类似谷歌的高级搜索。 +- 同样支持模糊搜索,您可以使用文件名或生成信息的一部分进行搜索。 +- 支持添加自定义搜索路径,方便管理自己创建的文件夹集合。 + +### 🖼️ 查看图像/视频和“发送到” +- 支持查看图像生成信息。全屏预览下同样支持。 +- 支持将图像发送到其他选项卡和其他插件,例如 ControlNet, openOutpaint。 +- 支持全屏预览,并且支持在全屏预览下使用自定义快捷键进行操作 +- 支持在全屏预览模式下通过按下方向键或点击按钮移动到前一个或后一个图像。 +- 支持播放远程服务器上的视频文件 + +### 💻 多种使用方法 +- 您可以将其作为 SD-webui 的扩展安装。 +- 您可以使用 Python 独立运行它。 +- 还提供桌面应用程序版本。 + +### 🚶‍♀️ Walk模式 +- 自动加载下一个文件夹 `(类似于 os.walk)`,可让您无需分页浏览所有图像。 +- 已测试可正常处理超过 27,000 个文件。 + +### 🌳 基于文件树结构的预览和文件操作 +- 支持基于文件树结构的预览。 +- 支持自动刷新。 +- 支持基本文件操作以及多选删除/移动/复制,新建文件夹等。 +- 按住 Ctrl、Shift 或 Cmd 键可选择多个项目。 + +### 🆚 图像对比 (类似ImgSli) +- 提供两张图片的并排比较 + +### 🌐 多语言支持 +- 目前支持简体中文/繁体中文/英文/德语。 +- 如果您希望添加新的语言,请参考 [i18n.ts](https://github.com/zanllp/sd-webui-infinite-image-browsing/blob/main/vue/src/i18n/zh-hans.ts) 并提交相关的代码。 + + +### 🔐 隐私和安全 +- 支持自定义secret key来进行身份验证 +- 支持配置对文件系统的访问控制,默认将在服务允许公开访问时启用 +- 支持自定义访问控制允许的路径。 +- 支持控制访问权限。你可以让IIB以只读模式运行 +- [点击这里查看详情](.env.example) + +### ⌨️ 快捷键 +- 支持删除和添加/移除Tag,在全局设置页进行自定义触发按钮 + +### 📦 打包 / 批量下载 +- 允许你一次性打包下载多个图像 +- 数据来源可以是搜索结果/普通的图像网格查看页面/walk模式等。使用拖拽或者“发送到”都可将图片添加待处理列表 + + +如果您喜欢这个项目并且觉得它对您有帮助,请考虑给我点个⭐️。这将对我持续开发和维护这个项目非常重要。如果您有任何建议或者想法,请随时在issue中提出,我会尽快回复。再次感谢您的支持! + + +Buy Me a Coffee at ko-fi.com + + +[视频演示可以在Bilibili上观看](https://space.bilibili.com/27227392/channel/series) +# 安装/运行 + +## 作为SD-webui的扩展程序: +1. 在SD-webui中打开`扩展`选项卡。 +2. 选择`从URL安装`选项。 +3. 输入 `https://github.com/zanllp/sd-webui-infinite-image-browsing`。 +4. 点击`安装`按钮。 +5. 等待安装完成,然后点击`应用并重启UI`。 + +## 作为使用Python运行的独立程序(不需要SD-webui): +请参考[Can the extension function without the web UI?](https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/47) + +如果需要查看ComfyUI生成的图片相关,请先参考 https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/202 + +如果你需要dockerfile 参考 https://github.com/zanllp/sd-webui-infinite-image-browsing/discussions/366 + +## 作为桌面应用程序(不需要SD-webui和Python): + +从仓库页面右侧的`releases`部分下载并安装程序。如果提升检测到病毒忽略即可这是误报。 +# 预览 + +image + +## 图像搜索 + +在第一次使用时,你需要点击等待索引的生成,我2万张图像的情况下大概需要15秒(配置是amd 5600x和pcie ssd)。后续使用他会检查文件夹是否发生变化,如果发生变化则需要重新生成索引,通常这个过程极快。 + +图像搜索支持翻译,具体看这个 https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/39 。 +image +image +## 图像比较 + +![ezgif com-video-to-gif](https://github.com/zanllp/sd-webui-infinite-image-browsing/assets/25872019/4023317b-0b2d-41a3-8155-c4862eb43846) + +## 全屏预览 +image + +在全屏预览下同样可以查看图片信息和进行上下文菜单上的的操作,支持拖拽/调整/展开收起 + +https://user-images.githubusercontent.com/25872019/235327735-bfb50ea7-7682-4e50-b303-38159456e527.mp4 + + +如果你和我一样不需要查看生成信息,你可以选择直接缩小这个面板,所有上下文操作仍然可用 + +image + +### 右键菜单 +image + +也可以通过右上角的图标来触发 +image + +### Walk模式 + + +https://user-images.githubusercontent.com/25872019/230768207-daab786b-d4ab-489f-ba6a-e9656bd530b8.mp4 + + + + +### 深色模式 + +image + + diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/README.md b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ba3846598043a72a012a59ec37dcce081054c2f3 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/README.md @@ -0,0 +1,141 @@ +[中文文档](./README-zh.md) + +[View recent updates (Change log)](https://github.com/zanllp/sd-webui-infinite-image-browsing/wiki/Change-log) + +# Stable Diffusion webui Infinite Image Browsing + +

    It's not just an image browser, but also a powerful image manager. Precise image search combined with multi-selection operations allows for filtering/archiving/packaging, greatly increasing efficiency. It also supports running in standalone mode, without the need for SD-Webui.

    + +https://github.com/zanllp/sd-webui-infinite-image-browsing/assets/25872019/807b890b-7be8-4816-abba-f3ad340a2232 +## Key Features + +### 🔥 Excellent Performance +- Once caching is generated, images can be displayed in just a few milliseconds. +- Images are displayed with thumbnails by default, with a default size of 512 pixels. You can adjust the thumbnail resolution on the global settings page. +- You can also control the width of the grid images, allowing them to be displayed in widths ranging from 64px to 1024px. + +### 🔍 Image Search & Favorite +- The prompt, model, Lora, and other information will be converted into tags and sorted by frequency of use for precise searching. +- Supports tag autocomplete, [auto-translation](https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/39), and customization. +- Image favorite can be achieved by toggling custom tags for images in the right-click menu. +- Support for advanced search similar to Google +- Also supports fuzzy search, you can search by a part of the filename or generated information. +- Support adding custom search paths for easy management of folders created by the user. + +### 🖼️ View Images/Videos & `Send To` +- Supports viewing image generation information. Also supported in full-screen preview mode. +- Supports sending images to other tabs and third-party extensions such as ControlNet , openOutpaint. +- Support full-screen preview and enable custom shortcut key operations while in full-screen preview mode. +- Support navigating to the previous or next image in full-screen preview mode by pressing arrow keys or clicking buttons. +- Support playing video files from a remote server. + +### 💻 Multiple Usage Methods +- You can install it as an extension on SD-webui. +- You can run it independently using Python. +- The desktop app version is also available. + + +### 🚶‍♀️ Walk Mode +- Automatically load the next folder `(similar to os.walk)`, allowing you to browse all images without paging. +- Tested to work properly with over 27,000 files. + +### 🌳 Preview based on File Tree Structure & File operations +- Supports file tree-based preview. +- Supports automatic refreshing. +- Supports basic file operations, such as multiple selection for deleting/moving/copying, and creating new folders. +- Hold down the Ctrl, Shift, or Cmd key to select multiple items. + +### 🆚 image comparison (similar to Imgsli) +- Provides a side-by-side comparison of two images. + +### 🌐 Multilingual Support +- Currently supports Simplified Chinese/Traditional Chinese/English/German. +- If you would like to add a new language, please refer to [i18n.ts](https://github.com/zanllp/sd-webui-infinite-image-browsing/blob/main/vue/src/i18n/zh-hans.ts) and submit the relevant code. + +### 🔐 Privacy and Security +- Supports custom secret key for authentication. +- Supports configuring access control for the file system, which will be enabled by default when the service allows public access. +- Supports customizing the allowed paths for access control. +- Supports controlling access permissions. You can run IIB in read-only mode. +- [Click here to see details](.env.example) + + +### 📦 Packaging/Batch Download +- Allows you to download multiple images at once. +- The data source can be search results, a regular image grid view page, walk mode, etc. Images can be added to the processing list through drag-and-drop or "Send To". +### ⌨️ Keyboard Shortcuts +- Allows for deleting and adding/removing tags, with customizable trigger buttons in the global settings page. + + +If you like this project and find it helpful, please consider giving it a ⭐️. This would be very important for me to continue developing and maintaining this project. If you have any suggestions or ideas, please feel free to raise them in the issue section, and I will respond as soon as possible. Thank you again for your support! + + +
    Buy Me a Coffee at ko-fi.com + + + +# Installation / Running +## As an extension for SD-webui: +1. Open the `Extensions` tab in SD-webui. +2. Select the `Install from URL` option. +3. Enter `https://github.com/zanllp/sd-webui-infinite-image-browsing`. +4. Click on the `Install` button. +5. Wait for the installation to complete and click on `Apply and restart UI`. + +## As a standalone program that runs using Python. (without SD-webui): + +Refer to [Can the extension function without the web UI?](https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/47) + +If you need to view images generated by ComfyUI, please refer to https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/202. + +If you need a Dockerfile, you can refer to this link. https://github.com/zanllp/sd-webui-infinite-image-browsing/discussions/366 + +## As a desktop application (without SD-webui and Python): +Download and install the program from the `releases` section on the right-hand side of the repository page. +If the antivirus detects a virus, it can be ignored as a false positive. +# Preview + +image + +## Image Search + +During the first use, you need to click and wait for the index generation. For my case with 20,000 images, it took about 15 seconds (with an AMD 5600X CPU and PCIe SSD). For subsequent uses, it will check whether there are changes in the folder, and if so, it needs to regenerate the index. Usually, this process is very fast. + +Image search supports translation, see https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/39 for more detail. Feel free to share files for other languages to facilitate everyone's use. +image +image + +## Full Screen Preview + +image + +In full-screen preview mode, you can also view image information and perform operations on the context menu. It supports dragging, resizing and expanding/collapsing . + +https://user-images.githubusercontent.com/25872019/235327735-bfb50ea7-7682-4e50-b303-38159456e527.mp4 + +If you, like me, don't need to view the generation information, you can choose to simply minimize this panel, and all contextual operations will still be available. + +image + +## Image comparison + +![ezgif com-video-to-gif](https://github.com/zanllp/sd-webui-infinite-image-browsing/assets/25872019/4023317b-0b2d-41a3-8155-c4862eb43846) + +### Right-click menu +image + +You can also trigger it by hovering your mouse over the icon in the top right corner. + +image + +### Walk mode + + +https://user-images.githubusercontent.com/25872019/230768207-daab786b-d4ab-489f-ba6a-e9656bd530b8.mp4 + + + + +### Dark mode + +image diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/app.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/app.py new file mode 100644 index 0000000000000000000000000000000000000000..c6a6c7e331abbae29f6434005d23ba130b1959ce --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/app.py @@ -0,0 +1,221 @@ +from typing import List +from fastapi import FastAPI +from fastapi.responses import FileResponse +import uvicorn +import os +from scripts.iib.api import infinite_image_browsing_api, index_html_path +from scripts.iib.tool import get_sd_webui_conf, get_valid_img_dirs, sd_img_dirs, normalize_paths +from scripts.iib.db.datamodel import DataBase, Image +from scripts.iib.db.update_image_data import update_image_data +import argparse +from typing import Optional, Coroutine +import json + +tag = "\033[31m[warn]\033[0m" + +default_port = 8000 +default_host = "127.0.0.1" + + +def sd_webui_paths_check(sd_webui_config: str, relative_to_config: bool): + conf = {} + with open(sd_webui_config, "r") as f: + conf = json.loads(f.read()) + if relative_to_config: + for dir in sd_img_dirs: + if not os.path.isabs(conf[dir]): + conf[dir] = os.path.normpath( + os.path.join(sd_webui_config, "../", conf[dir]) + ) + paths = [conf.get(key) for key in sd_img_dirs] + paths_check(paths) + + +def paths_check(paths): + for path in paths: + if not path or len(path.strip()) == 0: + continue + if os.path.isabs(path): + abs_path = path + else: + abs_path = os.path.join(os.getcwd(), path) + if not os.path.exists(abs_path): + print(f"{tag} The path '{abs_path}' will be ignored (value: {path}).") + + +def do_update_image_index(sd_webui_config: str, relative_to_config=False): + dirs = get_valid_img_dirs( + get_sd_webui_conf( + sd_webui_config=sd_webui_config, + sd_webui_path_relative_to_config=relative_to_config, + ) + ) + if not len(dirs): + return print(f"{tag} no valid image directories, skipped") + conn = DataBase.get_conn() + update_image_data(dirs) + if Image.count(conn=conn) == 0: + return print(f"{tag} it appears that there is some issue") + print("update image index completed. ✨") + + +class AppUtils: + def __init__( + self, + sd_webui_config: Optional[str] = None, + update_image_index: bool = False, + extra_paths: List[str] = [], + sd_webui_path_relative_to_config=False, + allow_cors=False, + enable_shutdown=False, + sd_webui_dir: Optional[str] = None, + ): + """ + Parameter definitions can be found by running the `python app.py -h `command or by examining the setup_parser() function. + """ + self.sd_webui_config = sd_webui_config + self.update_image_index = update_image_index + self.extra_paths = extra_paths + self.sd_webui_path_relative_to_config = sd_webui_path_relative_to_config + self.allow_cors = allow_cors + self.enable_shutdown = enable_shutdown + self.sd_webui_dir = sd_webui_dir + if sd_webui_dir: + DataBase.path = os.path.join( + sd_webui_dir, "extensions/sd-webui-infinite-image-browsing/iib.db" + ) + self.sd_webui_config = os.path.join(sd_webui_dir, "config.json") + self.sd_webui_path_relative_to_config = True + + def set_params(self, *args, **kwargs) -> None: + """改变参数,与__init__的行为一致""" + self.__init__(*args, **kwargs) + + @staticmethod + def async_run(app: FastAPI, port: int = default_port, host = default_host) -> Coroutine: + """ + 用于从异步运行的 FastAPI,在 Jupyter Notebook 环境中非常有用 + """ + # 不建议改成 async def,并且用 await 替换 return, + # 因为这样会失去对 server.serve() 的控制。 + config = uvicorn.Config(app, host=host, port=port) + server = uvicorn.Server(config) + return server.serve() + + def wrap_app(self, app: FastAPI) -> None: + """ + 为传递的app挂载上infinite_image_browsing后端 + """ + sd_webui_config = self.sd_webui_config + update_image_index = self.update_image_index + extra_paths = self.extra_paths + + if sd_webui_config: + sd_webui_paths_check(sd_webui_config, self.sd_webui_path_relative_to_config) + if update_image_index: + do_update_image_index( + sd_webui_config, self.sd_webui_path_relative_to_config + ) + paths_check(extra_paths) + + infinite_image_browsing_api( + app, + sd_webui_config=sd_webui_config, + extra_paths_cli=normalize_paths(extra_paths, os.getcwd()), + sd_webui_path_relative_to_config=self.sd_webui_path_relative_to_config, + allow_cors=self.allow_cors, + enable_shutdown=self.enable_shutdown, + launch_mode="server", + ) + + def get_root_browser_app(self) -> FastAPI: + """ + 获取首页挂载在"/"上的infinite_image_browsing FastAPI实例 + """ + app = FastAPI() + + # 用于在首页显示 + @app.get("/") + def index(): + return FileResponse(index_html_path) + + self.wrap_app(app) + return app + + +def setup_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + description="A fast and powerful image browser for Stable Diffusion webui." + ) + parser.add_argument( + "--host", type=str, default=default_host, help="The host to use" + ) + parser.add_argument( + "--port", type=int, help="The port to use", default=default_port + ) + parser.add_argument( + "--sd_webui_config", type=str, default=None, help="The path to the config file" + ) + parser.add_argument( + "--update_image_index", action="store_true", help="Update the image index" + ) + parser.add_argument( + "--extra_paths", + nargs="+", + help="Extra paths to use, will be added to Quick Move.", + default=[], + ) + parser.add_argument( + "--sd_webui_path_relative_to_config", + action="store_true", + help="Use the file path of the sd_webui_config file as the base for all relative paths provided within the sd_webui_config file.", + ) + parser.add_argument( + "--allow_cors", + action="store_true", + help="Allow Cross-Origin Resource Sharing (CORS) for the API.", + ) + parser.add_argument( + "--enable_shutdown", + action="store_true", + help="Enable the shutdown endpoint.", + ) + parser.add_argument( + "--sd_webui_dir", + type=str, + default=None, + help="The path to the sd_webui folder. When specified, the sd_webui's configuration will be used and the extension must be installed within the sd_webui. Data will be shared between the two.", + ) + return parser + + +def launch_app(port: int = default_port, host: str = default_host, *args, **kwargs: dict) -> None: + """ + Launches the application on the specified port. + + Args: + **kwargs (dict): Optional keyword arguments that can be used to configure the application. + These can be viewed by running 'python app.py -h' or by checking the setup_parser() function. + """ + app_utils = AppUtils(*args, **kwargs) + app = app_utils.get_root_browser_app() + uvicorn.run(app, host=host, port=port) + + +async def async_launch_app(port: int = default_port, host: str = default_host, *args, **kwargs: dict) -> None: + """ + Asynchronously launches the application on the specified port. + + Args: + **kwargs (dict): Optional keyword arguments that can be used to configure the application. + These can be viewed by running 'python app.py -h' or by checking the setup_parser() function. + """ + app_utils = AppUtils(*args, **kwargs) + app = app_utils.get_root_browser_app() + await app_utils.async_run(app, host=host, port=port) + + +if __name__ == "__main__": + parser = setup_parser() + args = parser.parse_args() + launch_app(**vars(args)) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/install.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/install.py new file mode 100644 index 0000000000000000000000000000000000000000..308c9570c8f614b94ec7334b18f0bf419420ca48 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/install.py @@ -0,0 +1,28 @@ +import launch +import os +import pkg_resources + +req_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), "requirements.txt") + +def dist2package(dist: str): + return ({ + "pyfunctional": "functional", + "python-dotenv": "dotenv", + "Pillow": "PIL" + }).get(dist, dist) + +# copy from controlnet, thanks +with open(req_file) as file: + for package in file: + try: + package = package.strip() + if '==' in package: + package_name, package_version = package.split('==') + installed_version = pkg_resources.get_distribution(package_name).version + if installed_version != package_version: + launch.run_pip(f"install {package}", f"sd-webui-infinite-image-browsing requirement: changing {package_name} version from {installed_version} to {package_version}") + elif not launch.is_installed(dist2package(package)): + launch.run_pip(f"install {package}", f"sd-webui-infinite-image-browsing requirement: {package}") + except Exception as e: + print(e) + print(f'Warning: Failed to install {package}, something may not work.') diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/javascript/index.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/javascript/index.js new file mode 100644 index 0000000000000000000000000000000000000000..94113a7534102f7a1c58783dce4b8ca4e52c3980 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/javascript/index.js @@ -0,0 +1,176 @@ +Promise.resolve().then(async () => { + /** + * This is a file generated using `yarn build`. + * If you want to make changes, please modify `index.tpl.js` and run the command to generate it again. + */ + const html = ` + + + + + + + + Infinite Image Browsing + + + + + + + + + + +` + let containerSelector = '#infinite_image_browsing_container_wrapper' + let shouldMaximize = true + + try { + containerSelector = __iib_root_container__ + shouldMaximize = __iib_should_maximize__ + } catch (e) {} + + const delay = (timeout = 0) => new Promise((resolve) => setTimeout(resolve, timeout)) + const asyncCheck = async (getter, checkSize = 100, timeout = 1000) => { + let target = getter() + let num = 0 + while (checkSize * num < timeout && (target === undefined || target === null)) { + await delay(checkSize) + target = getter() + num++ + } + return target + } + const getTabIdxById = (id) => { + const tabList = gradioApp().querySelectorAll('#tabs > .tabitem[id^=tab_]') + return Array.from(tabList).findIndex((v) => v.id.includes(id)) + } + + const switch2targetTab = (idx) => { + try { + gradioApp().querySelector('#tabs').querySelectorAll('button')[idx].click() + } catch (error) { + console.error(error) + } + } + + /** + * @type {HTMLDivElement} + */ + const wrap = await asyncCheck(() => gradioApp().querySelector(containerSelector), 500, Infinity) + wrap.childNodes.forEach((v) => wrap.removeChild(v)) + const iframe = document.createElement('iframe') + iframe.srcdoc = html + iframe.style = `width: 100%;height:100vh` + wrap.appendChild(iframe) + + if (shouldMaximize) { + onUiTabChange(() => { + const el = get_uiCurrentTabContent() + if (el?.id.includes('infinite-image-browsing')) { + try { + const iibTop = gradioApp().querySelector('#iib_top') + if (!iibTop) { + throw new Error("element '#iib_top' is not found") + } + const topRect = iibTop.getBoundingClientRect() + wrap.style = ` + top:${Math.max(48, topRect.top) - 10}px; + position: fixed; + left: 10px; + right: 10px; + z-index: 100; + width: unset; + bottom: 10px;` + iframe.style = `width: 100%;height:100%` + } catch (error) { + console.error('Error mounting IIB. Running fallback.', error) + wrap.style = '' + iframe.style = `width: 100%;height:100vh` + } + } + }) + } + + const IIB_container_id = [Date.now(), Math.random()].join() + window.IIB_container_id = IIB_container_id + const imgTransferBus = new BroadcastChannel('iib-image-transfer-bus') + imgTransferBus.addEventListener('message', async (ev) => { + const data = ev.data + if ( + typeof data !== 'object' || + (typeof data.IIB_container_id === 'string' && data.IIB_container_id !== IIB_container_id) + ) { + return + } + console.log(`iib-message:`, data) + const appDoc = gradioApp() + switch (data.event) { + case 'click_hidden_button': { + const btn = gradioApp().querySelector(`#${data.btnEleId}`) + btn.click() + break + } + case 'send_to_control_net': { + data.type === 'img2img' ? window.switch_to_img2img() : window.switch_to_txt2img() + await delay(100) + const cn = appDoc.querySelector(`#${data.type}_controlnet`) + const wrap = cn.querySelector('.label-wrap') + if (!wrap.className.includes('open')) { + wrap.click() + await delay(100) + } + wrap.scrollIntoView() + wrap.dispatchEvent(await createPasteEvent(data.url)) + break + } + case 'send_to_outpaint': { + switch2targetTab(getTabIdxById('openOutpaint')) + await delay(100) + const iframe = appDoc.querySelector('#openoutpaint-iframe') + openoutpaint_send_image(await imgUrl2DataUrl(data.url)) + iframe.contentWindow.postMessage({ + key: appDoc.querySelector('#openoutpaint-key').value, + type: 'openoutpaint/set-prompt', + prompt: data.prompt, + negPrompt: data.negPrompt + }) + break + } + } + + function imgUrl2DataUrl(imgUrl) { + return new Promise((resolve, reject) => { + fetch(imgUrl) + .then((response) => response.blob()) + .then((blob) => { + const reader = new FileReader() + reader.readAsDataURL(blob) + reader.onloadend = function () { + const dataURL = reader.result + resolve(dataURL) + } + }) + .catch((error) => reject(error)) + }) + } + + async function createPasteEvent(imgUrl) { + const response = await fetch(imgUrl) + const imageBlob = await response.blob() + const imageFile = new File([imageBlob], 'image.jpg', { + type: imageBlob.type, + lastModified: Date.now() + }) + const dataTransfer = new DataTransfer() + dataTransfer.items.add(imageFile) + const pasteEvent = new ClipboardEvent('paste', { + clipboardData: dataTransfer, + bubbles: true + }) + return pasteEvent + } + }) +}) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/requirements.txt b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..3b2c752f436e287ebc298e73aa1b052b414390c7 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/requirements.txt @@ -0,0 +1,6 @@ +fastapi +uvicorn +piexif +python-dotenv +Pillow +pyfunctional \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/api.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/api.py new file mode 100644 index 0000000000000000000000000000000000000000..f0e93780ce1c028e28a445f4cbb433a39c31ef51 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/api.py @@ -0,0 +1,768 @@ +from datetime import datetime, timedelta +import os +import shutil +import sqlite3 +from scripts.iib.tool import ( + comfyui_exif_data_to_str, + get_comfyui_exif_data, + human_readable_size, + is_img_created_by_comfyui, + is_img_created_by_comfyui_with_webui_gen_info, + is_valid_image_path, + temp_path, + read_sd_webui_gen_info_from_image, + get_formatted_date, + is_win, + cwd, + locale, + enable_access_control, + get_windows_drives, + get_sd_webui_conf, + get_valid_img_dirs, + open_folder, + get_img_geninfo_txt_path, + unique_by, + create_zip_file, + normalize_paths, + to_abs_path, + is_secret_key_required +) +from fastapi import FastAPI, HTTPException +from fastapi.staticfiles import StaticFiles +import asyncio +from typing import List, Optional +from pydantic import BaseModel +from fastapi.responses import FileResponse +from PIL import Image +from fastapi import Depends, FastAPI, HTTPException, Request +from fastapi.middleware.cors import CORSMiddleware +import hashlib +from scripts.iib.db.datamodel import ( + DataBase, + ExtraPathType, + Image as DbImg, + Tag, + Floder, + ImageTag, + ExtraPath, + FileInfoDict, +) +from scripts.iib.db.update_image_data import update_image_data +from scripts.iib.logger import logger +from functional import seq +import urllib.parse + +index_html_path = os.path.join(cwd, "vue/dist/index.html") # 在app.py也被使用 + + +send_img_path = {"value": ""} +mem = {"secret_key_hash": None, "extra_paths": [], "all_scanned_paths": []} +secret_key = os.getenv("IIB_SECRET_KEY") +if secret_key: + print("Secret key loaded successfully. ") + +WRITEABLE_PERMISSIONS = ["read-write", "write-only"] + +is_api_writeable = not (os.getenv("IIB_ACCESS_CONTROL_PERMISSION")) or ( + os.getenv("IIB_ACCESS_CONTROL_PERMISSION") in WRITEABLE_PERMISSIONS +) + + +async def write_permission_required(): + if not is_api_writeable: + error_msg = ( + "User is not authorized to perform this action. Required permission: " + + ", ".join(WRITEABLE_PERMISSIONS) + ) + raise HTTPException(status_code=403, detail=error_msg) + + +async def verify_secret(request: Request): + if not secret_key: + if is_secret_key_required: + raise HTTPException(status_code=400, detail={ "type": "secret_key_required" }) + return + token = request.cookies.get("IIB_S") + if not token: + raise HTTPException(status_code=401, detail="Unauthorized") + if not mem["secret_key_hash"]: + mem["secret_key_hash"] = hashlib.sha256( + (secret_key + "_ciallo").encode("utf-8") + ).hexdigest() + if mem["secret_key_hash"] != token: + raise HTTPException(status_code=401, detail="Unauthorized") + + +def infinite_image_browsing_api(app: FastAPI, **kwargs): + pre = "/infinite_image_browsing" + + if kwargs.get("allow_cors"): + app.add_middleware( + CORSMiddleware, + allow_origin_regex="^[\w./:-]+$", + allow_methods=["*"], + allow_headers=["*"], + ) + + def get_img_search_dirs(): + try: + return get_valid_img_dirs(get_sd_webui_conf(**kwargs)) + except Exception as e: + print(e) + return [] + + def update_all_scanned_paths(): + allowed_paths = os.getenv("IIB_ACCESS_CONTROL_ALLOWED_PATHS") + if allowed_paths: + sd_webui_conf = get_sd_webui_conf(**kwargs) + path_config_key_map = { + "save": "outdir_save", + "extra": "outdir_extras_samples", + "txt2img": "outdir_txt2img_samples", + "img2img": "outdir_img2img_samples", + } + + def path_map(path: str): + path = path.strip() + if path in path_config_key_map: + return sd_webui_conf.get(path_config_key_map.get(path)) + return path + + paths = normalize_paths( + seq(allowed_paths.split(",")) + .map(path_map) + .filter(lambda x: x) + .to_list(), + os.getcwd() + ) + else: + paths = ( + get_img_search_dirs() + mem["extra_paths"] + kwargs.get("extra_paths_cli", []) + ) + mem["all_scanned_paths"] = unique_by(paths) + + update_all_scanned_paths() + + def update_extra_paths(conn: sqlite3.Connection): + r = ExtraPath.get_extra_paths(conn) + mem["extra_paths"] = [x.path for x in r] + update_all_scanned_paths() + + def safe_commonpath(seq): + try: + return os.path.commonpath(seq) + except Exception as e: + # logger.error(e) + return "" + + def is_path_under_parents(path, parent_paths: List[str] = []): + """ + Check if the given path is under one of the specified parent paths. + :param path: The path to check. + :param parent_paths: By default, all scanned paths are included in the list of parent paths + :return: True if the path is under one of the parent paths, False otherwise. + """ + try: + if not parent_paths: + parent_paths = mem["all_scanned_paths"] + path = to_abs_path(path) + for parent_path in parent_paths: + if safe_commonpath([path, parent_path]) == parent_path: + return True + except Exception as e: + logger.error(e) + return False + + def is_path_trusted(path: str): + if not enable_access_control: + return True + try: + parent_paths = mem["all_scanned_paths"] + path = to_abs_path(path) + for parent_path in parent_paths: + if len(path) <= len(parent_path): + if parent_path.startswith(path): + return True + else: + if path.startswith(parent_path): + return True + except: + pass + return False + + def check_path_trust(path: str): + if not is_path_trusted(path): + raise HTTPException(status_code=403) + + def filter_allowed_files(files: List[FileInfoDict]): + return [x for x in files if is_path_trusted(x["fullpath"])] + + static_dir = f"{cwd}/vue/dist" + if os.path.exists(static_dir): + app.mount( + f"{pre}/fe-static", + StaticFiles(directory=static_dir), + name="infinite_image_browsing-fe-static", + ) + + @app.get(f"{pre}/hello") + async def greeting(): + return "hello" + + @app.get(f"{pre}/global_setting", dependencies=[Depends(verify_secret)]) + async def global_setting(): + all_custom_tags = [] + + extra_paths = [] + try: + conn = DataBase.get_conn() + all_custom_tags = Tag.get_all_custom_tag(conn) + extra_paths = ExtraPath.get_extra_paths(conn) + [ + ExtraPath(path, ExtraPathType.cli_only) + for path in kwargs.get("extra_paths_cli", []) + ] + update_extra_paths(conn) + except Exception as e: + print(e) + return { + "global_setting": get_sd_webui_conf(**kwargs), + "cwd": cwd, + "is_win": is_win, + "home": os.environ.get("USERPROFILE") if is_win else os.environ.get("HOME"), + "sd_cwd": os.getcwd(), + "all_custom_tags": all_custom_tags, + "extra_paths": extra_paths, + "enable_access_control": enable_access_control, + "launch_mode": kwargs.get("launch_mode", "sd"), + } + + class DeleteFilesReq(BaseModel): + file_paths: List[str] + + @app.post( + pre + "/delete_files", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def delete_files(req: DeleteFilesReq): + conn = DataBase.get_conn() + for path in req.file_paths: + check_path_trust(path) + try: + if os.path.isdir(path): + if len(os.listdir(path)): + error_msg = ( + "When a folder is not empty, it is not allowed to be deleted." + if locale == "en" + else "文件夹不为空时不允许删除。" + ) + raise HTTPException(400, detail=error_msg) + shutil.rmtree(path) + else: + os.remove(path) + txt_path = get_img_geninfo_txt_path(path) + if txt_path: + os.remove(txt_path) + img = DbImg.get(conn, os.path.normpath(path)) + if img: + logger.info("delete file: %s", path) + ImageTag.remove(conn, img.id) + DbImg.remove(conn, img.id) + except OSError as e: + # 处理删除失败的情况 + logger.error("delete failed") + error_msg = ( + f"Error deleting file {path}: {e}" + if locale == "en" + else f"删除文件 {path} 时出错:{e}" + ) + raise HTTPException(400, detail=error_msg) + + class CreateFoldersReq(BaseModel): + dest_folder: str + + @app.post( + pre + "/mkdirs", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def create_folders(req: CreateFoldersReq): + if enable_access_control: + if not is_path_under_parents(req.dest_folder): + raise HTTPException(status_code=403) + os.makedirs(req.dest_folder, exist_ok=True) + + class MoveFilesReq(BaseModel): + file_paths: List[str] + dest: str + create_dest_folder: Optional[bool] = False + + @app.post( + pre + "/copy_files", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def copy_files(req: MoveFilesReq): + for path in req.file_paths: + check_path_trust(path) + try: + shutil.copy(path, req.dest) + txt_path = get_img_geninfo_txt_path(path) + if txt_path: + shutil.copy(txt_path, req.dest) + except OSError as e: + error_msg = ( + f"Error copying file {path} to {req.dest}: {e}" + if locale == "en" + else f"复制文件 {path} 到 {req.dest} 时出错:{e}" + ) + raise HTTPException(400, detail=error_msg) + + @app.post( + pre + "/move_files", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def move_files(req: MoveFilesReq): + if req.create_dest_folder: + os.makedirs(req.dest, exist_ok=True) + elif not os.path.isdir(req.dest): + error_msg = ( + f"Destination folder {req.dest} does not exist." + if locale == "en" + else f"目标文件夹 {req.dest} 不存在。" + ) + raise HTTPException(400, detail=error_msg) + + conn = DataBase.get_conn() + for path in req.file_paths: + check_path_trust(path) + try: + ret_path = shutil.move(path, req.dest) + txt_path = get_img_geninfo_txt_path(path) + if txt_path: + shutil.move(txt_path, req.dest) + img = DbImg.get(conn, os.path.normpath(path)) + if img: + img.update_path(conn, ret_path) + conn.commit() + except OSError as e: + error_msg = ( + f"Error moving file {path} to {req.dest}: {e}" + if locale == "en" + else f"移动文件 {path} 到 {req.dest} 时出错:{e}" + ) + raise HTTPException(400, detail=error_msg) + + @app.get(pre + "/files", dependencies=[Depends(verify_secret)]) + async def get_target_floder_files(folder_path: str): + files: List[FileInfoDict] = [] + try: + if is_win and folder_path == "/": + for item in get_windows_drives(): + files.append( + {"type": "dir", "size": "-", "name": item, "fullpath": item} + ) + else: + if not os.path.exists(folder_path): + return {"files": []} + folder_path = to_abs_path(folder_path) + check_path_trust(folder_path) + folder_listing: List[os.DirEntry] = os.scandir(folder_path) + is_under_scanned_path = is_path_under_parents(folder_path) + for item in folder_listing: + if not os.path.exists(item.path): + continue + fullpath = os.path.normpath(item.path) + name = os.path.basename(item.path) + date = get_formatted_date(item.stat().st_mtime) + created_time = get_formatted_date(item.stat().st_ctime) + if item.is_file(): + bytes = item.stat().st_size + size = human_readable_size(bytes) + files.append( + { + "type": "file", + "date": date, + "size": size, + "name": name, + "bytes": bytes, + "created_time": created_time, + "fullpath": fullpath, + "is_under_scanned_path": is_under_scanned_path, + } + ) + elif item.is_dir(): + files.append( + { + "type": "dir", + "date": date, + "created_time": created_time, + "size": "-", + "name": name, + "is_under_scanned_path": is_under_scanned_path, + "fullpath": fullpath, + } + ) + except Exception as e: + # logger.error(e) + raise HTTPException(status_code=400, detail=str(e)) + + return {"files": filter_allowed_files(files)} + + @app.get(pre + "/image-thumbnail", dependencies=[Depends(verify_secret)]) + async def thumbnail(path: str, t: str, size: str = "256x256"): + check_path_trust(path) + if not temp_path: + return + # 生成缓存文件的路径 + hash_dir = hashlib.md5((path + t).encode("utf-8")).hexdigest() + hash = hash_dir + size + cache_dir = os.path.join(temp_path, "iib_cache", hash_dir) + cache_path = os.path.join(cache_dir, f"{size}.webp") + + # 如果缓存文件存在,则直接返回该文件 + if os.path.exists(cache_path): + return FileResponse( + cache_path, + media_type="image/webp", + headers={"Cache-Control": "max-age=31536000", "ETag": hash}, + ) + + # 如果缓存文件不存在,则生成缩略图并保存 + with Image.open(path) as img: + w, h = size.split("x") + img.thumbnail((int(w), int(h))) + os.makedirs(cache_dir, exist_ok=True) + img.save(cache_path, "webp") + + # 返回缓存文件 + return FileResponse( + cache_path, + media_type="image/webp", + headers={"Cache-Control": "max-age=31536000", "ETag": hash}, + ) + + @app.get(pre + "/file", dependencies=[Depends(verify_secret)]) + async def get_file(path: str, t: str, disposition: Optional[str] = None): + filename = path + import mimetypes + + check_path_trust(path) + if not os.path.exists(filename): + raise HTTPException(status_code=404) + if not os.path.isfile(filename): + raise HTTPException(status_code=400, detail=f"{filename} is not a file") + # 根据文件后缀名获取媒体类型 + media_type, _ = mimetypes.guess_type(filename) + headers = {} + if disposition: + encoded_filename = urllib.parse.quote(disposition.encode('utf-8')) + headers['Content-Disposition'] = f"attachment; filename*=UTF-8''{encoded_filename}" + + if is_path_under_parents(filename) and is_valid_image_path( + filename + ): # 认为永远不变,不要协商缓存了试试 + headers[ + "Cache-Control" + ] = "public, max-age=31536000" # 针对同样名字文件但实际上不同内容的文件要求必须传入创建时间来避免浏览器缓存 + headers["Expires"] = (datetime.now() + timedelta(days=365)).strftime( + "%a, %d %b %Y %H:%M:%S GMT" + ) + + return FileResponse( + filename, + media_type=media_type, + headers=headers, + ) + + @app.post(pre + "/send_img_path", dependencies=[Depends(verify_secret)]) + async def api_set_send_img_path(path: str): + send_img_path["value"] = path + + # 等待图片信息生成完成 + @app.get(pre + "/gen_info_completed", dependencies=[Depends(verify_secret)]) + async def api_set_send_img_path(): + for _ in range(30): # timeout 3s + if send_img_path["value"] == "": # 等待setup里面生成完成 + return True + v = send_img_path["value"] + # is_dev and logger.info("gen_info_completed %s %s", _, v) + await asyncio.sleep(0.1) + return send_img_path["value"] == "" + + @app.get(pre + "/image_geninfo", dependencies=[Depends(verify_secret)]) + async def image_geninfo(path: str): + with Image.open(path) as img: + if is_img_created_by_comfyui(img): + if is_img_created_by_comfyui_with_webui_gen_info(img): + return read_sd_webui_gen_info_from_image(img, path) + else: + try: + params = get_comfyui_exif_data(img) + return comfyui_exif_data_to_str(params) + except: + logger.error('parse comfyui image failed. prompt:') + logger.error(img.info.get('prompt')) + return '' + else: + return read_sd_webui_gen_info_from_image(img, path) + + class CheckPathExistsReq(BaseModel): + paths: List[str] + + @app.post(pre + "/check_path_exists", dependencies=[Depends(verify_secret)]) + async def check_path_exists(req: CheckPathExistsReq): + update_all_scanned_paths() + res = {} + for path in req.paths: + res[path] = os.path.exists(path) and is_path_trusted(path) + return res + + @app.get(pre) + def index_bd(): + return FileResponse(index_html_path) + + class PathsReq(BaseModel): + paths: List[str] + + class OpenFolderReq(BaseModel): + path: str + + @app.post( + pre + "/open_folder", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + def open_folder_using_explore(req: OpenFolderReq): + if not is_path_trusted(req.path): + raise HTTPException(status_code=403) + open_folder(*os.path.split(req.path)) + + @app.post(pre + "/shutdown") + async def shutdown_app(): + # This API endpoint is mainly used as a sidecar in Tauri applications to shut down the application + if not kwargs.get("enable_shutdown"): + raise HTTPException(status_code=403, detail="Shutdown is disabled.") + os.kill(os.getpid(), 9) + return {"message": "Application is shutting down."} + + @app.post( + pre + "/zip", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + def zip_files(req: PathsReq): + now = datetime.now() + timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") + zip_temp_dir = os.path.join(cwd, "zip_temp") + os.makedirs(zip_temp_dir, exist_ok=True) + file_path = os.path.join(zip_temp_dir, f"iib_batch_download_{timestamp}.zip") + create_zip_file(req.paths, file_path) + return FileResponse(file_path, media_type="application/zip") + + db_pre = pre + "/db" + + @app.get(db_pre + "/basic_info", dependencies=[Depends(verify_secret)]) + async def get_db_basic_info(): + conn = DataBase.get_conn() + img_count = DbImg.count(conn) + tags = Tag.get_all(conn) + expired_dirs = Floder.get_expired_dirs(conn) + return { + "img_count": img_count, + "tags": tags, + "expired": len(expired_dirs) != 0, + "expired_dirs": expired_dirs, + } + + @app.get(db_pre + "/expired_dirs", dependencies=[Depends(verify_secret)]) + async def get_db_expired(): + conn = DataBase.get_conn() + expired_dirs = Floder.get_expired_dirs(conn) + return { + "expired": len(expired_dirs) != 0, + "expired_dirs": expired_dirs, + } + + @app.post( + db_pre + "/update_image_data", + dependencies=[Depends(verify_secret)], + ) + async def update_image_db_data(): + try: + DataBase._initing = True + conn = DataBase.get_conn() + img_count = DbImg.count(conn) + update_extra_paths(conn) + dirs = ( + get_img_search_dirs() if img_count == 0 else Floder.get_expired_dirs(conn) + ) + mem["extra_paths"] + + update_image_data(dirs) + finally: + DataBase._initing = False + + class MatchImagesByTagsReq(BaseModel): + and_tags: List[int] + or_tags: List[int] + not_tags: List[int] + cursor: str + size: Optional[int] = 200 + + @app.post(db_pre + "/match_images_by_tags", dependencies=[Depends(verify_secret)]) + async def match_image_by_tags(req: MatchImagesByTagsReq): + conn = DataBase.get_conn() + imgs, next_cursor = ImageTag.get_images_by_tags( + conn=conn, + tag_dict={"and": req.and_tags, "or": req.or_tags, "not": req.not_tags}, + cursor=req.cursor, + limit=req.size + ) + return { + "files": filter_allowed_files([x.to_file_info() for x in imgs]), + "cursor": next_cursor + } + + @app.get(db_pre + "/img_selected_custom_tag", dependencies=[Depends(verify_secret)]) + async def get_img_selected_custom_tag(path: str): + path = os.path.normpath(path) + if not is_valid_image_path(path): + return [] + conn = DataBase.get_conn() + update_extra_paths(conn) + if not is_path_under_parents(path): + return [] + img = DbImg.get(conn, path) + if not img: + if DbImg.count(conn) == 0: + return [] + update_image_data([os.path.dirname(path)]) + img = DbImg.get(conn, path) + assert img + # tags = Tag.get_all_custom_tag() + return ImageTag.get_tags_for_image(conn, img.id, type="custom") + + @app.post(db_pre + "/get_image_tags", dependencies=[Depends(verify_secret)]) + async def get_img_tags(req: PathsReq): + conn = DataBase.get_conn() + return ImageTag.batch_get_tags_by_path(conn, req.paths) + + class ToggleCustomTagToImgReq(BaseModel): + img_path: str + tag_id: int + + @app.post( + db_pre + "/toggle_custom_tag_to_img", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def toggle_custom_tag_to_img(req: ToggleCustomTagToImgReq): + conn = DataBase.get_conn() + path = os.path.normpath(req.img_path) + update_extra_paths(conn) + if not is_path_under_parents(path): + raise HTTPException( + 400, + '当前文件不在搜索路径内,你可以将它添加到扫描路径再尝试。在右上角的"更多"里面' + if locale == "zh" + else 'The current file is not within the scan path. You can add it to the scan path and try again. In the top right corner, click on "More".', + ) + img = DbImg.get(conn, path) + if not img: + if DbImg.count(conn): + update_image_data([os.path.dirname(path)]) + img = DbImg.get(conn, path) + else: + raise HTTPException( + 400, + "你需要先通过图像搜索页生成索引" + if locale == "zh" + else "You need to generate an index through the image search page first.", + ) + tags = ImageTag.get_tags_for_image( + conn=conn, image_id=img.id, type="custom", tag_id=req.tag_id + ) + is_remove = len(tags) + if is_remove: + ImageTag.remove(conn, img.id, tags[0].id) + else: + ImageTag(img.id, req.tag_id).save(conn) + conn.commit() + return {"is_remove": is_remove} + + class AddCustomTagReq(BaseModel): + tag_name: str + + @app.post( + db_pre + "/add_custom_tag", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def add_custom_tag(req: AddCustomTagReq): + conn = DataBase.get_conn() + tag = Tag.get_or_create(conn, name=req.tag_name, type="custom") + conn.commit() + return tag + + class RemoveCustomTagReq(BaseModel): + tag_id: str + + @app.post( + db_pre + "/remove_custom_tag", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def remove_custom_tag(req: RemoveCustomTagReq): + conn = DataBase.get_conn() + ImageTag.remove(conn, tag_id=req.tag_id) + Tag.remove(conn, req.tag_id) + + class RemoveCustomTagFromReq(BaseModel): + img_id: int + tag_id: str + + @app.post( + db_pre + "/remove_custom_tag_from_img", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def remove_custom_tag_from_img(req: RemoveCustomTagFromReq): + conn = DataBase.get_conn() + ImageTag.remove(conn, image_id=req.img_id, tag_id=req.tag_id) + + @app.get(db_pre + "/search_by_substr", dependencies=[Depends(verify_secret)]) + async def search_by_substr(substr: str, cursor: str = '', size = 200): + conn = DataBase.get_conn() + imgs, next_cursor = DbImg.find_by_substring(conn=conn, substring=substr, cursor=cursor, limit=size) + return { + "files": filter_allowed_files([x.to_file_info() for x in imgs]), + "cursor": next_cursor + } + + + class ExtraPathModel(BaseModel): + path: str + type: Optional[ExtraPathType] + + @app.post( + f"{db_pre}/extra_paths", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def create_extra_path(extra_path: ExtraPathModel): + if enable_access_control: + if not is_path_under_parents(extra_path.path): + raise HTTPException(status_code=403) + conn = DataBase.get_conn() + path = ExtraPath(extra_path.path, extra_path.type) + try: + path.save(conn) + finally: + conn.commit() + + @app.get( + f"{db_pre}/extra_paths", + dependencies=[Depends(verify_secret)], + ) + async def read_extra_paths(): + conn = DataBase.get_conn() + return ExtraPath.get_extra_paths(conn) + + @app.delete( + f"{db_pre}/extra_paths", + dependencies=[Depends(verify_secret), Depends(write_permission_required)], + ) + async def delete_extra_path(extra_path: ExtraPathModel): + path = to_abs_path(extra_path.path) + conn = DataBase.get_conn() + ExtraPath.remove(conn, path, extra_path.type, img_search_dirs=get_img_search_dirs()) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/db/datamodel.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/db/datamodel.py new file mode 100644 index 0000000000000000000000000000000000000000..361dcbd24103dcacebcde2ea7ac8acef26a7c892 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/db/datamodel.py @@ -0,0 +1,621 @@ +from sqlite3 import Connection, connect +from enum import Enum +from typing import Dict, List, Optional, TypedDict +from scripts.iib.tool import ( + cwd, + get_modified_date, + human_readable_size, + tags_translate, + is_dev, + find, + unique_by +) +from contextlib import closing +import os +import threading + +class FileInfoDict(TypedDict): + type: str + date: float + size: int + name: str + bytes: bytes + created_time: float + fullpath: str + +class Cursor: + def __init__(self, has_next = True, next = ''): + self.has_next = has_next + self.next = next + + +class DataBase: + local = threading.local() + + _initing = False + + num = 0 + + path = "iib.db" + + @classmethod + def get_conn(clz) -> Connection: + # for : sqlite3.ProgrammingError: SQLite objects created in a thread can only be used in that same thread + if hasattr(clz.local, "conn"): + return clz.local.conn + else: + conn = clz.init() + clz.local.conn = conn + return conn + + @classmethod + def init(clz): + # 创建连接并打开数据库 + conn = connect(clz.path if os.path.isabs(clz.path) else os.path.join(cwd, clz.path)) + try: + Floder.create_table(conn) + ImageTag.create_table(conn) + Tag.create_table(conn) + Image.create_table(conn) + ExtraPath.create_table(conn) + finally: + conn.commit() + clz.num += 1 + if is_dev: + print(f"当前连接数{clz.num}") + return conn + + +class Image: + def __init__(self, path, exif=None, size=0, date="", id=None): + self.path = path + self.exif = exif + self.id = id + self.size = size + self.date = date + + def to_file_info(self) -> FileInfoDict: + return { + "type": "file", + "id": self.id, + "date": self.date, + "created_date": self.date, + "size": human_readable_size(self.size), + "is_under_scanned_path": True, + "bytes": self.size, + "name": os.path.basename(self.path), + "fullpath": self.path, + } + + def save(self, conn): + with closing(conn.cursor()) as cur: + cur.execute( + "INSERT OR REPLACE INTO image (path, exif, size, date) VALUES (?, ?, ?, ?)", + (self.path, self.exif, self.size, self.date), + ) + self.id = cur.lastrowid + + def update_path(self, conn: Connection, new_path: str): + self.path = os.path.normpath(new_path) + with closing(conn.cursor()) as cur: + cur.execute( + "UPDATE image SET path = ? WHERE id = ?", + (self.path, self.id) + ) + + @classmethod + def get(cls, conn: Connection, id_or_path): + with closing(conn.cursor()) as cur: + cur.execute( + "SELECT * FROM image WHERE id = ? OR path = ?", (id_or_path, id_or_path) + ) + row = cur.fetchone() + if row is None: + return None + else: + return cls.from_row(row) + + @classmethod + def get_by_ids(cls, conn: Connection, ids: List[int]) -> List["Image"]: + if not ids: + return [] + + query = """ + SELECT * FROM image + WHERE id IN ({}) + """.format( + ",".join("?" * len(ids)) + ) + + with closing(conn.cursor()) as cur: + cur.execute(query, ids) + rows = cur.fetchall() + + images = [] + for row in rows: + images.append(cls.from_row(row)) + return images + + @classmethod + def create_table(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute( + """CREATE TABLE IF NOT EXISTS image ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + path TEXT UNIQUE, + exif TEXT, + size INTEGER, + date TEXT + )""" + ) + cur.execute("CREATE INDEX IF NOT EXISTS image_idx_path ON image(path)") + + @classmethod + def count(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute("SELECT COUNT(*) FROM image") + count = cur.fetchone()[0] + return count + + @classmethod + def from_row(cls, row: tuple): + image = cls(path=row[1], exif=row[2], size=row[3], date=row[4]) + image.id = row[0] + return image + + @classmethod + def remove(cls, conn: Connection, image_id: int) -> None: + with closing(conn.cursor()) as cur: + cur.execute("DELETE FROM image WHERE id = ?", (image_id,)) + conn.commit() + + @classmethod + def safe_batch_remove(cls, conn: Connection, image_ids: List[int]) -> None: + if not(image_ids): + return + with closing(conn.cursor()) as cur: + try: + placeholders = ",".join("?" * len(image_ids)) + cur.execute(f"DELETE FROM image_tag WHERE image_id IN ({placeholders})", image_ids) + cur.execute(f"DELETE FROM image WHERE id IN ({placeholders})", image_ids) + except BaseException as e: + print(e) + finally: + conn.commit() + + @classmethod + def find_by_substring(cls, conn: Connection, substring: str, limit: int = 500, cursor = '') -> tuple[List["Image"], Cursor]: + api_cur = Cursor() + with closing(conn.cursor()) as cur: + if cursor: + sql = f"SELECT * FROM image WHERE (path LIKE ? OR exif LIKE ?) AND (date < ?) ORDER BY date DESC LIMIT ?" + cur.execute(sql, (f"%{substring}%", f"%{substring}%", cursor, limit)) + else: + sql = "SELECT * FROM image WHERE path LIKE ? OR exif LIKE ? ORDER BY date DESC LIMIT ?" + cur.execute(sql, (f"%{substring}%", f"%{substring}%", limit)) + rows = cur.fetchall() + + api_cur.has_next = len(rows) >= limit + images = [] + deleted_ids = [] + for row in rows: + img = cls.from_row(row) + if os.path.exists(img.path): + images.append(img) + else: + deleted_ids.append(img.id) + cls.safe_batch_remove(conn, deleted_ids) + if images: + api_cur.next = str(images[-1].date) + return images, api_cur + + +class Tag: + def __init__(self, name: str, score: int, type: str, count=0): + self.name = name + self.score = score + self.type = type + self.count = count + self.id = None + self.display_name = tags_translate.get(name) + + def save(self, conn): + with closing(conn.cursor()) as cur: + cur.execute( + "INSERT OR REPLACE INTO tag (id, name, score, type, count) VALUES (?, ?, ?, ?, ?)", + (self.id, self.name, self.score, self.type, self.count), + ) + self.id = cur.lastrowid + + @classmethod + def remove(cls, conn, tag_id): + with closing(conn.cursor()) as cur: + cur.execute("DELETE FROM tag WHERE id = ?", (tag_id,)) + conn.commit() + + @classmethod + def get(cls, conn: Connection, id): + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM tag WHERE id = ?", (id,)) + row = cur.fetchone() + if row is None: + return None + else: + return cls.from_row(row) + + @classmethod + def get_all_custom_tag(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM tag where type = 'custom'") + rows = cur.fetchall() + tags: list[Tag] = [] + for row in rows: + tags.append(cls.from_row(row)) + return tags + + @classmethod + def get_all(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM tag") + rows = cur.fetchall() + tags: list[Tag] = [] + for row in rows: + tags.append(cls.from_row(row)) + return tags + + @classmethod + def get_or_create(cls, conn: Connection, name: str, type: str): + assert name and type + with closing(conn.cursor()) as cur: + cur.execute( + "SELECT tag.* FROM tag WHERE name = ? and type = ?", (name, type) + ) + row = cur.fetchone() + if row is None: + tag = cls(name=name, score=0, type=type) + tag.save(conn) + return tag + else: + return cls.from_row(row) + + @classmethod + def from_row(cls, row: tuple): + tag = cls(name=row[1], score=row[2], type=row[3], count=row[4]) + tag.id = row[0] + return tag + + @classmethod + def create_table(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute( + """CREATE TABLE IF NOT EXISTS tag ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT, + score INTEGER, + type TEXT, + count INTEGER, + UNIQUE(name, type) ON CONFLICT REPLACE + ); + """ + ) + cur.execute("CREATE INDEX IF NOT EXISTS tag_idx_name ON tag(name)") + cur.execute( + """INSERT OR IGNORE INTO tag(name, score, type, count) + VALUES ("like", 0, "custom", 0); + """ + ) + + + + +class ImageTag: + def __init__(self, image_id: int, tag_id: int): + assert tag_id and image_id + self.image_id = image_id + self.tag_id = tag_id + + def save(self, conn): + with closing(conn.cursor()) as cur: + cur.execute( + "INSERT INTO image_tag (image_id, tag_id) VALUES (?, ?)", + (self.image_id, self.tag_id), + ) + + @classmethod + def get_tags_for_image( + cls, + conn: Connection, + image_id: int, + tag_id: Optional[int] = None, + type: Optional[str] = None, + ): + with closing(conn.cursor()) as cur: + query = "SELECT tag.* FROM tag INNER JOIN image_tag ON tag.id = image_tag.tag_id WHERE image_tag.image_id = ?" + params = [image_id] + if tag_id: + query += " AND image_tag.tag_id = ?" + params.append(tag_id) + if type: + query += " AND tag.type = ?" + params.append(type) + cur.execute(query, tuple(params)) + rows = cur.fetchall() + return [Tag.from_row(x) for x in rows] + + @classmethod + def get_images_for_tag(cls, conn: Connection, tag_id): + with closing(conn.cursor()) as cur: + cur.execute( + "SELECT image.* FROM image INNER JOIN image_tag ON image.id = image_tag.image_id WHERE image_tag.tag_id = ?", + (tag_id,), + ) + rows = cur.fetchall() + images = [] + for row in rows: + images.append(Image.from_row(row)) + return images + + @classmethod + def create_table(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute( + """CREATE TABLE IF NOT EXISTS image_tag ( + image_id INTEGER, + tag_id INTEGER, + FOREIGN KEY (image_id) REFERENCES image(id), + FOREIGN KEY (tag_id) REFERENCES tag(id), + PRIMARY KEY (image_id, tag_id) + )""" + ) + + @classmethod + def get_images_by_tags( + cls, conn: Connection, tag_dict: Dict[str, List[int]], limit: int = 500, cursor = '' + ) -> tuple[List[Image], Cursor]: + query = """ + SELECT image.id, image.path, image.size,image.date + FROM image + INNER JOIN image_tag ON image.id = image_tag.image_id + """ + + where_clauses = [] + params = [] + + for operator, tag_ids in tag_dict.items(): + if operator == "and": + where_clauses.append( + "tag_id IN ({})".format(",".join("?" * len(tag_ids))) + ) + params.extend(tag_ids) + elif operator == "not" and tag_dict["not"]: + where_clauses.append( + """(image_id NOT IN ( + SELECT image_id + FROM image_tag + WHERE tag_id IN ({}) +))""".format( + ",".join("?" * len(tag_ids)) + ) + ) + params.extend(tag_ids) + elif operator == "or" and tag_dict["or"]: + where_clauses.append( + """(image_id IN ( + SELECT image_id + FROM image_tag + WHERE tag_id IN ({}) + GROUP BY image_id + HAVING COUNT(DISTINCT tag_id) >= 1 +) +)""".format(",".join("?" * len(tag_ids))) + ) + params.extend(tag_ids) + if cursor: + where_clauses.append("(image.date < ?)") + params.append(cursor) + + if where_clauses: + query += " WHERE " + " AND ".join(where_clauses) + + query += " GROUP BY image.id" + + if "and" in tag_dict: + query += " HAVING COUNT(DISTINCT tag_id) = ?" + params.append(len(tag_dict["and"])) + + query += " ORDER BY date DESC LIMIT ?" + params.append(limit) + api_cur = Cursor() + with closing(conn.cursor()) as cur: + cur.execute(query, params) + rows = cur.fetchall() + images = [] + deleted_ids = [] + for row in rows: + img = Image(id=row[0], path=row[1], size=row[2], date=row[3]) + if os.path.exists(img.path): + images.append(img) + else: + deleted_ids.append(img.id) + Image.safe_batch_remove(conn, deleted_ids) + api_cur.has_next = len(rows) >= limit + if images: + api_cur.next = str(images[-1].date) + return images, api_cur + + @classmethod + def batch_get_tags_by_path(cls, conn: Connection, paths: List[str], type = "custom") -> Dict[str, List[Tag]]: + if not paths: + return {} + tag_dict = {} + with closing(conn.cursor()) as cur: + placeholders = ",".join("?" * len(paths)) + query = f""" + SELECT image.path, tag.* FROM image_tag + INNER JOIN image ON image_tag.image_id = image.id + INNER JOIN tag ON image_tag.tag_id = tag.id + WHERE tag.type = '{type}' AND image.path IN ({placeholders}) + """ + cur.execute(query, paths) + rows = cur.fetchall() + for row in rows: + path = row[0] + tag = Tag.from_row(row[1:]) + if path in tag_dict: + tag_dict[path].append(tag) + else: + tag_dict[path] = [tag] + return tag_dict + + @classmethod + def remove( + cls, + conn: Connection, + image_id: Optional[int] = None, + tag_id: Optional[int] = None, + ) -> None: + assert image_id or tag_id + with closing(conn.cursor()) as cur: + if tag_id and image_id: + cur.execute( + "DELETE FROM image_tag WHERE image_id = ? and tag_id = ?", + (image_id, tag_id), + ) + elif tag_id: + cur.execute("DELETE FROM image_tag WHERE tag_id = ?", (tag_id,)) + else: + cur.execute("DELETE FROM image_tag WHERE image_id = ?", (image_id,)) + conn.commit() + + +class Floder: + def __init__(self, id: int, path: str, modified_date: str): + self.id = id + self.path = path + self.modified_date = modified_date + + @classmethod + def create_table(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute( + """CREATE TABLE IF NOT EXISTS folders + (id INTEGER PRIMARY KEY AUTOINCREMENT, + path TEXT, + modified_date TEXT)""" + ) + cur.execute("CREATE INDEX IF NOT EXISTS folders_idx_path ON folders(path)") + + @classmethod + def check_need_update(cls, conn: Connection, folder_path: str): + folder_path = os.path.normpath(folder_path) + with closing(conn.cursor()) as cur: + if not os.path.exists(folder_path): + return False + cur.execute("SELECT * FROM folders WHERE path=?", (folder_path,)) + folder_record = cur.fetchone() # 如果这个文件夹没有记录,或者修改时间与数据库不同,则需要修改 + return not folder_record or ( + folder_record[2] != get_modified_date(folder_path) + ) + + @classmethod + def update_modified_date_or_create(cls, conn: Connection, folder_path: str): + folder_path = os.path.normpath(folder_path) + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM folders WHERE path = ?", (folder_path,)) + row = cur.fetchone() + if row: + cur.execute( + "UPDATE folders SET modified_date = ? WHERE path = ?", + (get_modified_date(folder_path), folder_path), + ) + else: + cur.execute( + "INSERT INTO folders (path, modified_date) VALUES (?, ?)", + (folder_path, get_modified_date(folder_path)), + ) + + @classmethod + def get_expired_dirs(cls, conn: Connection): + dirs: List[str] = [] + with closing(conn.cursor()) as cur: + cur.execute("SELECT * FROM folders") + result_set = cur.fetchall() + extra_paths = ExtraPath.get_extra_paths(conn) + for ep in extra_paths: + if not find(result_set, lambda x : x[1] == ep.path): + dirs.append(ep.path) + for row in result_set: + folder_path = row[1] + if ( + os.path.exists(folder_path) + and get_modified_date(folder_path) != row[2] + ): + dirs.append(folder_path) + return unique_by(dirs, os.path.normpath) + + @classmethod + def remove_folder(cls, conn: Connection, folder_path: str): + folder_path = os.path.normpath(folder_path) + with closing(conn.cursor()) as cur: + cur.execute("DELETE FROM folders WHERE path = ?", (folder_path,)) + +class ExtraPathType(Enum): + scanned = 'scanned' + walk = 'walk' + cli_only = 'cli_access_only' + +class ExtraPath: + def __init__(self, path: str, type: Optional[ExtraPathType] = None): + assert type + self.path = os.path.normpath(path) + self.type = type + + def save(self, conn): + assert self.type in [ExtraPathType.walk, ExtraPathType.scanned] + with closing(conn.cursor()) as cur: + cur.execute( + "INSERT INTO extra_path (path, type) VALUES (?, ?) ON CONFLICT (path) DO UPDATE SET type = ?", + (self.path, self.type.value, self.type.value), + ) + + @classmethod + def get_extra_paths(cls, conn, type: Optional[ExtraPathType] = None) -> List['ExtraPath']: + query = "SELECT * FROM extra_path" + params = () + if type: + query += " WHERE type = ?" + params = (type.value,) + with closing(conn.cursor()) as cur: + cur.execute(query, params) + rows = cur.fetchall() + paths: List[ExtraPath] = [] + for row in rows: + path = row[0] + if os.path.exists(path): + paths.append(ExtraPath(path, ExtraPathType(row[1]))) + else: + cls.remove(conn, path) + return paths + + @classmethod + def remove(cls, conn, path: str, type: Optional[ExtraPathType] = None, img_search_dirs: Optional[List[str]] = []): + with closing(conn.cursor()) as cur: + sql = "DELETE FROM extra_path WHERE path = ?" + path = os.path.normpath(path) + if type: + cur.execute(sql, (path,)) + else: + cur.execute(sql + "AND type = ?", (path, type.value)) + if path not in img_search_dirs: + Floder.remove_folder(conn, path) + conn.commit() + + @classmethod + def create_table(cls, conn): + with closing(conn.cursor()) as cur: + cur.execute( + """CREATE TABLE IF NOT EXISTS extra_path ( + path TEXT PRIMARY KEY, + type TEXT NOT NULL + )""" + ) \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/db/update_image_data.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/db/update_image_data.py new file mode 100644 index 0000000000000000000000000000000000000000..54ac559665c75c7a157111c40bdeefd1d4465504 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/db/update_image_data.py @@ -0,0 +1,125 @@ +from typing import Dict, List +from scripts.iib.db.datamodel import Image as DbImg, Tag, ImageTag, DataBase, Floder +import os +from PIL import Image +from scripts.iib.tool import ( + read_sd_webui_gen_info_from_image, + parse_generation_parameters, + is_valid_image_path, + get_modified_date, + is_dev, + get_comfyui_exif_data, + comfyui_exif_data_to_str, + is_img_created_by_comfyui, + is_img_created_by_comfyui_with_webui_gen_info +) + +from scripts.iib.logger import logger + + +# 定义一个函数来获取图片文件的EXIF数据 +def get_exif_data(file_path): + info = '' + params = None + try: + with Image.open(file_path) as img: + if is_img_created_by_comfyui(img): + if is_img_created_by_comfyui_with_webui_gen_info(img): + info = read_sd_webui_gen_info_from_image(img, file_path) + params = parse_generation_parameters(info) + else: + params = get_comfyui_exif_data(img) + info = comfyui_exif_data_to_str(params) + else: + info = read_sd_webui_gen_info_from_image(img, file_path) + params = parse_generation_parameters(info) + except Exception as e: + if is_dev: + logger.error("get_exif_data %s", e) + return params, info + + +def update_image_data(search_dirs: List[str]): + conn = DataBase.get_conn() + tag_incr_count_rec: Dict[int, int] = {} + + def safe_save_img_tag(img_tag: ImageTag): + tag_incr_count_rec[img_tag.tag_id] = ( + tag_incr_count_rec.get(img_tag.tag_id, 0) + 1 + ) + img_tag.save(conn) # 原先用来处理一些意外,但是写的正确完全没问题,去掉了try catch + + # 递归处理每个文件夹 + def process_folder(folder_path: str): + if not Floder.check_need_update(conn, folder_path): + return + print(f"Processing folder: {folder_path}") + for filename in os.listdir(folder_path): + file_path = os.path.normpath(os.path.join(folder_path, filename)) + + if os.path.isdir(file_path): + process_folder(file_path) + + elif is_valid_image_path(file_path): + img = DbImg.get(conn, file_path) + if img: # 已存在的跳过 + if img.date == get_modified_date(img.path): + continue + else: + DbImg.safe_batch_remove(conn=conn, image_ids=[img.id]) + parsed_params, info = get_exif_data(file_path) + img = DbImg( + file_path, + info, + os.path.getsize(file_path), + get_modified_date(file_path), + ) + img.save(conn) + + if not parsed_params: + continue + meta = parsed_params.get("meta", {}) + lora = parsed_params.get("lora", []) + lyco = parsed_params.get("lyco", []) + pos = parsed_params["pos_prompt"] + size_tag = Tag.get_or_create( + conn, + str(meta.get("Size-1", 0)) + " * " + str(meta.get("Size-2", 0)), + type="size", + ) + safe_save_img_tag(ImageTag(img.id, size_tag.id)) + + for k in [ + "Model", + "Sampler", + "Postprocess upscale by", + "Postprocess upscaler", + ]: + v = meta.get(k) + if not v: + continue + tag = Tag.get_or_create(conn, str(v), k) + safe_save_img_tag(ImageTag(img.id, tag.id)) + for i in lora: + tag = Tag.get_or_create(conn, i["name"], "lora") + safe_save_img_tag(ImageTag(img.id, tag.id)) + for i in lyco: + tag = Tag.get_or_create(conn, i["name"], "lyco") + safe_save_img_tag(ImageTag(img.id, tag.id)) + for k in pos: + tag = Tag.get_or_create(conn, k, "pos") + safe_save_img_tag(ImageTag(img.id, tag.id)) + # neg暂时跳过感觉个没人会搜索这个 + + # 提交对数据库的更改 + Floder.update_modified_date_or_create(conn, folder_path) + conn.commit() + + for dir in search_dirs: + process_folder(dir) + conn.commit() + for tag_id in tag_incr_count_rec: + tag = Tag.get(conn, tag_id) + tag.count += tag_incr_count_rec[tag_id] + tag.save(conn) + conn.commit() diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/logger.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/logger.py new file mode 100644 index 0000000000000000000000000000000000000000..3d795279695ff805e6076982e02794c5c6912581 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/logger.py @@ -0,0 +1,20 @@ + +from scripts.iib.tool import is_dev,cwd + +import logging +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + +console_handler = logging.StreamHandler() +console_handler.setLevel(logging.INFO) + +file_handler = logging.FileHandler(f"{cwd}/log.log") +file_handler.setLevel(logging.DEBUG) + +formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +console_handler.setFormatter(formatter) +file_handler.setFormatter(formatter) + +logger.addHandler(file_handler) +if is_dev: + logger.addHandler(console_handler) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/tool.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/tool.py new file mode 100644 index 0000000000000000000000000000000000000000..6fada105b371ea6314296495238f1842871b9a92 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib/tool.py @@ -0,0 +1,523 @@ +from datetime import datetime +import os +import platform +import re +import tempfile +import imghdr +import subprocess +from typing import Dict, List +import sys +import piexif +import piexif.helper +import json +import zipfile +from PIL import Image + +sd_img_dirs = [ + "outdir_txt2img_samples", + "outdir_img2img_samples", + "outdir_save", + "outdir_extras_samples", + "outdir_grids", + "outdir_img2img_grids", + "outdir_samples", + "outdir_txt2img_grids", +] + + +is_dev = os.getenv("APP_ENV") == "dev" +is_nuitka = "__compiled__" in globals() +cwd = os.getcwd() if is_nuitka else os.path.normpath(os.path.join(__file__, "../../../")) +is_win = platform.system().lower().find("windows") != -1 + + + + +try: + from dotenv import load_dotenv + + load_dotenv(os.path.join(cwd, ".env")) +except Exception as e: + print(e) + + +def get_sd_webui_conf(**kwargs): + try: + from modules.shared import opts + + return opts.data + except: + pass + try: + sd_conf_path = kwargs.get("sd_webui_config") + with open(sd_conf_path, "r") as f: + obj = json.loads(f.read()) + if kwargs.get("sd_webui_path_relative_to_config"): + for dir in sd_img_dirs: + if obj[dir] and not os.path.isabs(obj[dir]): + obj[dir] = os.path.normpath( + os.path.join(sd_conf_path, "../", obj[dir]) + ) + return obj + except: + pass + return {} + +def normalize_paths(paths: List[str], base = cwd): + """ + Normalize a list of paths, ensuring that each path is an absolute path with no redundant components. + + Args: + paths (List[str]): A list of paths to be normalized. + + Returns: + List[str]: A list of normalized paths. + """ + res: List[str] = [] + for path in paths: + # Skip empty or blank paths + if not path or len(path.strip()) == 0: + continue + # If the path is already an absolute path, use it as is + if os.path.isabs(path): + abs_path = path + # Otherwise, make the path absolute by joining it with the current working directory + else: + abs_path = os.path.join(base, path) + # If the absolute path exists, add it to the result after normalizing it + if os.path.exists(abs_path): + res.append(os.path.normpath(abs_path)) + return res + +def to_abs_path(path): + if not os.path.isabs(path): + path = os.path.join(os.getcwd(), path) + return os.path.normpath(path) + + +def get_valid_img_dirs( + conf, + keys=sd_img_dirs, +): + # 获取配置项 + paths = [conf.get(key) for key in keys] + + # 判断路径是否有效并转为绝对路径 + abs_paths = [] + for path in paths: + if not path or len(path.strip()) == 0: + continue + if os.path.isabs(path): # 已经是绝对路径 + abs_path = path + else: # 转为绝对路径 + abs_path = os.path.join(os.getcwd(), path) + if os.path.exists(abs_path): # 判断路径是否存在 + abs_paths.append(os.path.normpath(abs_path)) + + return abs_paths + + +def human_readable_size(size_bytes): + """ + Converts bytes to a human-readable format. + """ + # define the size units + units = ("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB") + # calculate the logarithm of the input value with base 1024 + size = int(size_bytes) + if size == 0: + return "0B" + i = 0 + while size >= 1024 and i < len(units) - 1: + size /= 1024 + i += 1 + # round the result to two decimal points and return as a string + return "{:.2f} {}".format(size, units[i]) + + +def get_windows_drives(): + drives = [] + for drive in range(ord("A"), ord("Z") + 1): + drive_name = chr(drive) + ":/" + if os.path.exists(drive_name): + drives.append(drive_name) + return drives + + +pattern = re.compile(r"(\d+\.?\d*)([KMGT]?B)", re.IGNORECASE) + + +def convert_to_bytes(file_size_str): + match = re.match(pattern, file_size_str) + if match: + size_str, unit_str = match.groups() + size = float(size_str) + unit = unit_str.upper() + if unit == "KB": + size *= 1024 + elif unit == "MB": + size *= 1024**2 + elif unit == "GB": + size *= 1024**3 + elif unit == "TB": + size *= 1024**4 + return int(size) + else: + raise ValueError(f"Invalid file size string '{file_size_str}'") + + +def is_valid_image_path(path): + """ + 判断给定的路径是否是图像文件 + """ + abs_path = os.path.abspath(path) # 转为绝对路径 + if not os.path.exists(abs_path): # 判断路径是否存在 + return False + if not os.path.isfile(abs_path): # 判断是否是文件 + return False + if not imghdr.what(abs_path): # 判断是否是图像文件 + return False + return True + + + +def create_zip_file(file_paths: List[str], zip_file_name: str): + """ + 将文件打包成一个压缩包 + + Args: + file_paths: 文件路径的列表 + zip_file_name: 压缩包的文件名 + + Returns: + 无返回值 + """ + with zipfile.ZipFile(zip_file_name, 'w', zipfile.ZIP_DEFLATED) as zip_file: + for file_path in file_paths: + if os.path.isfile(file_path): + zip_file.write(file_path, os.path.basename(file_path)) + elif os.path.isdir(file_path): + for root, _, files in os.walk(file_path): + for file in files: + full_path = os.path.join(root, file) + zip_file.write(full_path, os.path.relpath(full_path, file_path)) + +def get_temp_path(): + """获取跨平台的临时文件目录路径""" + temp_path = None + try: + # 尝试获取系统环境变量中的临时文件目录路径 + temp_path = ( + os.environ.get("TMPDIR") or os.environ.get("TMP") or os.environ.get("TEMP") + ) + except Exception as e: + print("获取系统环境变量临时文件目录路径失败,错误信息:", e) + + # 如果系统环境变量中没有设置临时文件目录路径,则使用 Python 的 tempfile 模块创建临时文件目录 + if not temp_path: + try: + temp_path = tempfile.gettempdir() + except Exception as e: + print("使用 Python 的 tempfile 模块创建临时文件目录失败,错误信息:", e) + + # 确保临时文件目录存在 + if not os.path.exists(temp_path): + try: + os.makedirs(temp_path) + except Exception as e: + print("创建临时文件目录失败,错误信息:", e) + + return temp_path + + +temp_path = get_temp_path() + +def get_secret_key_required(): + try: + from modules.shared import cmd_opts + return bool(cmd_opts.gradio_auth) + except: + return False + +is_secret_key_required = get_secret_key_required() + +def get_enable_access_control(): + ctrl = os.getenv("IIB_ACCESS_CONTROL") + if ctrl == "enable": + return True + if ctrl == "disable": + return False + try: + from modules.shared import cmd_opts + + return ( + cmd_opts.share or cmd_opts.ngrok or cmd_opts.listen or cmd_opts.server_name + ) + except: + pass + return False + + +enable_access_control = get_enable_access_control() + + +def get_locale(): + import locale + + env_lang = os.getenv("IIB_SERVER_LANG") + if env_lang in ["zh", "en"]: + return env_lang + lang, _ = locale.getdefaultlocale() + return "zh" if lang and lang.startswith("zh") else "en" + + +locale = get_locale() + + +def get_formatted_date(timestamp: float) -> str: + return datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S") + + +def get_modified_date(folder_path: str): + return get_formatted_date(os.path.getmtime(folder_path)) + + +def get_created_date(folder_path: str): + return get_formatted_date(os.path.getctime(folder_path)) + + +def unique_by(seq, key_func=lambda x: x): + seen = set() + return [x for x in seq if not (key := key_func(x)) in seen and not seen.add(key)] + + +def find(lst, comparator): + return next((item for item in lst if comparator(item)), None) + + +def findIndex(lst, comparator): + return next((i for i, item in enumerate(lst) if comparator(item)), -1) + + +def get_img_geninfo_txt_path(path: str): + txt_path = re.sub(r"\.\w+$", ".txt", path) + if os.path.exists(txt_path): + return txt_path + +def is_img_created_by_comfyui(img: Image): + return img.info.get('prompt') and img.info.get('workflow') + +def is_img_created_by_comfyui_with_webui_gen_info(img: Image): + return img.info.get('parameters') + +def get_comfyui_exif_data(img: Image): + prompt = img.info.get('prompt') + if not prompt: + return {} + meta_key = '3' + data: Dict[str, any] = json.loads(prompt) + for i in range(3, 32): + try: + i = str(i) + if data[i]["class_type"].startswith("KSampler"): + meta_key = i + break + except: + pass + meta = {} + KSampler_entry = data[meta_key]["inputs"] + meta["Sampler"] = KSampler_entry["sampler_name"] + meta["Model"] = data[KSampler_entry["model"][0]]["inputs"]["ckpt_name"] + def get_text_from_clip(idx: str) : + text = data[idx]["inputs"]["text"] + if isinstance(text, list): # type:CLIPTextEncode (NSP) mode:Wildcards + text = data[text[0]]["inputs"]["text"] + return text.strip() + pos_prompt = get_text_from_clip(KSampler_entry["positive"][0]) + neg_prompt = get_text_from_clip(KSampler_entry["negative"][0]) + pos_prompt_arr = unique_by(parse_prompt(pos_prompt)["pos_prompt"]) + return { + "meta": meta, + "pos_prompt": pos_prompt_arr, + "pos_prompt_raw": pos_prompt, + "neg_prompt_raw" : neg_prompt + } + +def comfyui_exif_data_to_str(data): + res = data["pos_prompt_raw"] + "\nNegative prompt: " + data["neg_prompt_raw"] + "\n" + meta_arr = [] + for k,v in data["meta"].items(): + meta_arr.append(f'{k}: {v}') + return res + ", ".join(meta_arr) + +def read_sd_webui_gen_info_from_image(image: Image, path="") -> str: + """ + Reads metadata from an image file. + + Args: + image (PIL.Image.Image): The image object to read metadata from. + path (str): Optional. The path to the image file. Used to look for a .txt file with additional metadata. + + Returns: + str: The metadata as a string. + """ + items = image.info or {} + geninfo = items.pop("parameters", None) + + if "exif" in items: + exif = piexif.load(items["exif"]) + exif_comment = (exif or {}).get("Exif", {}).get(piexif.ExifIFD.UserComment, b"") + + try: + exif_comment = piexif.helper.UserComment.load(exif_comment) + except ValueError: + exif_comment = exif_comment.decode("utf8", errors="ignore") + + if exif_comment: + items["exif comment"] = exif_comment + geninfo = exif_comment + + if not geninfo and path: + try: + txt_path = get_img_geninfo_txt_path(path) + if txt_path: + with open(txt_path) as f: + geninfo = f.read() + except Exception as e: + pass + + return geninfo + + +re_param_code = r'\s*([\w ]+):\s*("(?:\\"[^,]|\\"|\\|[^\"])+"|[^,]*)(?:,|$)' +re_param = re.compile(re_param_code) +re_imagesize = re.compile(r"^(\d+)x(\d+)$") +re_lora_prompt = re.compile("", re.IGNORECASE) +re_lora_extract = re.compile(r"([\w_\s.]+)(?:\d+)?") +re_lyco_prompt = re.compile("", re.IGNORECASE) +re_parens = re.compile(r"[\\/\[\](){}]+") + + +def lora_extract(lora: str): + """ + 提取yoshino yoshino(2a79aa5adc4a) + """ + res = re_lora_extract.match(lora) + return res.group(1) if res else lora + + +def parse_prompt(x: str): + x = re.sub( + re_parens, "", x.replace(",", ",").replace("-", " ").replace("_", " ") + ) + tag_list = [x.strip() for x in x.split(",")] + res = [] + lora_list = [] + lyco_list = [] + for tag in tag_list: + if len(tag) == 0: + continue + idx_colon = tag.find(":") + if idx_colon != -1: + if re.search(re_lora_prompt, tag): + lora_res = re.search(re_lora_prompt, tag) + lora_list.append( + {"name": lora_res.group(1), "value": float(lora_res.group(2))} + ) + elif re.search(re_lyco_prompt, tag): + lyco_res = re.search(re_lyco_prompt, tag) + lyco_list.append( + {"name": lyco_res.group(1), "value": float(lyco_res.group(2))} + ) + else: + tag = tag[0:idx_colon] + if len(tag): + res.append(tag.lower()) + else: + res.append(tag.lower()) + return {"pos_prompt": res, "lora": lora_list, "lyco": lyco_list} + + +def parse_generation_parameters(x: str): + res = {} + prompt = "" + negative_prompt = "" + done_with_prompt = False + if not x: + return {"meta": {}, "pos_prompt": [], "lora": [], "lyco": []} + *lines, lastline = x.strip().split("\n") + if len(re_param.findall(lastline)) < 3: + lines.append(lastline) + lastline = "" + if len(lines) == 1 and lines[0].startswith("Postprocess"): # 把上面改成<2应该也可以,当时不敢动 + lastline = lines[ + 0 + ] # 把Postprocess upscale by: 4, Postprocess upscaler: R-ESRGAN 4x+ Anime6B 推到res解析 + lines = [] + for i, line in enumerate(lines): + line = line.strip() + if line.startswith("Negative prompt:"): + done_with_prompt = True + line = line[16:].strip() + + if done_with_prompt: + negative_prompt += ("" if negative_prompt == "" else "\n") + line + else: + prompt += ("" if prompt == "" else "\n") + line + + for k, v in re_param.findall(lastline): + v = v[1:-1] if v[0] == '"' and v[-1] == '"' else v + m = re_imagesize.match(v) + if m is not None: + res[k + "-1"] = m.group(1) + res[k + "-2"] = m.group(2) + else: + res[k] = v + prompt_parse_res = parse_prompt(prompt) + lora = prompt_parse_res["lora"] + for k in res: + k_s = str(k) + if k_s.startswith("AddNet Module") and str(res[k]).lower() == "lora": + model = res[k_s.replace("Module", "Model")] + value = res.get(k_s.replace("Module", "Weight A"), "1") + lora.append({"name": lora_extract(model), "value": float(value)}) + return { + "meta": res, + "pos_prompt": unique_by(prompt_parse_res["pos_prompt"]), + "lora": unique_by(lora, lambda x: x["name"].lower()), + "lyco": unique_by(prompt_parse_res["lyco"], lambda x: x["name"].lower()), + } + + +tags_translate: Dict[str, str] = {} +try: + import codecs + + with codecs.open(os.path.join(cwd, "tags-translate.csv"), "r", "utf-8") as tag: + tags_translate_str = tag.read() + for line in tags_translate_str.splitlines(): + en, mapping = line.split(",") + tags_translate[en.strip()] = mapping.strip() +except Exception as e: + pass + + +def open_folder(folder_path, file_path=None): + folder = os.path.realpath(folder_path) + if file_path: + file = os.path.join(folder, file_path) + if os.name == "nt": + subprocess.run(["explorer", "/select,", file]) + elif sys.platform == "darwin": + subprocess.run(["open", "-R", file]) + elif os.name == "posix": + subprocess.run(["xdg-open", file]) + else: + if os.name == "nt": + subprocess.run(["explorer", folder]) + elif sys.platform == "darwin": + subprocess.run(["open", folder]) + elif os.name == "posix": + subprocess.run(["xdg-open", folder]) + + diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib_setup.py b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib_setup.py new file mode 100644 index 0000000000000000000000000000000000000000..90733a8199fae900646d5ce2eff376cecf1197d9 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/scripts/iib_setup.py @@ -0,0 +1,78 @@ +from scripts.iib.api import infinite_image_browsing_api, send_img_path +from modules import script_callbacks, generation_parameters_copypaste as send +from scripts.iib.tool import locale +from scripts.iib.tool import read_sd_webui_gen_info_from_image +from PIL import Image +from scripts.iib.logger import logger + +from fastapi import FastAPI +import gradio as gr + +""" +api函数声明和启动分离方便另外一边被外部调用 +""" + + +def on_ui_tabs(): + + with gr.Blocks(analytics_enabled=False) as view: + with gr.Row(): + with gr.Column(): + gr.HTML("", elem_id="iib_top") + gr.HTML("error", elem_id="infinite_image_browsing_container_wrapper") + # 以下是使用2个组件模拟粘贴过程 + img = gr.Image( + type="pil", + elem_id="iib_hidden_img", + ) + + def on_img_change(): + send_img_path["value"] = "" # 真正收到图片改变才允许放行 + + img.change(on_img_change) + + img_update_trigger = gr.Button( + "button", elem_id="iib_hidden_img_update_trigger" + ) + + # 修改文本和图像,等待修改完成后前端触发粘贴按钮 + # 有时在触发后收不到回调,可能是在解析params。txt时除了问题删除掉就行了 + def img_update_func(): + try: + path = send_img_path.get("value") + # logger.info("img_update_func %s", path) + img = Image.open(path) + info = read_sd_webui_gen_info_from_image(img, path) + return img, info + except Exception as e: + logger.error("img_update_func err %s",e) + + img_file_info = gr.Textbox(elem_id="iib_hidden_img_file_info") + img_update_trigger.click(img_update_func, outputs=[img, img_file_info]) + for tab in ["txt2img", "img2img", "inpaint", "extras"]: + btn = gr.Button(f"Send to {tab}", elem_id=f"iib_hidden_tab_{tab}") + # 注册粘贴 + send.register_paste_params_button( + send.ParamBinding( + paste_button=btn, + tabname=tab, + source_image_component=img, + source_text_component=img_file_info, + ) + ) + + return ( + ( + view, + "无边图像浏览" if locale == "zh" else "Infinite image browsing", + "infinite-image-browsing", + ), + ) + +def on_app_started(_: gr.Blocks, app: FastAPI) -> None: + # 第一个参数是SD-WebUI传进来的gr.Blocks,但是不需要使用 + infinite_image_browsing_api(app) + + +script_callbacks.on_ui_tabs(on_ui_tabs) +script_callbacks.on_app_started(on_app_started) diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/style.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/style.css new file mode 100644 index 0000000000000000000000000000000000000000..3a937d686bd254d8c2ae8733515db7dfe1f8b008 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/style.css @@ -0,0 +1,3 @@ +[id^="iib_hidden_"] { + display: none !important; +} \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.eslintrc.cjs b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.eslintrc.cjs new file mode 100644 index 0000000000000000000000000000000000000000..ed4a343b3fc537069af67a196be8c57f12dd67be --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.eslintrc.cjs @@ -0,0 +1,26 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + extends: [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + ], + parserOptions: { + ecmaVersion: 'latest' + }, + rules: { + 'vue/multi-word-component-names': ['error', { ignores: ['index', 'index.vue'] }], + 'no-console': 'off', + 'quote-props': ['error', 'as-needed'], + quotes: ['error', 'single'], + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-explicit-any': 'off', + indent: 'off', + '@typescript-eslint/indent': ['error', 2] + } +} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.gitignore b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..234f2f1beb6f684af9f47861d3a04652e31f23e4 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.prettierrc.json b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.prettierrc.json new file mode 100644 index 0000000000000000000000000000000000000000..66e23359c3dabfe3929b4e2fa049c41037afb15f --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.vscode/extensions.json b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..c0a6e5a48110e472b09d68afa2a030af6ab3208b --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/README.md b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4b8e0d35c8d9f86718ce422ed43a8729586ead2b --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/README.md @@ -0,0 +1,47 @@ +# vue + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +yarn +``` + +### Compile and Hot-Reload for Development + +```sh +yarn dev +``` + + +### Compile and Minify for Production, Deliver to Production Mode Resources + +```sh +yarn build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +yarn lint +``` diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/build.ts b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/build.ts new file mode 100644 index 0000000000000000000000000000000000000000..7854c3acff230297b3eba6d1eb86957badd4b883 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/build.ts @@ -0,0 +1,27 @@ +import { execSync } from 'child_process' +import { readFile, rm, writeFile } from 'fs/promises' +import { exit } from 'process' + +const main = async () => { + try { + console.log(execSync('vue-tsc && vite build').toString('utf8')) + } catch (error: any) { + if (error.stdout && error.stderr) { + console.log(error.stdout.toString('utf8')) + console.error(error.stderr.toString('utf8')) + exit(2) + } else { + throw error + } + } + try { + await rm('../javascript/index.js') + // eslint-disable-next-line no-empty + } catch (error) { + + } + const html = (await readFile('dist/index.html')).toString() + const js = (await readFile('index.tpl.js')).toString().replace('__built_html__', html) + await writeFile('../javascript/index.js', js) +} +main() diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/components.d.ts b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/components.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5f9c558c944a73937126dd0e803775cc2c0d138a --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/components.d.ts @@ -0,0 +1,47 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +import '@vue/runtime-core' + +export {} + +declare module '@vue/runtime-core' { + export interface GlobalComponents { + AAlert: typeof import('ant-design-vue/es')['Alert'] + ABreadcrumb: typeof import('ant-design-vue/es')['Breadcrumb'] + ABreadcrumbItem: typeof import('ant-design-vue/es')['BreadcrumbItem'] + AButton: typeof import('ant-design-vue/es')['Button'] + ACheckbox: typeof import('ant-design-vue/es')['Checkbox'] + ACollapse: typeof import('ant-design-vue/es')['Collapse'] + ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel'] + ADrawer: typeof import('ant-design-vue/es')['Drawer'] + ADropdown: typeof import('ant-design-vue/es')['Dropdown'] + AForm: typeof import('ant-design-vue/es')['Form'] + AFormItem: typeof import('ant-design-vue/es')['FormItem'] + AImage: typeof import('ant-design-vue/es')['Image'] + AInput: typeof import('ant-design-vue/es')['Input'] + AInputGroup: typeof import('ant-design-vue/es')['InputGroup'] + AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] + AMenu: typeof import('ant-design-vue/es')['Menu'] + AMenuDivider: typeof import('ant-design-vue/es')['MenuDivider'] + AMenuItem: typeof import('ant-design-vue/es')['MenuItem'] + AModal: typeof import('ant-design-vue/es')['Modal'] + ASelect: typeof import('ant-design-vue/es')['Select'] + ASkeleton: typeof import('ant-design-vue/es')['Skeleton'] + ASlider: typeof import('ant-design-vue/es')['Slider'] + ASpin: typeof import('ant-design-vue/es')['Spin'] + ASubMenu: typeof import('ant-design-vue/es')['SubMenu'] + ASwitch: typeof import('ant-design-vue/es')['Switch'] + ATabPane: typeof import('ant-design-vue/es')['TabPane'] + ATabs: typeof import('ant-design-vue/es')['Tabs'] + ATag: typeof import('ant-design-vue/es')['Tag'] + ATooltip: typeof import('ant-design-vue/es')['Tooltip'] + ContextMenu: typeof import('./src/components/ContextMenu.vue')['default'] + FileItem: typeof import('./src/components/FileItem.vue')['default'] + NumInput: typeof import('./src/components/numInput.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + } +} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/FileItem-8394fb78.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/FileItem-8394fb78.js new file mode 100644 index 0000000000000000000000000000000000000000..42f10ae18865fa2a8c0fa3ef03e8324b88c45913 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/FileItem-8394fb78.js @@ -0,0 +1,4 @@ +var fn=Object.defineProperty;var vn=(e,t,n)=>t in e?fn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Qe=(e,t,n)=>(vn(e,typeof t!="symbol"?t+"":t,n),n);import{P as $e,c5 as pn,a as ie,d as me,bq as Nt,u as Ne,c as w,b$ as zt,_ as hn,V as de,a0 as Ae,ao as U,bL as ut,a3 as dt,bo as mn,h as le,c6 as gn,b as yn,ay as bn,c7 as wn,a2 as ft,bK as An,c8 as kn,c9 as Sn,$ as H,b0 as Cn,z as te,aA as In,a1 as En,ag as ae,ca as On,aR as _n,cb as Pn,cc as xn,aM as Qt,ar as Me,bn as Ye,cd as Tn,ce as $n,c4 as Se,cf as Mn,cg as Bn,R as ue,ch as Fn,L as ne,ci as Dt,ai as L,U as Nn,cj as Ze,x as j,ck as Lt,cl as vt,cm as zn,cn as Qn,co as jt,cp as Rt,k as Xe,an as Dn,cq as Ht,al as ee,cr as et,l as he,aC as Be,aw as Ln,aj as De,cs as jn,ct as pt,as as Vt,bQ as ht,bP as Rn,cu as Oe,cv as Hn,aD as Vn,cw as Z,bO as Ut,cx as Un,cy as Jn,t as Ve,am as mt,aq as ge,cz as gt,c3 as Wn,J as Kn,bZ as yt,cA as qn,bY as Gn,cB as Yn,cC as Zn,at as Xn,au as ei,ax as Jt,o as x,m as W,cD as ti,cE as ni,cF as ii,cG as ai,cH as ri,a5 as li,y as V,cI as Ce,C as Y,n as F,A as be,cJ as bt,bG as si,cK as oi,B as ci,N as fe,v as R,r as J,W as Wt,cL as ui,c0 as di,M as Kt,cM as fi,cN as vi,p as re,ae as pi,cO as hi,cP as mi,X as gi}from"./index-cc731081.js";import{h as yi,r as bi,a as wi,t as Ai}from"./db-66d20dea.js";import{t as Le,l as ve,C as ki,g as Si}from"./shortcut-911a6445.js";var qt=function(){return{arrow:{type:[Boolean,Object],default:void 0},trigger:{type:[Array,String]},overlay:$e.any,visible:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},align:{type:Object},getPopupContainer:Function,prefixCls:String,transitionName:String,placement:String,overlayClassName:String,overlayStyle:{type:Object,default:void 0},forceRender:{type:Boolean,default:void 0},mouseEnterDelay:Number,mouseLeaveDelay:Number,openClassName:String,minOverlayWidthMatchTrigger:{type:Boolean,default:void 0},destroyPopupOnHide:{type:Boolean,default:void 0},onVisibleChange:{type:Function},"onUpdate:visible":{type:Function}}},je=pn(),Ci=function(){return ie(ie({},qt()),{},{type:je.type,size:String,htmlType:je.htmlType,href:String,disabled:{type:Boolean,default:void 0},prefixCls:String,icon:$e.any,title:String,loading:je.loading,onClick:{type:Function}})},Ii=["type","disabled","loading","htmlType","class","overlay","trigger","align","visible","onVisibleChange","placement","href","title","icon","mouseEnterDelay","mouseLeaveDelay","overlayClassName","overlayStyle","destroyPopupOnHide","onClick","onUpdate:visible"],Ei=de.Group;const Fe=me({compatConfig:{MODE:3},name:"ADropdownButton",inheritAttrs:!1,__ANT_BUTTON:!0,props:Nt(Ci(),{trigger:"hover",placement:"bottomRight",type:"default"}),slots:["icon","leftButton","rightButton","overlay"],setup:function(t,n){var i=n.slots,a=n.attrs,r=n.emit,v=function(S){r("update:visible",S),r("visibleChange",S)},c=Ne("dropdown-button",t),h=c.prefixCls,b=c.direction,d=c.getPopupContainer;return function(){var m,S,p=ie(ie({},t),a),l=p.type,s=l===void 0?"default":l,o=p.disabled,f=p.loading,A=p.htmlType,g=p.class,u=g===void 0?"":g,C=p.overlay,O=C===void 0?(m=i.overlay)===null||m===void 0?void 0:m.call(i):C,I=p.trigger,E=p.align,P=p.visible;p.onVisibleChange;var k=p.placement,$=k===void 0?b.value==="rtl"?"bottomLeft":"bottomRight":k,M=p.href,Q=p.title,_=p.icon,z=_===void 0?((S=i.icon)===null||S===void 0?void 0:S.call(i))||w(zt,null,null):_,D=p.mouseEnterDelay,y=p.mouseLeaveDelay,T=p.overlayClassName,B=p.overlayStyle,q=p.destroyPopupOnHide,K=p.onClick;p["onUpdate:visible"];var X=hn(p,Ii),G={align:E,disabled:o,trigger:o?[]:I,placement:$,getPopupContainer:d.value,onVisibleChange:v,mouseEnterDelay:D,mouseLeaveDelay:y,visible:P,overlayClassName:T,overlayStyle:B,destroyPopupOnHide:q},oe=w(de,{type:s,disabled:o,loading:f,onClick:K,htmlType:A,href:M,title:Q},{default:i.default}),ce=w(de,{type:s,icon:z},null);return w(Ei,ie(ie({},X),{},{class:Ae(h.value,u)}),{default:function(){return[i.leftButton?i.leftButton({button:oe}):oe,w(pe,G,{default:function(){return[i.rightButton?i.rightButton({button:ce}):ce]},overlay:function(){return O}})]}})}}});var Gt=me({compatConfig:{MODE:3},name:"ADropdown",inheritAttrs:!1,props:Nt(qt(),{mouseEnterDelay:.15,mouseLeaveDelay:.1,placement:"bottomLeft",trigger:"hover"}),slots:["overlay"],setup:function(t,n){var i=n.slots,a=n.attrs,r=n.emit,v=Ne("dropdown",t),c=v.prefixCls,h=v.rootPrefixCls,b=v.direction,d=v.getPopupContainer,m=U(function(){var s=t.placement,o=s===void 0?"":s,f=t.transitionName;return f!==void 0?f:o.indexOf("top")>=0?"".concat(h.value,"-slide-down"):"".concat(h.value,"-slide-up")}),S=function(){var o,f,A,g=t.overlay||((o=i.overlay)===null||o===void 0?void 0:o.call(i)),u=Array.isArray(g)?g[0]:g;if(!u)return null;var C=u.props||{};ut(!C.mode||C.mode==="vertical","Dropdown",'mode="'.concat(C.mode,`" is not supported for Dropdown's Menu.`));var O=C.selectable,I=O===void 0?!1:O,E=C.expandIcon,P=E===void 0?(f=u.children)===null||f===void 0||(A=f.expandIcon)===null||A===void 0?void 0:A.call(f):E,k=typeof P<"u"&&ft(P)?P:w("span",{class:"".concat(c.value,"-menu-submenu-arrow")},[w(An,{class:"".concat(c.value,"-menu-submenu-arrow-icon")},null)]),$=ft(u)?dt(u,{mode:"vertical",selectable:I,expandIcon:function(){return k}}):u;return $},p=U(function(){var s=t.placement;if(!s)return b.value==="rtl"?"bottomRight":"bottomLeft";if(s.includes("Center")){var o=s.slice(0,s.indexOf("Center"));return ut(!s.includes("Center"),"Dropdown","You are using '".concat(s,"' placement in Dropdown, which is deprecated. Try to use '").concat(o,"' instead.")),o}return s}),l=function(o){r("update:visible",o),r("visibleChange",o)};return function(){var s,o,f=t.arrow,A=t.trigger,g=t.disabled,u=t.overlayClassName,C=(s=i.default)===null||s===void 0?void 0:s.call(i)[0],O=dt(C,mn({class:Ae(C==null||(o=C.props)===null||o===void 0?void 0:o.class,le({},"".concat(c.value,"-rtl"),b.value==="rtl"),"".concat(c.value,"-trigger"))},g?{disabled:g}:{})),I=Ae(u,le({},"".concat(c.value,"-rtl"),b.value==="rtl")),E=g?[]:A,P;E&&E.indexOf("contextmenu")!==-1&&(P=!0);var k=gn({arrowPointAtCenter:yn(f)==="object"&&f.pointAtCenter,autoAdjustOverflow:!0}),$=bn(ie(ie(ie({},t),a),{},{builtinPlacements:k,overlayClassName:I,arrow:f,alignPoint:P,prefixCls:c.value,getPopupContainer:d.value,transitionName:m.value,trigger:E,onVisibleChange:l,placement:p.value}),["overlay","onUpdate:visible"]);return w(wn,$,{default:function(){return[O]},overlay:S})}}});Gt.Button=Fe;const pe=Gt;var Oi=function(){return{prefixCls:String,checked:{type:Boolean,default:void 0},onChange:{type:Function},onClick:{type:Function},"onUpdate:checked":Function}},_i=me({compatConfig:{MODE:3},name:"ACheckableTag",props:Oi(),setup:function(t,n){var i=n.slots,a=n.emit,r=Ne("tag",t),v=r.prefixCls,c=function(d){var m=t.checked;a("update:checked",!m),a("change",!m),a("click",d)},h=U(function(){var b;return Ae(v.value,(b={},le(b,"".concat(v.value,"-checkable"),!0),le(b,"".concat(v.value,"-checkable-checked"),t.checked),b))});return function(){var b;return w("span",{class:h.value,onClick:c},[(b=i.default)===null||b===void 0?void 0:b.call(i)])}}});const Ue=_i;var Pi=new RegExp("^(".concat(kn.join("|"),")(-inverse)?$")),xi=new RegExp("^(".concat(Sn.join("|"),")$")),Ti=function(){return{prefixCls:String,color:{type:String},closable:{type:Boolean,default:!1},closeIcon:$e.any,visible:{type:Boolean,default:void 0},onClose:{type:Function},"onUpdate:visible":Function,icon:$e.any}},we=me({compatConfig:{MODE:3},name:"ATag",props:Ti(),slots:["closeIcon","icon"],setup:function(t,n){var i=n.slots,a=n.emit,r=n.attrs,v=Ne("tag",t),c=v.prefixCls,h=v.direction,b=H(!0);Cn(function(){t.visible!==void 0&&(b.value=t.visible)});var d=function(l){l.stopPropagation(),a("update:visible",!1),a("close",l),!l.defaultPrevented&&t.visible===void 0&&(b.value=!1)},m=U(function(){var p=t.color;return p?Pi.test(p)||xi.test(p):!1}),S=U(function(){var p;return Ae(c.value,(p={},le(p,"".concat(c.value,"-").concat(t.color),m.value),le(p,"".concat(c.value,"-has-color"),t.color&&!m.value),le(p,"".concat(c.value,"-hidden"),!b.value),le(p,"".concat(c.value,"-rtl"),h.value==="rtl"),p))});return function(){var p,l,s,o=t.icon,f=o===void 0?(p=i.icon)===null||p===void 0?void 0:p.call(i):o,A=t.color,g=t.closeIcon,u=g===void 0?(l=i.closeIcon)===null||l===void 0?void 0:l.call(i):g,C=t.closable,O=C===void 0?!1:C,I=function(){return O?u?w("span",{class:"".concat(c.value,"-close-icon"),onClick:d},[u]):w(En,{class:"".concat(c.value,"-close-icon"),onClick:d},null):null},E={backgroundColor:A&&!m.value?A:void 0},P=f||null,k=(s=i.default)===null||s===void 0?void 0:s.call(i),$=P?w(te,null,[P,w("span",null,[k])]):k,M="onClick"in r,Q=w("span",{class:S.value,style:E},[$,I()]);return M?w(In,null,{default:function(){return[Q]}}):Q}}});we.CheckableTag=Ue;we.install=function(e){return e.component(we.name,we),e.component(Ue.name,Ue),e};const $i=we;pe.Button=Fe;pe.install=function(e){return e.component(pe.name,pe),e.component(Fe.name,Fe),e};var Mi={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M908.1 353.1l-253.9-36.9L540.7 86.1c-3.1-6.3-8.2-11.4-14.5-14.5-15.8-7.8-35-1.3-42.9 14.5L369.8 316.2l-253.9 36.9c-7 1-13.4 4.3-18.3 9.3a32.05 32.05 0 00.6 45.3l183.7 179.1-43.4 252.9a31.95 31.95 0 0046.4 33.7L512 754l227.1 119.4c6.2 3.3 13.4 4.4 20.3 3.2 17.4-3 29.1-19.5 26.1-36.9l-43.4-252.9 183.7-179.1c5-4.9 8.3-11.3 9.3-18.3 2.7-17.5-9.5-33.7-27-36.3z"}}]},name:"star",theme:"filled"};const Bi=Mi;function wt(e){for(var t=1;t{document.addEventListener(...e),Qt(()=>document.removeEventListener(...e))},ta="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==",Ie=new WeakMap;function na(e,t){return{useHookShareState:i=>{const a=$n();Me(a),Ie.has(a)||(Ie.set(a,Ye(e(a,i??(t==null?void 0:t())))),Qt(()=>{Ie.delete(a)}));const r=Ie.get(a);return Me(r),{state:r,toRefs(){return Tn(r)}}}}}var ia={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"};const aa=ia;function Ct(e){for(var t=1;t(await Se.value.get("/files",{params:{folder_path:e}})).data,ka=async e=>(await Se.value.post("/delete_files",{file_paths:e})).data,en=async(e,t,n)=>(await Se.value.post("/move_files",{file_paths:e,dest:t,create_dest_folder:n})).data,Sa=async(e,t,n)=>(await Se.value.post("/copy_files",{file_paths:e,dest:t,create_dest_folder:n})).data,Ca=async e=>{await Se.value.post("/mkdirs",{dest_folder:e})};var tn={exports:{}};/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */(function(e,t){(function(n,i){e.exports=i})(Mn,function(){var n={};n.version="0.3.5";var i=n.settings={minimum:.08,easing:"linear",positionUsing:"",speed:200,trickle:!0,trickleSpeed:200,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
    '};n.configure=function(l){var s,o;for(s in l)o=l[s],o!==void 0&&l.hasOwnProperty(s)&&(i[s]=o);return this},n.status=null,n.set=function(l){var s=n.isStarted();l=a(l,i.minimum,1),n.status=l===1?null:l;var o=n.render(!s),f=o.querySelector(i.barSelector),A=i.speed,g=i.easing;return o.offsetWidth,c(function(u){i.positionUsing===""&&(i.positionUsing=n.getPositioningCSS()),h(f,v(l,A,g)),l===1?(h(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout(function(){h(o,{transition:"all "+A+"ms linear",opacity:0}),setTimeout(function(){n.remove(),u()},A)},A)):setTimeout(u,A)}),this},n.isStarted=function(){return typeof n.status=="number"},n.start=function(){n.status||n.set(0);var l=function(){setTimeout(function(){n.status&&(n.trickle(),l())},i.trickleSpeed)};return i.trickle&&l(),this},n.done=function(l){return!l&&!n.status?this:n.inc(.3+.5*Math.random()).set(1)},n.inc=function(l){var s=n.status;return s?s>1?void 0:(typeof l!="number"&&(s>=0&&s<.2?l=.1:s>=.2&&s<.5?l=.04:s>=.5&&s<.8?l=.02:s>=.8&&s<.99?l=.005:l=0),s=a(s+l,0,.994),n.set(s)):n.start()},n.trickle=function(){return n.inc()},function(){var l=0,s=0;n.promise=function(o){return!o||o.state()==="resolved"?this:(s===0&&n.start(),l++,s++,o.always(function(){s--,s===0?(l=0,n.done()):n.set((l-s)/l)}),this)}}(),n.getElement=function(){var l=n.getParent();if(l){var s=Array.prototype.slice.call(l.querySelectorAll(".nprogress")).filter(function(o){return o.parentElement===l});if(s.length>0)return s[0]}return null},n.getParent=function(){if(i.parent instanceof HTMLElement)return i.parent;if(typeof i.parent=="string")return document.querySelector(i.parent)},n.render=function(l){if(n.isRendered())return n.getElement();d(document.documentElement,"nprogress-busy");var s=document.createElement("div");s.id="nprogress",s.className="nprogress",s.innerHTML=i.template;var o=s.querySelector(i.barSelector),f=l?"-100":r(n.status||0),A=n.getParent(),g;return h(o,{transition:"all 0 linear",transform:"translate3d("+f+"%,0,0)"}),i.showSpinner||(g=s.querySelector(i.spinnerSelector),g&&p(g)),A!=document.body&&d(A,"nprogress-custom-parent"),A.appendChild(s),s},n.remove=function(){n.status=null,m(document.documentElement,"nprogress-busy"),m(n.getParent(),"nprogress-custom-parent");var l=n.getElement();l&&p(l)},n.isRendered=function(){return!!n.getElement()},n.getPositioningCSS=function(){var l=document.body.style,s="WebkitTransform"in l?"Webkit":"MozTransform"in l?"Moz":"msTransform"in l?"ms":"OTransform"in l?"O":"";return s+"Perspective"in l?"translate3d":s+"Transform"in l?"translate":"margin"};function a(l,s,o){return lo?o:l}function r(l){return(-1+l)*100}function v(l,s,o){var f;return i.positionUsing==="translate3d"?f={transform:"translate3d("+r(l)+"%,0,0)"}:i.positionUsing==="translate"?f={transform:"translate("+r(l)+"%,0)"}:f={"margin-left":r(l)+"%"},f.transition="all "+s+"ms "+o,f}var c=function(){var l=[];function s(){var o=l.shift();o&&o(s)}return function(o){l.push(o),l.length==1&&s()}}(),h=function(){var l=["Webkit","O","Moz","ms"],s={};function o(u){return u.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(C,O){return O.toUpperCase()})}function f(u){var C=document.body.style;if(u in C)return u;for(var O=l.length,I=u.charAt(0).toUpperCase()+u.slice(1),E;O--;)if(E=l[O]+I,E in C)return E;return u}function A(u){return u=o(u),s[u]||(s[u]=f(u))}function g(u,C,O){C=A(C),u.style[C]=O}return function(u,C){var O=arguments,I,E;if(O.length==2)for(I in C)E=C[I],E!==void 0&&C.hasOwnProperty(I)&&g(u,I,E);else g(u,O[1],O[2])}}();function b(l,s){var o=typeof l=="string"?l:S(l);return o.indexOf(" "+s+" ")>=0}function d(l,s){var o=S(l),f=o+s;b(o,s)||(l.className=f.substring(1))}function m(l,s){var o=S(l),f;b(l,s)&&(f=o.replace(" "+s+" "," "),l.className=f.substring(1,f.length-1))}function S(l){return(" "+(l&&l.className||"")+" ").replace(/\s+/gi," ")}function p(l){l&&l.parentNode&&l.parentNode.removeChild(l)}return n})})(tn);var Ia=tn.exports;const Ea=Bn(Ia),Oa=e=>{const t=H("");return new Promise(n=>{ue.confirm({title:L("inputFolderName"),content:()=>w(Nn,{value:t.value,"onUpdate:value":i=>t.value=i},null),async onOk(){if(!t.value)return;const i=Ze(e,t.value);await Ca(i),n()}})})},nn=()=>w("p",{style:{background:"var(--zp-secondary-background)",padding:"8px",borderLeft:"4px solid var(--primary-color)"}},[j("Tips: "),L("multiSelectTips")]),_a=e=>{ue.confirm({width:"80vw",title:e.name,icon:null,content:()=>w("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column"}},[w("video",{style:{maxHeight:Fn?"80vh":"60vh"},src:ne(e),controls:!0,autoplay:!0},null),w("div",{class:"actions",style:{marginTop:"16px"}},[w(de,{onClick:()=>Dt([ne(e,!0)])},{icon:w(Wi,null,null),default:L("download")})])]),maskClosable:!0,wrapClassName:"hidden-antd-btns-modal"})};function Pa(){const e=[];for(let a=0;a<72;a++){const v=`hsl(${a*7.2}, 90%, 35%)`;e.push(v)}return e}const Pt=Pa(),an=Lt("useTagStore",()=>{const e=Ye(new Map),t=async r=>{if(r=r.filter(v=>!e.has(v)),!!r.length)try{r.forEach(c=>e.set(c,[]));const v=await yi(r);for(const c in v)e.set(c,v[c])}catch{r.forEach(v=>e.delete(v))}},n=new Map;return{tagMap:e,getColor:r=>{let v=n.get(r);if(!v){const c=vt.hash.sha256.hash(r),h=parseInt(vt.codec.hex.fromBits(c),16)%Pt.length;v=Pt[h],n.set(r,v)}return v},fetchImageTags:t,refreshTags:async r=>{r.forEach(v=>e.delete(v)),await t(r)}}}),xa=Lt("useBatchDownloadStore",()=>{const e=H([]);return{selectdFiles:e,addFiles:n=>{e.value=zn([...e.value,...n])}}});class xt{constructor(t,n=Qn.CREATED_TIME_DESC){Qe(this,"root");Qe(this,"execQueue",[]);this.sortMethod=n,this.root={children:[],info:{name:t,size:"-",bytes:0,created_time:"",is_under_scanned_path:!0,date:"",type:"dir",fullpath:t}},this.fetchChildren(this.root)}reset(){return this.root.children=[],this.fetchChildren(this.root)}get images(){const t=n=>n.children.map(i=>{if(i.info.type==="dir")return t(i);if(Rt(i.info.name))return i.info}).filter(i=>i).flat(1);return t(this.root)}get isCompleted(){return this.execQueue.length===0}async fetchChildren(t){const{files:n}=await ye(t.info.fullpath);return t.children=jt(n,this.sortMethod).map(i=>({info:i,children:[]})),this.execQueue.shift(),this.execQueue.unshift(...t.children.filter(i=>i.info.type==="dir").map(i=>({fn:()=>this.fetchChildren(i),...i}))),t}async next(){const t=qi(this.execQueue);if(!t)return null;const n=await t.fn();return this.execQueue=this.execQueue.slice(),this.root={...this.root},n}}function Re(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Gn(e)}const _e=new Map,N=Xe(),Ta=xa(),rn=an(),Tt=Dn(),Ee=new BroadcastChannel("iib-image-transfer-bus"),{eventEmitter:Pe,useEventListen:Je}=Ht(),{useHookShareState:se}=na((e,{images:t})=>{const n=H({tabIdx:-1,paneIdx:-1}),i=U(()=>ve(a.value)),a=H([]),r=U(()=>{var A;return a.value.map(g=>g.curr).slice((A=N.conf)!=null&&A.is_win?1:0)}),v=U(()=>Ze(...r.value)),c=H(N.defaultSortingMethod),h=H(n.value.walkModePath?new xt(n.value.walkModePath,c.value):void 0);he([()=>n.value.walkModePath,c],()=>{h.value=n.value.walkModePath?new xt(n.value.walkModePath,c.value):void 0});const b=Ye(new Set);he(i,()=>b.clear());const d=U(()=>{var C;if(t.value)return t.value;if(h.value)return h.value.images.filter(O=>!b.has(O.fullpath));if(!i.value)return[];const A=((C=i.value)==null?void 0:C.files)??[],g=c.value;return jt((O=>N.onlyFoldersAndImages?O.filter(I=>I.type==="dir"||Rt(I.name)):O)(A),g).filter(O=>!b.has(O.fullpath))}),m=H([]),S=H(-1),p=U(()=>h.value?!h.value.isCompleted:!1),l=H(!1),s=H(!1),o=()=>{var A,g,u;return(u=(g=(A=N.tabList)==null?void 0:A[n.value.tabIdx])==null?void 0:g.panes)==null?void 0:u[n.value.paneIdx]},f=Ht();return f.useEventListen("selectAll",()=>{console.log(`select all 0 -> ${d.value.length}`),m.value=Zt(0,d.value.length)}),{previewing:s,spinning:l,canLoadNext:p,multiSelectedIdxs:m,previewIdx:S,basePath:r,currLocation:v,currPage:i,stack:a,sortMethod:c,sortedFiles:d,scroller:H(),stackViewEl:H(),props:n,getPane:o,walker:h,deletedFiles:b,...f}},()=>({images:H()}));function wr(){const{previewIdx:e,eventEmitter:t,canLoadNext:n,previewing:i,sortedFiles:a,scroller:r,props:v}=se().toRefs(),{state:c}=se();let h=null;const b=(p,l)=>{var s;i.value=p,h!=null&&!p&&l&&((s=r.value)==null||s.scrollToItem(h),h=null)},d=()=>{v.value.walkModePath&&!S("next")&&n&&(ee.info(L("loadingNextFolder")),t.value.emit("loadNextDir",!0))};ke("keydown",p=>{var l;if(i.value){let s=e.value;if(["ArrowDown","ArrowRight"].includes(p.key))for(s++;a.value[s]&&!Z(a.value[s].name);)s++;else if(["ArrowUp","ArrowLeft"].includes(p.key))for(s--;a.value[s]&&!Z(a.value[s].name);)s--;if(Z((l=a.value[s])==null?void 0:l.name)??""){e.value=s;const o=r.value;o&&!(s>=o.$_startIndex&&s<=o.$_endIndex)&&(h=s)}d()}});const m=p=>{var s;let l=e.value;if(p==="next")for(l++;a.value[l]&&!Z(a.value[l].name);)l++;else if(p==="prev")for(l--;a.value[l]&&!Z(a.value[l].name);)l--;if(Z((s=a.value[l])==null?void 0:s.name)??""){e.value=l;const o=r.value;o&&!(l>=o.$_startIndex&&l<=o.$_endIndex)&&(h=l)}d()},S=p=>{var s;let l=e.value;if(p==="next")for(l++;a.value[l]&&!Z(a.value[l].name);)l++;else if(p==="prev")for(l--;a.value[l]&&!Z(a.value[l].name);)l--;return Z((s=a.value[l])==null?void 0:s.name)??""};return Je("removeFiles",async()=>{var p;i.value&&!c.sortedFiles[e.value]&&(ee.info(L("manualExitFullScreen"),5),await et(500),(p=document.querySelector(".ant-image-preview-operations-operation .anticon-close"))==null||p.click(),e.value=-1)}),{previewIdx:e,onPreviewVisibleChange:b,previewing:i,previewImgMove:m,canPreview:S}}function Ar(){const e=H(),{scroller:t,stackViewEl:n,stack:i,currPage:a,currLocation:r,useEventListen:v,eventEmitter:c,getPane:h,props:b,deletedFiles:d,walker:m,sortedFiles:S}=se().toRefs();he(()=>i.value.length,Be((y,T)=>{var B;y!==T&&((B=t.value)==null||B.scrollToItem(0))},300));const p=async y=>{var T;await A(y),b.value.walkModePath&&(await et(),await((T=m.value)==null?void 0:T.reset()),c.value.emit("loadNextDir"))};Ln(async()=>{var y;if(!i.value.length){const T=await ye("/");i.value.push({files:T.files,curr:"/"})}e.value=new Ea,e.value.configure({parent:n.value}),b.value.path&&b.value.path!=="/"?await p(b.value.walkModePath??b.value.path):(y=N.conf)!=null&&y.home&&A(N.conf.home)}),he(r,Be(y=>{const T=h.value();if(!T)return;T.path=y;const B=T.path.split("/").pop(),K=(()=>{var X;if(!b.value.walkModePath){const G=Oe(y);for(const[oe,ce]of Object.entries(N.pathAliasMap))if(G.startsWith(ce))return G.replace(ce,oe);return B}return"Walk: "+(((X=N.quickMovePaths.find(G=>G.dir===T.walkModePath))==null?void 0:X.zh)??B)})();T.name=De("div",{style:"display:flex;align-items:center"},[De(la),De("span",{class:"line-clamp-1",style:"max-width: 256px"},K)]),T.nameFallbackStr=K,N.recent=N.recent.filter(X=>X.key!==T.key),N.recent.unshift({path:y,key:T.key}),N.recent.length>20&&(N.recent=N.recent.slice(0,20))},300));const l=()=>Ve(r.value),s=async y=>{var T,B;if(y.type==="dir")try{(T=e.value)==null||T.start();const{files:q}=await ye(y.fullpath);i.value.push({files:q,curr:y.name})}finally{(B=e.value)==null||B.done()}},o=y=>{for(;y(Me(N.conf,"global.conf load failed"),N.conf.is_win?y.toLowerCase()==T.toLowerCase():y==T),A=async y=>{var B,q;const T=i.value.slice();try{jn(y)||(y=Ze(((B=N.conf)==null?void 0:B.sd_cwd)??"/",y));const K=pt(y),X=i.value.map(G=>G.curr);for(X.shift();X[0]&&K[0]&&f(X[0],K[0]);)X.shift(),K.shift();for(let G=0;Gf(ce.name,G));if(!oe)throw console.error({frags:K,frag:G,stack:Vt(i.value)}),new Error(`${G} not found`);await s(oe)}}catch(K){throw ee.error(L("moveFailedCheckPath")+(K instanceof Error?K.message:"")),console.error(y,pt(y),a.value),i.value=T,K}},g=ht(async()=>{var y,T,B;try{if((y=e.value)==null||y.start(),m.value)await m.value.reset(),c.value.emit("loadNextDir");else{const{files:q}=await ye(i.value.length===1?"/":r.value);ve(i.value).files=q}d.value.clear(),(T=t.value)==null||T.scrollToItem(0),ee.success(L("refreshCompleted"))}finally{(B=e.value)==null||B.done()}});Rn("returnToIIB",ht(async()=>{var y,T;if(!b.value.walkModePath)try{(y=e.value)==null||y.start();const{files:B}=await ye(i.value.length===1?"/":r.value);ve(i.value).files.map(K=>K.date).join()!==B.map(K=>K.date).join()&&(ve(i.value).files=B,ee.success(L("autoUpdate")))}finally{(T=e.value)==null||T.done()}})),v.value("refresh",g);const u=y=>{b.value.walkModePath&&(h.value().walkModePath=y),p(y)},C=U(()=>N.quickMovePaths.map(y=>({...y,path:Oe(y.dir)}))),O=U(()=>{const y=Oe(r.value);return C.value.find(B=>B.path===y)}),I=async()=>{const y=O.value;if(y){if(!y.can_delete)return;await bi({path:r.value,type:"scanned"}),ee.success(L("removeCompleted"))}else await wi({path:r.value,type:"scanned"}),ee.success(L("addCompleted"));mt.emit("searchIndexExpired"),mt.emit("updateGlobalSetting")},E=H(!1),P=H(r.value),k=()=>{E.value=!0,P.value=r.value},$=async()=>{await A(P.value),E.value=!1};ke("click",y=>{var T,B,q;(q=(B=(T=y.target)==null?void 0:T.className)==null?void 0:B.includes)!=null&&q.call(B,"ant-input")||(E.value=!1)});const M=()=>{const y=parent.location,T=y.href.substring(0,y.href.length-y.search.length),B=new URLSearchParams(y.search);B.set("action","open"),m.value&&B.set("walk","1"),B.set("path",r.value);const q=`${T}?${B.toString()}`;Ve(q,L("copyLocationUrlSuccessMsg"))},Q=()=>c.value.emit("selectAll"),_=async()=>{await Oa(r.value),await g()},z=()=>{const y=r.value;_e.set(y,i.value);const T=N.tabList[b.value.tabIdx],B={type:"local",key:ge(),path:y,name:L("local"),stackKey:y,walkModePath:y};T.panes.push(B),T.key=B.key},D=U(()=>!m.value&&S.value.some(y=>y.type==="dir"));return{locInputValue:P,isLocationEditing:E,onLocEditEnter:$,onEditBtnClick:k,addToSearchScanPathAndQuickMove:I,searchPathInfo:O,refresh:g,copyLocation:l,back:o,openNext:s,currPage:a,currLocation:r,to:A,stack:i,scroller:t,share:M,selectAll:Q,quickMoveTo:u,onCreateFloderBtnClick:_,onWalkBtnClick:z,showWalkButton:D}}function kr({fetchNext:e}={}){const{scroller:t,sortedFiles:n,sortMethod:i,currLocation:a,stackViewEl:r,canLoadNext:v,previewIdx:c,props:h,walker:b}=se().toRefs(),{state:d}=se(),m=H(!1),S=H(N.defaultGridCellWidth),p=U(()=>S.value+16),l=44,{width:s}=Hn(r),o=U(()=>~~(s.value/p.value)),f=U(()=>{const I=p.value;return{first:I+(S.value<=160?0:l),second:I}}),A=H(!1),g=async()=>{var I;if(!(A.value||!h.value.walkModePath||!v.value))try{A.value=!0,await((I=b.value)==null?void 0:I.next())}finally{A.value=!1}},u=async(I=!1)=>{const E=t.value,P=()=>I?c.value:(E==null?void 0:E.$_endIndex)??0,k=()=>{const $=n.value.length,M=50;return $?e?P()>$-M:P()>$-M&&v.value:!0};for(;k();){await et(30);const $=await(e??g)();if(typeof $=="boolean"&&!$)return}};d.useEventListen("loadNextDir",u);const C=()=>{const I=t.value;if(I){const E=n.value.slice(Math.max(I.$_startIndex-10,0),I.$_endIndex+10).filter(P=>P.is_under_scanned_path&&Z(P.name)).map(P=>P.fullpath);rn.fetchImageTags(E)}};he(a,Be(C,150));const O=Be(async()=>{await u(),C()},150);return{gridItems:o,sortedFiles:n,sortMethodConv:Vn,moreActionsDropdownShow:m,gridSize:p,sortMethod:i,onScroll:O,loadNextDir:g,loadNextDirLoading:A,canLoadNext:v,itemSize:f,cellWidth:S}}function Sr(){const{currLocation:e,sortedFiles:t,currPage:n,multiSelectedIdxs:i,eventEmitter:a,walker:r}=se().toRefs(),v=()=>{i.value=[]};return ke("click",v),ke("blur",v),he(n,v),{onFileDragStart:(d,m)=>{const S=Vt(t.value[m]);Tt.fileDragging=!0,console.log("onFileDragStart set drag file ",d,m,S);const p=[S];let l=S.type==="dir";if(i.value.includes(m)){const o=i.value.map(f=>t.value[f]);p.push(...o),l=o.some(f=>f.type==="dir")}const s={includeDir:l,loc:e.value||"search-result",path:gt(p,"fullpath").map(o=>o.fullpath),nodes:gt(p,"fullpath"),__id:"FileTransferData"};d.dataTransfer.setData("text/plain",JSON.stringify(s))},onDrop:async d=>{if(r.value)return;const m=Wn(d);if(!m)return;const S=e.value;if(m.loc===S)return;const p=Ut(),l=async()=>p.pushAction(async()=>{await Sa(m.path,S),a.value.emit("refresh"),ue.destroyAll()}),s=()=>p.pushAction(async()=>{await en(m.path,S),Pe.emit("removeFiles",{paths:m.path,loc:m.loc}),a.value.emit("refresh"),ue.destroyAll()});ue.confirm({title:L("confirm")+"?",width:"60vw",content:()=>{let o,f,A;return w("div",null,[w("div",null,[`${L("moveSelectedFilesTo")} ${S}`,w("ol",{style:{maxHeight:"50vh",overflow:"auto"}},[m.path.map(g=>w("li",null,[g.split(/[/\\]/).pop()]))])]),w(nn,null,null),w("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end"},class:"actions"},[w(de,{onClick:ue.destroyAll},Re(o=L("cancel"))?o:{default:()=>[o]}),w(de,{type:"primary",loading:!p.isIdle,onClick:l},Re(f=L("copy"))?f:{default:()=>[f]}),w(de,{type:"primary",loading:!p.isIdle,onClick:s},Re(A=L("move"))?A:{default:()=>[A]})])])},maskClosable:!0,wrapClassName:"hidden-antd-btns-modal"})},multiSelectedIdxs:i,onFileDragEnd:()=>{Tt.fileDragging=!1}}}function Cr({openNext:e}){const t=H(!1),n=H(""),{sortedFiles:i,previewIdx:a,multiSelectedIdxs:r,stack:v,currLocation:c,spinning:h,previewing:b,stackViewEl:d,eventEmitter:m,props:S,deletedFiles:p}=se().toRefs(),l=Oe;Je("removeFiles",({paths:g,loc:u})=>{l(u)!==l(c.value)||!ve(v.value)||(g.forEach(O=>p.value.add(O)),g.filter(Z).forEach(O=>p.value.add(O.replace(/\.\w+$/,".txt"))))}),Je("addFiles",({files:g,loc:u})=>{if(l(u)!==l(c.value))return;const C=ve(v.value);C&&C.files.unshift(...g)});const s=Ut(),o=async(g,u,C)=>{a.value=C,N.fullscreenPreviewInitialUrl=ne(u);const O=r.value.indexOf(C);if(g.shiftKey){if(O!==-1)r.value.splice(O,1);else{r.value.push(C),r.value.sort((P,k)=>P-k);const I=r.value[0],E=r.value[r.value.length-1];r.value=Zt(I,E+1)}g.stopPropagation()}else g.ctrlKey||g.metaKey?(O!==-1?r.value.splice(O,1):r.value.push(C),g.stopPropagation()):await e(u)},f=async(g,u,C)=>{var $,M,Q;const O=ne(u),I=c.value,E={IIB_container_id:parent.IIB_container_id},P=()=>{let _=[];return r.value.includes(C)?_=r.value.map(z=>i.value[z]):_.push(u),_},k=async _=>{if(!h.value)try{h.value=!0,await Yn(u.fullpath),Ee.postMessage({...E,event:"click_hidden_button",btnEleId:"iib_hidden_img_update_trigger"}),await Zn(),Ee.postMessage({...E,event:"click_hidden_button",btnEleId:`iib_hidden_tab_${_}`})}catch(z){console.error(z),ee.error("发送图像失败,请携带console的错误消息找开发者")}finally{h.value=!1}};if(`${g.key}`.startsWith("toggle-tag-")){const _=+`${g.key}`.split("toggle-tag-")[1],{is_remove:z}=await Ai({tag_id:_,img_path:u.fullpath}),D=(M=($=N.conf)==null?void 0:$.all_custom_tags.find(y=>y.id===_))==null?void 0:M.name;rn.refreshTags([u.fullpath]),ee.success(L(z?"removedTagFromImage":"addedTagToImage",{tag:D}));return}switch(g.key){case"previewInNewWindow":return window.open(O);case"download":{const _=P();Dt(_.map(z=>ne(z,!0)));break}case"copyPreviewUrl":return Ve(parent.document.location.origin+O);case"send2txt2img":return k("txt2img");case"send2img2img":return k("img2img");case"send2inpaint":return k("inpaint");case"send2extras":return k("extras");case"send2savedDir":{const _=N.quickMovePaths.find(y=>y.key==="outdir_save");if(!_)return ee.error(L("unknownSavedDir"));const z=qn(_.dir,(Q=N.conf)==null?void 0:Q.sd_cwd),D=P();await en(D.map(y=>y.fullpath),z,!0),Pe.emit("removeFiles",{paths:D.map(y=>y.fullpath),loc:c.value}),Pe.emit("addFiles",{files:D,loc:z});break}case"send2controlnet-img2img":case"send2controlnet-txt2img":{const _=g.key.split("-")[1];Ee.postMessage({...E,event:"send_to_control_net",type:_,url:ne(u)});break}case"send2outpaint":{n.value=await s.pushAction(()=>yt(u.fullpath)).res;const[_,z]=(n.value||"").split(` +`);Ee.postMessage({...E,event:"send_to_outpaint",url:ne(u),prompt:_,negPrompt:z.slice(17)});break}case"openWithWalkMode":{_e.set(I,v.value);const _=N.tabList[S.value.tabIdx],z={type:"local",key:ge(),path:u.fullpath,name:L("local"),stackKey:I,walkModePath:u.fullpath};_.panes.push(z),_.key=z.key;break}case"openInNewTab":{_e.set(I,v.value);const _=N.tabList[S.value.tabIdx],z={type:"local",key:ge(),path:u.fullpath,name:L("local"),stackKey:I};_.panes.push(z),_.key=z.key;break}case"openOnTheRight":{_e.set(I,v.value);let _=N.tabList[S.value.tabIdx+1];_||(_={panes:[],key:"",id:ge()},N.tabList[S.value.tabIdx+1]=_);const z={type:"local",key:ge(),path:u.fullpath,name:L("local"),stackKey:I};_.panes.push(z),_.key=z.key;break}case"send2BatchDownload":{Ta.addFiles(P());break}case"viewGenInfo":{t.value=!0,n.value=await s.pushAction(()=>yt(u.fullpath)).res;break}case"openWithLocalFileBrowser":{await Kn(u.fullpath);break}case"deleteFiles":{const _=P(),z=async()=>{const D=_.map(y=>y.fullpath);await ka(D),ee.success(L("deleteSuccess")),Pe.emit("removeFiles",{paths:D,loc:c.value})};if(_.length===1&&N.ignoredConfirmActions.deleteOneOnly)return z();await new Promise(D=>{ue.confirm({title:L("confirmDelete"),maskClosable:!0,width:"60vw",content:()=>w("div",null,[w("ol",{style:{maxHeight:"50vh",overflow:"auto"}},[_.map(y=>w("li",null,[y.fullpath.split(/[/\\]/).pop()]))]),w(nn,null,null),w(ki,{checked:N.ignoredConfirmActions.deleteOneOnly,"onUpdate:checked":y=>N.ignoredConfirmActions.deleteOneOnly=y},{default:()=>[L("deleteOneOnlySkipConfirm"),j(" ("),L("resetOnGlobalSettingsPage"),j(")")]})]),async onOk(){await z(),D()}})});break}}return{}},{isOutside:A}=Un(d);return ke("keydown",g=>{var C,O,I;const u=Si(g);if(b.value){const E=(C=Object.entries(N.shortcut).find(P=>P[1]===u&&P[1]))==null?void 0:C[0];if(E){g.stopPropagation(),g.preventDefault();const P=a.value,k=i.value[P];switch(E){case"delete":return ne(k)===N.fullscreenPreviewInitialUrl?ee.warn(L("fullscreenRestriction")):f({key:"deleteFiles"},k,P);case"download":return f({key:"download"},k,P);default:{const $=(O=/^toggle_tag_(.*)$/.exec(E))==null?void 0:O[1],M=(I=N.conf)==null?void 0:I.all_custom_tags.find(Q=>Q.name===$);return M?f({key:`toggle-tag-${M.id}`},k,P):void 0}}}}else!A.value&&["Ctrl + KeyA","Cmd + KeyA"].includes(u)&&(g.preventDefault(),g.stopPropagation(),m.value.emit("selectAll"))}),{onFileItemClick:o,onContextMenuClick:f,showGenInfo:t,imageGenInfo:n,q:s}}const Ir=()=>{const{stackViewEl:e}=se().toRefs(),t=H(-1);return Jn(e,n=>{var a;let i=n.target;for(;i.parentElement;)if(i=i.parentElement,i.tagName.toLowerCase()==="li"&&i.classList.contains("file-item-trigger")){const r=(a=i.dataset)==null?void 0:a.idx;r&&Number.isSafeInteger(+r)&&(t.value=+r);return}}),{showMenuIdx:t}};function $a(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(t>0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);var n=e.indexOf("Trident/");if(n>0){var i=e.indexOf("rv:");return parseInt(e.substring(i+3,e.indexOf(".",i)),10)}var a=e.indexOf("Edge/");return a>0?parseInt(e.substring(a+5,e.indexOf(".",a)),10):-1}let xe;function We(){We.init||(We.init=!0,xe=$a()!==-1)}var ze={name:"ResizeObserver",props:{emitOnMount:{type:Boolean,default:!1},ignoreWidth:{type:Boolean,default:!1},ignoreHeight:{type:Boolean,default:!1}},emits:["notify"],mounted(){We(),Jt(()=>{this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.emitOnMount&&this.emitSize()});const e=document.createElement("object");this._resizeObject=e,e.setAttribute("aria-hidden","true"),e.setAttribute("tabindex",-1),e.onload=this.addResizeHandlers,e.type="text/html",xe&&this.$el.appendChild(e),e.data="about:blank",xe||this.$el.appendChild(e)},beforeUnmount(){this.removeResizeHandlers()},methods:{compareAndNotify(){(!this.ignoreWidth&&this._w!==this.$el.offsetWidth||!this.ignoreHeight&&this._h!==this.$el.offsetHeight)&&(this._w=this.$el.offsetWidth,this._h=this.$el.offsetHeight,this.emitSize())},emitSize(){this.$emit("notify",{width:this._w,height:this._h})},addResizeHandlers(){this._resizeObject.contentDocument.defaultView.addEventListener("resize",this.compareAndNotify),this.compareAndNotify()},removeResizeHandlers(){this._resizeObject&&this._resizeObject.onload&&(!xe&&this._resizeObject.contentDocument&&this._resizeObject.contentDocument.defaultView.removeEventListener("resize",this.compareAndNotify),this.$el.removeChild(this._resizeObject),this._resizeObject.onload=null,this._resizeObject=null)}}};const Ma=ti();Xn("data-v-b329ee4c");const Ba={class:"resize-observer",tabindex:"-1"};ei();const Fa=Ma((e,t,n,i,a,r)=>(x(),W("div",Ba)));ze.render=Fa;ze.__scopeId="data-v-b329ee4c";ze.__file="src/components/ResizeObserver.vue";function Te(e){"@babel/helpers - typeof";return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Te=function(t){return typeof t}:Te=function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Te(e)}function Na(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n2&&arguments[2]!==void 0?arguments[2]:{},i,a,r,v=function(h){for(var b=arguments.length,d=new Array(b>1?b-1:0),m=1;m1){var b=c.find(function(m){return m.isIntersecting});b&&(h=b)}if(a.callback){var d=h.isIntersecting&&h.intersectionRatio>=a.threshold;if(d===a.oldResult)return;a.oldResult=d,a.callback(d,h)}},this.options.intersection),Jt(function(){a.observer&&a.observer.observe(a.el)})}}},{key:"destroyObserver",value:function(){this.observer&&(this.observer.disconnect(),this.observer=null),this.callback&&this.callback._clear&&(this.callback._clear(),this.callback=null)}},{key:"threshold",get:function(){return this.options.intersection&&typeof this.options.intersection.threshold=="number"?this.options.intersection.threshold:0}}]),e}();function sn(e,t,n){var i=t.value;if(i)if(typeof IntersectionObserver>"u")console.warn("[vue-observe-visibility] IntersectionObserver API is not available in your browser. Please install this polyfill: https://github.com/w3c/IntersectionObserver/tree/master/polyfill");else{var a=new Va(e,i,n);e._vue_visibilityState=a}}function Ua(e,t,n){var i=t.value,a=t.oldValue;if(!ln(i,a)){var r=e._vue_visibilityState;if(!i){on(e);return}r?r.createObserver(i,n):sn(e,{value:i},n)}}function on(e){var t=e._vue_visibilityState;t&&(t.destroyObserver(),delete e._vue_visibilityState)}var Ja={beforeMount:sn,updated:Ua,unmounted:on},Wa={itemsLimit:1e3},Ka=/(auto|scroll)/;function cn(e,t){return e.parentNode===null?t:cn(e.parentNode,t.concat([e]))}var He=function(t,n){return getComputedStyle(t,null).getPropertyValue(n)},qa=function(t){return He(t,"overflow")+He(t,"overflow-y")+He(t,"overflow-x")},Ga=function(t){return Ka.test(qa(t))};function Bt(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var t=cn(e.parentNode,[]),n=0;n{this.$_prerender=!1,this.updateVisibleItems(!0),this.ready=!0})},activated(){const e=this.$_lastUpdateScrollPosition;typeof e=="number"&&this.$nextTick(()=>{this.scrollToPosition(e)})},beforeUnmount(){this.removeListeners()},methods:{addView(e,t,n,i,a){const r=ni({id:er++,index:t,used:!0,key:i,type:a}),v=ii({item:n,position:0,nr:r});return e.push(v),v},unuseView(e,t=!1){const n=this.$_unusedViews,i=e.nr.type;let a=n.get(i);a||(a=[],n.set(i,a)),a.push(e),t||(e.nr.used=!1,e.position=-9999)},handleResize(){this.$emit("resize"),this.ready&&this.updateVisibleItems(!1)},handleScroll(e){if(!this.$_scrollDirty){if(this.$_scrollDirty=!0,this.$_updateTimeout)return;const t=()=>requestAnimationFrame(()=>{this.$_scrollDirty=!1;const{continuous:n}=this.updateVisibleItems(!1,!0);n||(clearTimeout(this.$_refreshTimout),this.$_refreshTimout=setTimeout(this.handleScroll,this.updateInterval+100))});t(),this.updateInterval&&(this.$_updateTimeout=setTimeout(()=>{this.$_updateTimeout=0,this.$_scrollDirty&&t()},this.updateInterval))}},handleVisibilityChange(e,t){this.ready&&(e||t.boundingClientRect.width!==0||t.boundingClientRect.height!==0?(this.$emit("visible"),requestAnimationFrame(()=>{this.updateVisibleItems(!1)})):this.$emit("hidden"))},updateVisibleItems(e,t=!1){const n=this.itemSize,i=this.gridItems||1,a=this.itemSecondarySize||n,r=this.$_computedMinItemSize,v=this.typeField,c=this.simpleArray?null:this.keyField,h=this.items,b=h.length,d=this.sizes,m=this.$_views,S=this.$_unusedViews,p=this.pool,l=this.itemIndexByKey;let s,o,f,A,g;if(!b)s=o=A=g=f=0;else if(this.$_prerender)s=A=0,o=g=Math.min(this.prerender,h.length),f=null;else{const k=this.getScroll();if(t){let Q=k.start-this.$_lastUpdateScrollPosition;if(Q<0&&(Q=-Q),n===null&&Qk.start&&(z=D),D=~~((_+z)/2);while(D!==y);for(D<0&&(D=0),s=D,f=d[b-1].accumulator,o=D;ob&&(o=b)),A=s;Ab&&(o=b),A<0&&(A=0),g>b&&(g=b),f=Math.ceil(b/i)*n}}o-s>Wa.itemsLimit&&this.itemsLimitError(),this.totalSize=f;let u;const C=s<=this.$_endIndex&&o>=this.$_startIndex;if(C)for(let k=0,$=p.length;k<$;k++)u=p[k],u.nr.used&&(e&&(u.nr.index=l[u.item[c]]),(u.nr.index==null||u.nr.index=o)&&this.unuseView(u));const O=C?null:new Map;let I,E,P;for(let k=s;k=M.length)&&(u=this.addView(p,k,I,$,E),this.unuseView(u,!0),M=S.get(E)),u=M[P],O.set(E,P+1)),m.delete(u.nr.key),u.nr.used=!0,u.nr.index=k,u.nr.key=$,u.nr.type=E,m.set($,u),Q=!0;else if(!u.nr.used&&(u.nr.used=!0,u.nr.index=k,Q=!0,M)){const _=M.indexOf(u);_!==-1&&M.splice(_,1)}u.item=I,Q&&(k===h.length-1&&this.$emit("scroll-end"),k===0&&this.$emit("scroll-start")),n===null?(u.position=d[k-1].accumulator,u.offset=0):(u.position=Math.floor(k/i)*n,u.offset=k%i*a)}return this.$_startIndex=s,this.$_endIndex=o,this.emitUpdate&&this.$emit("update",s,o,A,g),clearTimeout(this.$_sortTimer),this.$_sortTimer=setTimeout(this.sortViews,this.updateInterval+300),{continuous:C}},getListenerTarget(){let e=Bt(this.$el);return window.document&&(e===window.document.documentElement||e===window.document.body)&&(e=window),e},getScroll(){const{$el:e,direction:t}=this,n=t==="vertical";let i;if(this.pageMode){const a=e.getBoundingClientRect(),r=n?a.height:a.width;let v=-(n?a.top:a.left),c=n?window.innerHeight:window.innerWidth;v<0&&(c+=v,v=0),v+c>r&&(c=r-v),i={start:v,end:v+c}}else n?i={start:e.scrollTop,end:e.scrollTop+e.clientHeight}:i={start:e.scrollLeft,end:e.scrollLeft+e.clientWidth};return i},applyPageMode(){this.pageMode?this.addListeners():this.removeListeners()},addListeners(){this.listenerTarget=this.getListenerTarget(),this.listenerTarget.addEventListener("scroll",this.handleScroll,Ge?{passive:!0}:!1),this.listenerTarget.addEventListener("resize",this.handleResize)},removeListeners(){this.listenerTarget&&(this.listenerTarget.removeEventListener("scroll",this.handleScroll),this.listenerTarget.removeEventListener("resize",this.handleResize),this.listenerTarget=null)},scrollToItem(e){let t;const n=this.gridItems||1;this.itemSize===null?t=e>0?this.sizes[e-1].accumulator:0:t=Math.floor(e/n)*this.itemSize,this.scrollToPosition(t)},scrollToPosition(e){const t=this.direction==="vertical"?{scroll:"scrollTop",start:"top"}:{scroll:"scrollLeft",start:"left"};let n,i,a;if(this.pageMode){const r=Bt(this.$el),v=r.tagName==="HTML"?0:r[t.scroll],c=r.getBoundingClientRect(),b=this.$el.getBoundingClientRect()[t.start]-c[t.start];n=r,i=t.scroll,a=e+v+b}else n=this.$el,i=t.scroll,a=e;n[i]=a},itemsLimitError(){throw setTimeout(()=>{console.log("It seems the scroller element isn't scrolling, so it tries to render all the items at once.","Scroller:",this.$el),console.log("Make sure the scroller has a fixed height (or width) and 'overflow-y' (or 'overflow-x') set to 'auto' so it can scroll correctly and only render the items visible in the scroll viewport.")}),new Error("Rendered items limit reached")},sortViews(){this.pool.sort((e,t)=>e.nr.index-t.nr.index)}}};const tr={key:0,ref:"before",class:"vue-recycle-scroller__slot"},nr={key:1,ref:"after",class:"vue-recycle-scroller__slot"};function ir(e,t,n,i,a,r){const v=ai("ResizeObserver"),c=ri("observe-visibility");return li((x(),V("div",{class:fe(["vue-recycle-scroller",{ready:a.ready,"page-mode":n.pageMode,[`direction-${e.direction}`]:!0}]),onScrollPassive:t[0]||(t[0]=(...h)=>r.handleScroll&&r.handleScroll(...h))},[e.$slots.before?(x(),V("div",tr,[Ce(e.$slots,"before")],512)):Y("v-if",!0),(x(),W(bt(n.listTag),{ref:"wrapper",style:ci({[e.direction==="vertical"?"minHeight":"minWidth"]:a.totalSize+"px"}),class:fe(["vue-recycle-scroller__item-wrapper",n.listClass])},{default:F(()=>[(x(!0),V(te,null,be(a.pool,h=>(x(),W(bt(n.itemTag),si({key:h.nr.id,style:a.ready?{transform:`translate${e.direction==="vertical"?"Y":"X"}(${h.position}px) translate${e.direction==="vertical"?"X":"Y"}(${h.offset}px)`,width:n.gridItems?`${e.direction==="vertical"&&n.itemSecondarySize||n.itemSize}px`:void 0,height:n.gridItems?`${e.direction==="horizontal"&&n.itemSecondarySize||n.itemSize}px`:void 0}:null,class:["vue-recycle-scroller__item-view",[n.itemClass,{hover:!n.skipHover&&a.hoverKey===h.nr.key}]]},oi(n.skipHover?{}:{mouseenter:()=>{a.hoverKey=h.nr.key},mouseleave:()=>{a.hoverKey=null}})),{default:F(()=>[Ce(e.$slots,"default",{item:h.item,index:h.nr.index,active:h.nr.used})]),_:2},1040,["style","class"]))),128)),Ce(e.$slots,"empty")]),_:3},8,["style","class"])),e.$slots.after?(x(),V("div",nr,[Ce(e.$slots,"after")],512)):Y("v-if",!0),w(v,{onNotify:r.handleResize},null,8,["onNotify"])],34)),[[c,r.handleVisibilityChange]])}un.render=ir;un.__file="src/components/RecycleScroller.vue";const Ft=me({__name:"ContextMenu",props:{file:{},idx:{},selectedTag:{},disableDelete:{type:Boolean}},emits:["contextMenuClick"],setup(e,{emit:t}){const n=e,i=Xe(),a=U(()=>{var r;return(((r=i.conf)==null?void 0:r.all_custom_tags)??[]).reduce((v,c)=>[...v,{...c,selected:!!n.selectedTag.find(h=>h.id===c.id)}],[])});return(r,v)=>{const c=Wt,h=ui,b=di,d=Kt;return x(),W(d,{onClick:v[0]||(v[0]=m=>t("contextMenuClick",m,r.file,r.idx))},{default:F(()=>{var m;return[w(c,{key:"deleteFiles",disabled:r.disableDelete},{default:F(()=>[j(R(r.$t("deleteSelected")),1)]),_:1},8,["disabled"]),r.file.type==="dir"?(x(),V(te,{key:0},[w(c,{key:"openInNewTab"},{default:F(()=>[j(R(r.$t("openInNewTab")),1)]),_:1}),w(c,{key:"openOnTheRight"},{default:F(()=>[j(R(r.$t("openOnTheRight")),1)]),_:1}),w(c,{key:"openWithWalkMode"},{default:F(()=>[j(R(r.$t("openWithWalkMode")),1)]),_:1})],64)):Y("",!0),r.file.type==="file"?(x(),V(te,{key:1},[J(Z)(r.file.name)?(x(),V(te,{key:0},[w(c,{key:"viewGenInfo"},{default:F(()=>[j(R(r.$t("viewGenerationInfo")),1)]),_:1}),w(h),((m=J(i).conf)==null?void 0:m.launch_mode)!=="server"?(x(),V(te,{key:0},[w(c,{key:"send2txt2img"},{default:F(()=>[j(R(r.$t("sendToTxt2img")),1)]),_:1}),w(c,{key:"send2img2img"},{default:F(()=>[j(R(r.$t("sendToImg2img")),1)]),_:1}),w(c,{key:"send2inpaint"},{default:F(()=>[j(R(r.$t("sendToInpaint")),1)]),_:1}),w(c,{key:"send2extras"},{default:F(()=>[j(R(r.$t("sendToExtraFeatures")),1)]),_:1}),w(b,{key:"sendToThirdPartyExtension",title:r.$t("sendToThirdPartyExtension")},{default:F(()=>[w(c,{key:"send2controlnet-txt2img"},{default:F(()=>[j("ControlNet - "+R(r.$t("t2i")),1)]),_:1}),w(c,{key:"send2controlnet-img2img"},{default:F(()=>[j("ControlNet - "+R(r.$t("i2i")),1)]),_:1}),w(c,{key:"send2outpaint"},{default:F(()=>[j("openOutpaint")]),_:1})]),_:1},8,["title"])],64)):Y("",!0),w(c,{key:"send2BatchDownload"},{default:F(()=>[j(R(r.$t("sendToBatchDownload")),1)]),_:1}),w(c,{key:"send2savedDir"},{default:F(()=>[j(R(r.$t("send2savedDir")),1)]),_:1}),w(h),w(b,{key:"toggle-tag",title:r.$t("toggleTag")},{default:F(()=>[(x(!0),V(te,null,be(a.value,S=>(x(),W(c,{key:`toggle-tag-${S.id}`},{default:F(()=>[j(R(S.name)+" ",1),S.selected?(x(),W(J(Yt),{key:0})):(x(),W(J(Xt),{key:1}))]),_:2},1024))),128))]),_:1},8,["title"]),w(c,{key:"openWithLocalFileBrowser"},{default:F(()=>[j(R(r.$t("openWithLocalFileBrowser")),1)]),_:1})],64)):Y("",!0),w(c,{key:"previewInNewWindow"},{default:F(()=>[j(R(r.$t("previewInNewWindow")),1)]),_:1}),w(c,{key:"download"},{default:F(()=>[j(R(r.$t("download")),1)]),_:1}),w(c,{key:"copyPreviewUrl"},{default:F(()=>[j(R(r.$t("copySourceFilePreviewLink")),1)]),_:1})],64)):Y("",!0)]}),_:1})}}}),ar=["data-idx"],rr={key:1,class:"more"},lr={class:"float-btn-wrap"},sr={key:0,class:"tags-container"},or={class:"play-icon"},cr={key:0,class:"tags-container"},ur={key:4,class:"preview-icon-wrap"},dr={key:5,class:"profile"},fr={class:"name line-clamp-1"},vr={class:"basic-info"},pr=me({__name:"FileItem",props:{file:{},idx:{},selected:{type:Boolean,default:!1},showMenuIdx:{},cellWidth:{},fullScreenPreviewImageUrl:{},enableRightClickMenu:{type:Boolean,default:!0},enableCloseIcon:{type:Boolean,default:!1}},emits:["update:showMenuIdx","fileItemClick","dragstart","dragend","previewVisibleChange","contextMenuClick","close-icon-click"],setup(e,{emit:t}){const n=e;fi(d=>({a5a93268:d.$props.cellWidth+"px"}));const i=Xe(),a=an(),r=U(()=>a.tagMap.get(n.file.fullpath)??[]),v=U(()=>{const d=i.gridThumbnailResolution;return i.enableThumbnail?vi(n.file,[d,d].join("x")):ne(n.file)}),c=U(()=>{var d;return(((d=i.conf)==null?void 0:d.all_custom_tags)??[]).reduce((m,S)=>[...m,{...S,selected:!!r.value.find(p=>p.id===S.id)}],[])}),h=U(()=>c.value.find(d=>d.type==="custom"&&d.name==="like")),b=()=>{Me(h.value),t("contextMenuClick",{key:`toggle-tag-${h.value.id}`},n.file,n.idx)};return(d,m)=>{const S=pe,p=Wt,l=Kt,s=mi,o=$i;return x(),W(S,{trigger:["contextmenu"],visible:J(i).longPressOpenContextMenu?typeof d.idx=="number"&&d.showMenuIdx===d.idx:void 0,"onUpdate:visible":m[8]||(m[8]=f=>typeof d.idx=="number"&&t("update:showMenuIdx",f?d.idx:-1))},{overlay:F(()=>[d.enableRightClickMenu?(x(),W(Ft,{key:0,file:d.file,idx:d.idx,"selected-tag":r.value,onContextMenuClick:m[7]||(m[7]=(f,A,g)=>t("contextMenuClick",f,A,g))},null,8,["file","idx","selected-tag"])):Y("",!0)]),default:F(()=>[(x(),V("li",{class:fe(["file file-item-trigger grid",{clickable:d.file.type==="dir",selected:d.selected}]),"data-idx":d.idx,key:d.file.name,draggable:"true",onDragstart:m[4]||(m[4]=f=>t("dragstart",f,d.idx)),onDragend:m[5]||(m[5]=f=>t("dragend",f,d.idx)),onClickCapture:m[6]||(m[6]=f=>t("fileItemClick",f,d.file,d.idx))},[re("div",null,[d.enableCloseIcon?(x(),V("div",{key:0,class:"close-icon",onClick:m[0]||(m[0]=f=>t("close-icon-click"))},[w(J(pi))])):Y("",!0),d.enableRightClickMenu?(x(),V("div",rr,[w(S,null,{overlay:F(()=>[w(Ft,{file:d.file,idx:d.idx,"selected-tag":r.value,onContextMenuClick:m[1]||(m[1]=(f,A,g)=>t("contextMenuClick",f,A,g))},null,8,["file","idx","selected-tag"])]),default:F(()=>[re("div",lr,[w(J(zt))])]),_:1}),d.file.type==="file"?(x(),W(S,{key:0},{overlay:F(()=>[c.value.length>1?(x(),W(l,{key:0,onClick:m[2]||(m[2]=f=>t("contextMenuClick",f,d.file,d.idx))},{default:F(()=>[(x(!0),V(te,null,be(c.value,f=>(x(),W(p,{key:`toggle-tag-${f.id}`},{default:F(()=>[j(R(f.name)+" ",1),f.selected?(x(),W(J(Yt),{key:0})):(x(),W(J(Xt),{key:1}))]),_:2},1024))),128))]),_:1})):Y("",!0)]),default:F(()=>{var f,A;return[re("div",{class:fe(["float-btn-wrap",{"like-selected":(f=h.value)==null?void 0:f.selected}]),onClick:b},[(A=h.value)!=null&&A.selected?(x(),W(J(ua),{key:0})):(x(),W(J(pa),{key:1}))],2)]}),_:1})):Y("",!0)])):Y("",!0),J(Z)(d.file.name)?(x(),V("div",{key:d.file.fullpath,class:fe(`idx-${d.idx} item-content`)},[w(s,{src:v.value,fallback:J(ta),preview:{src:d.fullScreenPreviewImageUrl,onVisibleChange:(f,A)=>t("previewVisibleChange",f,A)}},null,8,["src","fallback","preview"]),r.value&&d.cellWidth>128?(x(),V("div",sr,[(x(!0),V(te,null,be(r.value,f=>(x(),W(o,{key:f.id,color:J(a).getColor(f.name)},{default:F(()=>[j(R(f.name),1)]),_:2},1032,["color"]))),128))])):Y("",!0)],2)):J(hi)(d.file.name)?(x(),V("div",{key:3,class:fe(`idx-${d.idx} item-content video`),onClick:m[3]||(m[3]=f=>J(_a)(d.file))},[re("div",or,[w(J(ya))]),r.value&&d.cellWidth>128?(x(),V("div",cr,[(x(!0),V(te,null,be(r.value,f=>(x(),W(o,{key:f.id,color:J(a).getColor(f.name)},{default:F(()=>[j(R(f.name),1)]),_:2},1032,["color"]))),128))])):Y("",!0)],2)):(x(),V("div",ur,[d.file.type==="file"?(x(),W(J(Di),{key:0,class:"icon center"})):(x(),W(J(Hi),{key:1,class:"icon center"}))])),d.cellWidth>128?(x(),V("div",dr,[re("div",fr,R(d.file.name),1),re("div",vr,[re("div",null,R(d.file.size),1),re("div",null,R(d.file.date),1)])])):Y("",!0)])],42,ar))]),_:1},8,["visible"])}}});const Er=gi(pr,[["__scopeId","data-v-bbbcb390"]]);export{pe as D,Er as F,Ft as _,Ar as a,kr as b,Sr as c,Cr as d,wr as e,Ir as f,un as g,Je as h,an as i,ke as j,xa as k,_e as s,se as u}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/FileItem-eb45abcf.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/FileItem-eb45abcf.css new file mode 100644 index 0000000000000000000000000000000000000000..7f02ab0d3cd1a5cd0c6ceafdc5e758d4bc2f1066 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/FileItem-eb45abcf.css @@ -0,0 +1 @@ +.ant-dropdown-menu-item.ant-dropdown-menu-item-danger{color:#ff4d4f}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover{color:#fff;background-color:#ff4d4f}.ant-dropdown{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-4px;right:0;bottom:-4px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{font-size:10px}.ant-dropdown-wrap .anticon-down:before{transition:transform .2s}.ant-dropdown-wrap-open .anticon-down:before{transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden,.ant-dropdown-menu-submenu-hidden{display:none}.ant-dropdown-show-arrow.ant-dropdown-placement-topCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-topRight{padding-bottom:10px}.ant-dropdown-show-arrow.ant-dropdown-placement-bottomCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight{padding-top:10px}.ant-dropdown-arrow{position:absolute;z-index:1;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow,.ant-dropdown-placement-topLeft>.ant-dropdown-arrow,.ant-dropdown-placement-topRight>.ant-dropdown-arrow{bottom:6.2px;border-color:transparent #fff #fff transparent;box-shadow:3px 3px 7px #00000012}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow{left:50%;transform:translate(-50%) rotate(45deg)}.ant-dropdown-placement-topLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-topRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow,.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow,.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:6px;border-color:#fff transparent transparent #fff;box-shadow:-2px -2px 5px #0000000f}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow{left:50%;transform:translate(-50%) rotate(45deg)}.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:#00000073;transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;box-shadow:none;transform-origin:0 0}.ant-dropdown-menu-submenu-popup ul,.ant-dropdown-menu-submenu-popup li{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em}.ant-dropdown-menu-item{position:relative;display:flex;align-items:center}.ant-dropdown-menu-item-icon{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-title-content{flex:auto;white-space:nowrap}.ant-dropdown-menu-title-content>a{color:inherit;transition:all .3s}.ant-dropdown-menu-title-content>a:hover{color:inherit}.ant-dropdown-menu-title-content>a:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:#000000d9;font-weight:400;font-size:14px;line-height:22px;cursor:pointer;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu-title-selected{color:#d03f0a;background-color:#fff1e6}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#f5f5f5}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:#00000040;cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:#00000040;background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-item-disabled a,.ant-dropdown-menu-submenu-title-disabled a{pointer-events:none}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#f0f0f0}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-right:0!important;color:#00000073;font-size:10px;font-style:normal}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:24px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:#00000040;background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#d03f0a}.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpIn}.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight{animation-name:antSlideDownIn}.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpOut}.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight{animation-name:antSlideDownOut}.ant-dropdown-trigger>.anticon.anticon-down,.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-button>.anticon.anticon-down{font-size:10px;vertical-align:baseline}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn-loading,.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn{cursor:default;pointer-events:none}.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn:before{display:block}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only){padding-right:8px;padding-left:8px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#001529}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a{color:#ffffffa6}.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a .ant-dropdown-menu-submenu-arrow:after{color:#ffffffa6}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#d03f0a}.ant-dropdown-rtl{direction:rtl}.ant-dropdown-rtl.ant-dropdown:before{right:-7px;left:0}.ant-dropdown-menu.ant-dropdown-menu-rtl,.ant-dropdown-rtl .ant-dropdown-menu-item-group-title,.ant-dropdown-menu-submenu-rtl .ant-dropdown-menu-item-group-title{direction:rtl;text-align:right}.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl{transform-origin:100% 0}.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li,.ant-dropdown-rtl .ant-dropdown-menu-item,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{text-align:right}.ant-dropdown-rtl .ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>span>.anticon:first-child{margin-right:0;margin-left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{right:auto;left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-left:0!important;transform:scaleX(-1)}.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{padding-right:12px;padding-left:24px}.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{right:100%;left:0;margin-right:4px;margin-left:0}.ant-menu-item-danger.ant-menu-item,.ant-menu-item-danger.ant-menu-item:hover,.ant-menu-item-danger.ant-menu-item-active{color:#ff4d4f}.ant-menu-item-danger.ant-menu-item:active{background:#fff1f0}.ant-menu-item-danger.ant-menu-item-selected{color:#ff4d4f}.ant-menu-item-danger.ant-menu-item-selected>a,.ant-menu-item-danger.ant-menu-item-selected>a:hover{color:#ff4d4f}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{background-color:#fff1f0}.ant-menu-inline .ant-menu-item-danger.ant-menu-item:after{border-right-color:#ff4d4f}.ant-menu-dark .ant-menu-item-danger.ant-menu-item,.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,.ant-menu-dark .ant-menu-item-danger.ant-menu-item>a{color:#ff4d4f}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{color:#fff;background-color:#ff4d4f}.ant-menu{box-sizing:border-box;margin:0;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";padding:0;color:#000000d9;font-size:14px;line-height:0;text-align:left;list-style:none;background:#fff;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s}.ant-menu:before{display:table;content:""}.ant-menu:after{display:table;clear:both;content:""}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px #ffd0b0}.ant-menu ul,.ant-menu ol{margin:0;padding:0;list-style:none}.ant-menu-overflow{display:flex}.ant-menu-overflow-item{flex:none}.ant-menu-hidden,.ant-menu-submenu-hidden{display:none}.ant-menu-item-group-title{height:1.5715;padding:8px 16px;color:#00000073;font-size:14px;line-height:1.5715;transition:all .3s}.ant-menu-horizontal .ant-menu-submenu{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu,.ant-menu-submenu-inline{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-selected{color:#d03f0a}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#fff1e6}.ant-menu-submenu .ant-menu-sub{cursor:initial;transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-title-content{transition:color .3s}.ant-menu-item a{color:#000000d9}.ant-menu-item a:hover{color:#d03f0a}.ant-menu-item a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:""}.ant-menu-item>.ant-badge a{color:#000000d9}.ant-menu-item>.ant-badge a:hover{color:#d03f0a}.ant-menu-item-divider{overflow:hidden;line-height:0;border-color:#f0f0f0;border-style:solid;border-width:1px 0 0}.ant-menu-item-divider-dashed{border-style:dashed}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected a,.ant-menu-item-selected a:hover{color:#d03f0a}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#fff1e6}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #f0f0f0}.ant-menu-vertical-right{border-left:1px solid #f0f0f0}.ant-menu-vertical.ant-menu-sub,.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub{min-width:160px;max-height:calc(100vh - 100px);padding:0;overflow:hidden;border-right:0}.ant-menu-vertical.ant-menu-sub:not([class*="-active"]),.ant-menu-vertical-left.ant-menu-sub:not([class*="-active"]),.ant-menu-vertical-right.ant-menu-sub:not([class*="-active"]){overflow-x:hidden;overflow-y:auto}.ant-menu-vertical.ant-menu-sub .ant-menu-item,.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu{transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu-title{transition:border-color .3s,background .3s}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;transition:border-color .3s,background .3s,padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .ant-menu-item-icon,.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;font-size:14px;transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1),color .3s}.ant-menu-item .ant-menu-item-icon+span,.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{margin-left:10px;opacity:1;transition:opacity .3s cubic-bezier(.645,.045,.355,1),margin .3s,color .3s}.ant-menu-item .ant-menu-item-icon.svg,.ant-menu-submenu-title .ant-menu-item-icon.svg{vertical-align:-.125em}.ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-submenu-title.ant-menu-item-only-child>.anticon,.ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon{margin-right:0}.ant-menu-item:focus-visible,.ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px #ffd0b0}.ant-menu>.ant-menu-item-divider{margin:1px 0;padding:0}.ant-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;border-radius:2px;box-shadow:none;transform-origin:0 0}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;z-index:-1;width:100%;height:100%;opacity:.0001;content:" "}.ant-menu-submenu-placement-rightTop:before{top:0;left:-7px}.ant-menu-submenu>.ant-menu{background-color:#fff;border-radius:2px}.ant-menu-submenu>.ant-menu-submenu-title:after{transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-popup>.ant-menu{background-color:#fff}.ant-menu-submenu-expand-icon,.ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;color:#000000d9;transform:translateY(-50%);transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-arrow:before,.ant-menu-submenu-arrow:after{position:absolute;width:6px;height:1.5px;background-color:currentcolor;border-radius:2px;transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-arrow:before{transform:rotate(45deg) translateY(-2.5px)}.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translateY(2.5px)}.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-expand-icon,.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{color:#d03f0a}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:before,.ant-menu-submenu-inline .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translate(2.5px)}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline .ant-menu-submenu-arrow:after{transform:rotate(45deg) translate(-2.5px)}.ant-menu-submenu-horizontal .ant-menu-submenu-arrow{display:none}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow{transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translate(-2.5px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{transform:rotate(45deg) translate(2.5px)}.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected{color:#d03f0a}.ant-menu-horizontal{line-height:46px;border:0;border-bottom:1px solid #f0f0f0;box-shadow:none}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu{margin-top:-1px;margin-bottom:0;padding:0 20px}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected{color:#d03f0a}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected:after{border-bottom:2px solid #d03f0a}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom}.ant-menu-horizontal>.ant-menu-item:after,.ant-menu-horizontal>.ant-menu-submenu:after{position:absolute;right:20px;bottom:0;left:20px;border-bottom:2px solid transparent;transition:border-color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-horizontal>.ant-menu-submenu>.ant-menu-submenu-title{padding:0}.ant-menu-horizontal>.ant-menu-item a{color:#000000d9}.ant-menu-horizontal>.ant-menu-item a:hover{color:#d03f0a}.ant-menu-horizontal>.ant-menu-item a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected a{color:#d03f0a}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:" "}.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-inline .ant-menu-item{position:relative}.ant-menu-vertical .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-inline .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #d03f0a;transform:scaleY(.0001);opacity:0;transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-inline .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;line-height:40px;text-overflow:ellipsis}.ant-menu-vertical .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-inline .ant-menu-submenu{padding-bottom:.02px}.ant-menu-vertical .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-inline .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-inline>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-selected:after,.ant-menu-inline .ant-menu-item-selected:after{transform:scaleY(1);opacity:1;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline.ant-menu-root .ant-menu-item,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title{display:flex;align-items:center;transition:border-color .3s,background .3s,padding .1s cubic-bezier(.215,.61,.355,1)}.ant-menu-inline.ant-menu-root .ant-menu-item>.ant-menu-title-content,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>.ant-menu-title-content{flex:auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.ant-menu-inline.ant-menu-root .ant-menu-item>*,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>*{flex:none}.ant-menu.ant-menu-inline-collapsed{width:80px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 calc(50% - 8px);text-overflow:clip}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:0}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;opacity:0}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed .anticon{display:inline-block}.ant-menu.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu.ant-menu-inline-collapsed-tooltip a{color:#ffffffd9}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right,.ant-menu-root.ant-menu-inline{box-shadow:none}.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item>.ant-menu-inline-collapsed-noicon,.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title>.ant-menu-inline-collapsed-noicon{font-size:16px;text-align:center}.ant-menu-sub.ant-menu-inline{padding:0;background:#fafafa;border:0;border-radius:0;box-shadow:none}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:#00000040!important;background:none;cursor:not-allowed}.ant-menu-item-disabled:after,.ant-menu-submenu-disabled:after{border-color:transparent!important}.ant-menu-item-disabled a,.ant-menu-submenu-disabled a{color:#00000040!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:#00000040!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{background:rgba(0,0,0,.25)!important}.ant-layout-header .ant-menu{line-height:inherit}.ant-menu-inline-collapsed-tooltip a,.ant-menu-inline-collapsed-tooltip a:hover{color:#fff}.ant-menu-light .ant-menu-item:hover,.ant-menu-light .ant-menu-item-active,.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,.ant-menu-light .ant-menu-submenu-active,.ant-menu-light .ant-menu-submenu-title:hover{color:#d03f0a}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px #ab2800}.ant-menu-dark .ant-menu-item:focus-visible,.ant-menu-dark .ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px #ab2800}.ant-menu.ant-menu-dark,.ant-menu-dark .ant-menu-sub,.ant-menu.ant-menu-dark .ant-menu-sub{color:#ffffffa6;background:#001529}.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;transition:all .3s}.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#000c17}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;padding:0 20px;border-color:#001529;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item:hover{background-color:#d03f0a}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a,.ant-menu-dark .ant-menu-item>span>a{color:#ffffffa6}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-title:hover>a,.ant-menu-dark .ant-menu-item:hover>span>a,.ant-menu-dark .ant-menu-item-active>span>a,.ant-menu-dark .ant-menu-submenu-active>span>a,.ant-menu-dark .ant-menu-submenu-open>span>a,.ant-menu-dark .ant-menu-submenu-selected>span>a,.ant-menu-dark .ant-menu-submenu-title:hover>span>a{color:#fff}.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item:hover{background-color:transparent}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#d03f0a}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>span>a,.ant-menu-dark .ant-menu-item-selected>a:hover,.ant-menu-dark .ant-menu-item-selected>span>a:hover{color:#fff}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,.ant-menu-dark .ant-menu-item-selected .anticon{color:#fff}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon+span,.ant-menu-dark .ant-menu-item-selected .anticon+span{color:#fff}.ant-menu.ant-menu-dark .ant-menu-item-selected,.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected{background-color:#d03f0a}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled>a,.ant-menu-dark .ant-menu-item-disabled>span>a,.ant-menu-dark .ant-menu-submenu-disabled>span>a{color:#ffffff59!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:#ffffff59!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{background:rgba(255,255,255,.35)!important}.ant-menu.ant-menu-rtl{direction:rtl;text-align:right}.ant-menu-rtl .ant-menu-item-group-title{text-align:right}.ant-menu-rtl.ant-menu-inline,.ant-menu-rtl.ant-menu-vertical{border-right:none;border-left:1px solid #f0f0f0}.ant-menu-rtl.ant-menu-dark.ant-menu-inline,.ant-menu-rtl.ant-menu-dark.ant-menu-vertical{border-left:none}.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu{transform-origin:top right}.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-rtl .ant-menu-item .anticon,.ant-menu-rtl .ant-menu-submenu-title .anticon{margin-right:auto;margin-left:10px}.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.anticon{margin-left:0}.ant-menu-submenu-rtl.ant-menu-submenu-popup{transform-origin:100% 0}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{right:auto;left:16px}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translateY(-2px)}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{transform:rotate(45deg) translateY(2px)}.ant-menu-rtl.ant-menu-vertical .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-rtl.ant-menu-inline .ant-menu-item:after{right:auto;left:0}.ant-menu-rtl.ant-menu-vertical .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,.ant-menu-rtl.ant-menu-inline .ant-menu-item,.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{text-align:right}.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{padding-right:0;padding-left:34px}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title{padding-right:16px;padding-left:34px}.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title{padding:0 calc(50% - 8px)}.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title{padding:0 28px 0 16px}.ant-menu-sub.ant-menu-inline{border:0}.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-right:32px;padding-left:0}.vue-recycle-scroller{position:relative}.vue-recycle-scroller.direction-vertical:not(.page-mode){overflow-y:auto}.vue-recycle-scroller.direction-horizontal:not(.page-mode){overflow-x:auto}.vue-recycle-scroller.direction-horizontal{display:flex}.vue-recycle-scroller__slot{flex:auto 0 0}.vue-recycle-scroller__item-wrapper{flex:1;box-sizing:border-box;overflow:hidden;position:relative}.vue-recycle-scroller.ready .vue-recycle-scroller__item-view{position:absolute;top:0;left:0;will-change:transform}.vue-recycle-scroller.direction-vertical .vue-recycle-scroller__item-wrapper{width:100%}.vue-recycle-scroller.direction-horizontal .vue-recycle-scroller__item-wrapper{height:100%}.vue-recycle-scroller.ready.direction-vertical .vue-recycle-scroller__item-view{width:100%}.vue-recycle-scroller.ready.direction-horizontal .vue-recycle-scroller__item-view{height:100%}.resize-observer[data-v-b329ee4c]{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%;border:none;background-color:transparent;pointer-events:none;display:block;overflow:hidden;opacity:0}.resize-observer[data-v-b329ee4c] object{display:block;position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden;pointer-events:none;z-index:-1}.ant-tag{box-sizing:border-box;margin:0 8px 0 0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block;height:auto;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:#fafafa;border:1px solid #d9d9d9;border-radius:2px;opacity:1;transition:all .3s}.ant-tag,.ant-tag a,.ant-tag a:hover{color:#000000d9}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag-close-icon{margin-left:3px;color:#00000073;font-size:10px;cursor:pointer;transition:all .3s}.ant-tag-close-icon:hover{color:#000000d9}.ant-tag-has-color{border-color:transparent}.ant-tag-has-color,.ant-tag-has-color a,.ant-tag-has-color a:hover,.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover{color:#fff}.ant-tag-checkable{background-color:transparent;border-color:transparent;cursor:pointer}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#d03f0a}.ant-tag-checkable:active,.ant-tag-checkable-checked{color:#fff}.ant-tag-checkable-checked{background-color:#d03f0a}.ant-tag-checkable:active{background-color:#ab2800}.ant-tag-hidden{display:none}.ant-tag-pink{color:#c41d7f;background:#fff0f6;border-color:#ffadd2}.ant-tag-pink-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-magenta{color:#c41d7f;background:#fff0f6;border-color:#ffadd2}.ant-tag-magenta-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-red{color:#cf1322;background:#fff1f0;border-color:#ffa39e}.ant-tag-red-inverse{color:#fff;background:#f5222d;border-color:#f5222d}.ant-tag-volcano{color:#d4380d;background:#fff2e8;border-color:#ffbb96}.ant-tag-volcano-inverse{color:#fff;background:#fa541c;border-color:#fa541c}.ant-tag-orange{color:#d46b08;background:#fff7e6;border-color:#ffd591}.ant-tag-orange-inverse{color:#fff;background:#fa8c16;border-color:#fa8c16}.ant-tag-yellow{color:#d4b106;background:#feffe6;border-color:#fffb8f}.ant-tag-yellow-inverse{color:#fff;background:#fadb14;border-color:#fadb14}.ant-tag-gold{color:#d48806;background:#fffbe6;border-color:#ffe58f}.ant-tag-gold-inverse{color:#fff;background:#faad14;border-color:#faad14}.ant-tag-cyan{color:#08979c;background:#e6fffb;border-color:#87e8de}.ant-tag-cyan-inverse{color:#fff;background:#13c2c2;border-color:#13c2c2}.ant-tag-lime{color:#7cb305;background:#fcffe6;border-color:#eaff8f}.ant-tag-lime-inverse{color:#fff;background:#a0d911;border-color:#a0d911}.ant-tag-green{color:#389e0d;background:#f6ffed;border-color:#b7eb8f}.ant-tag-green-inverse{color:#fff;background:#52c41a;border-color:#52c41a}.ant-tag-blue{color:#096dd9;background:#e6f7ff;border-color:#91d5ff}.ant-tag-blue-inverse{color:#fff;background:#1890ff;border-color:#1890ff}.ant-tag-geekblue{color:#1d39c4;background:#f0f5ff;border-color:#adc6ff}.ant-tag-geekblue-inverse{color:#fff;background:#2f54eb;border-color:#2f54eb}.ant-tag-purple{color:#531dab;background:#f9f0ff;border-color:#d3adf7}.ant-tag-purple-inverse{color:#fff;background:#722ed1;border-color:#722ed1}.ant-tag-success{color:#52c41a;background:#f6ffed;border-color:#b7eb8f}.ant-tag-processing{color:#d03f0a;background:#fff1e6;border-color:#f7ae83}.ant-tag-error{color:#ff4d4f;background:#fff2f0;border-color:#ffccc7}.ant-tag-warning{color:#faad14;background:#fffbe6;border-color:#ffe58f}.ant-tag>.anticon+span,.ant-tag>span+.anticon{margin-left:7px}.ant-tag.ant-tag-rtl{margin-right:0;margin-left:8px;direction:rtl;text-align:right}.ant-tag-rtl .ant-tag-close-icon{margin-right:3px;margin-left:0}.ant-tag-rtl.ant-tag>.anticon+span,.ant-tag-rtl.ant-tag>span+.anticon{margin-right:7px;margin-left:0}.center[data-v-bbbcb390]{display:flex;justify-content:center;align-items:center}.item-content[data-v-bbbcb390]{position:relative}.item-content.video[data-v-bbbcb390]{background-color:var(--zp-border);border-radius:8px;overflow:hidden;width:var(--a5a93268);height:var(--a5a93268);cursor:pointer}.item-content .play-icon[data-v-bbbcb390]{position:absolute;top:50%;left:50%;font-size:3em;transform:translate(-50%,-50%)}.item-content .tags-container[data-v-bbbcb390]{position:absolute;right:8px;bottom:8px;display:flex;width:calc(100% - 16px);flex-wrap:wrap-reverse;flex-direction:row-reverse}.item-content .tags-container>*[data-v-bbbcb390]{margin:0 0 4px 4px;font-size:14px;line-height:1.6}.close-icon[data-v-bbbcb390]{position:absolute;top:0;right:0;transform:translate(50%,-50%) scale(1.5);cursor:pointer;z-index:100;border-radius:100%;overflow:hidden;line-height:1;background-color:var(--zp-primary-background)}.file[data-v-bbbcb390]{padding:8px 16px;margin:8px;display:flex;align-items:center;background:var(--zp-primary-background);border-radius:8px;box-shadow:0 0 4px var(--zp-secondary-variant-background);position:relative}.file:hover .more[data-v-bbbcb390]{opacity:1}.file .more[data-v-bbbcb390]{opacity:0;transition:all .3s ease;position:absolute;top:4px;right:4px;z-index:100;display:flex;align-items:center;justify-content:center;flex-direction:column;line-height:1em}.file .more .float-btn-wrap[data-v-bbbcb390]{font-size:1.5em;cursor:pointer;font-size:500;padding:4px;border-radius:100vh;color:#fff;background:var(--zp-icon-bg);margin-bottom:4px}.file .more .float-btn-wrap.like-selected[data-v-bbbcb390]{color:#df0505}.file.grid[data-v-bbbcb390]{padding:0;display:inline-block;box-sizing:content-box;box-shadow:unset;background-color:var(--zp-secondary-background)}.file.grid[data-v-bbbcb390] .icon{font-size:8em}.file.grid[data-v-bbbcb390] .profile{padding:0 4px}.file.grid[data-v-bbbcb390] .profile .name{font-weight:500;padding:0}.file.grid[data-v-bbbcb390] .profile .basic-info{display:flex;justify-content:space-between;flex-direction:row;margin:0;font-size:.7em}.file.grid[data-v-bbbcb390] .ant-image,.file.grid[data-v-bbbcb390] .preview-icon-wrap{border:1px solid var(--zp-secondary);background-color:var(--zp-secondary-variant-background);border-radius:8px;overflow:hidden}.file.grid[data-v-bbbcb390] img,.file.grid[data-v-bbbcb390] .preview-icon-wrap>[role=img]{height:var(--a5a93268);width:var(--a5a93268);object-fit:contain}.file.clickable[data-v-bbbcb390]{cursor:pointer}.file.selected[data-v-bbbcb390]{outline:#0084ff solid 2px}.file .name[data-v-bbbcb390]{flex:1;padding:8px;word-break:break-all}.file .basic-info[data-v-bbbcb390]{overflow:hidden;display:flex;flex-direction:column;align-items:flex-end} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/ImgSliPagePane-ddd42d8b.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/ImgSliPagePane-ddd42d8b.js new file mode 100644 index 0000000000000000000000000000000000000000..e9fafe0a2532c1ee2c37dc656dbf7ab475652234 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/ImgSliPagePane-ddd42d8b.js @@ -0,0 +1 @@ +import{d as t,o as a,m as r,c1 as n}from"./index-cc731081.js";const p=t({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(o){return(e,s)=>(a(),r(n,{left:e.left,right:e.right},null,8,["left","right"]))}});export{p as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/MatchedImageGrid-4f83f417.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/MatchedImageGrid-4f83f417.css new file mode 100644 index 0000000000000000000000000000000000000000..dd620f22306a3e4cbe2931c609691aa108e94c55 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/MatchedImageGrid-4f83f417.css @@ -0,0 +1 @@ +.preview-switch[data-v-6cc08968]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-6cc08968]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-6cc08968]{opacity:0;pointer-events:none;cursor:none}.container[data-v-6cc08968]{background:var(--zp-secondary-background)}.container .file-list[data-v-6cc08968]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/MatchedImageGrid-d1916e98.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/MatchedImageGrid-d1916e98.js new file mode 100644 index 0000000000000000000000000000000000000000..fb2f3a453ab902581f7948bcc5f00486fbbc9665 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/MatchedImageGrid-d1916e98.js @@ -0,0 +1 @@ +import{d as q,l as Q,ax as W,o as r,y as h,c as l,n as a,r as e,s as y,p as b,t as X,v as S,x as j,m as M,L as H,C as m,N as T,Q as J,R as K,X as Y}from"./index-cc731081.js";import{L as Z,R as ee,f as te,S as ie}from"./fullScreenContextMenu-d94d841d.js";import{g as se,F as le}from"./FileItem-8394fb78.js";import{g as ne}from"./db-66d20dea.js";import{c as ae,u as oe}from"./hook-7e629e37.js";import"./shortcut-911a6445.js";const re={class:"hint"},de={key:1,class:"preview-switch"},ce=q({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(V){const u=V,p=ae(c=>ne(u.selectedTagIds,c)),{queue:D,images:i,onContextMenuClickU:g,stackViewEl:F,previewIdx:n,previewing:f,onPreviewVisibleChange:z,previewImgMove:v,canPreview:I,itemSize:w,gridItems:$,showGenInfo:o,imageGenInfo:k,q:B,multiSelectedIdxs:G,onFileItemClick:N,scroller:x,showMenuIdx:d,onFileDragStart:R,onFileDragEnd:E,cellWidth:P,onScroll:C}=oe(p);return Q(()=>u.selectedTagIds,async()=>{await p.reset(),await W(),x.value.scrollToItem(0),C()},{immediate:!0}),(c,t)=>{const U=J,A=K,L=ie;return r(),h("div",{class:"container",ref_key:"stackViewEl",ref:F},[l(L,{size:"large",spinning:!e(D).isIdle},{default:a(()=>[l(A,{visible:e(o),"onUpdate:visible":t[1]||(t[1]=s=>y(o)?o.value=s:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=s=>o.value=!1)},{cancelText:a(()=>[]),default:a(()=>[l(U,{active:"",loading:!e(B).isIdle},{default:a(()=>[b("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=s=>e(X)(e(k)))},[b("div",re,S(c.$t("doubleClickToCopy")),1),j(" "+S(e(k)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),e(i)?(r(),M(e(se),{key:0,ref_key:"scroller",ref:x,class:"file-list",items:e(i),"item-size":e(w).first,"key-field":"fullpath","item-secondary-size":e(w).second,gridItems:e($),onScroll:e(C)},{default:a(({item:s,index:_})=>[l(le,{idx:_,file:s,"cell-width":e(P),"show-menu-idx":e(d),"onUpdate:showMenuIdx":t[3]||(t[3]=O=>y(d)?d.value=O:null),onDragstart:e(R),onDragend:e(E),onFileItemClick:e(N),"full-screen-preview-image-url":e(i)[e(n)]?e(H)(e(i)[e(n)]):"",selected:e(G).includes(_),onContextMenuClick:e(g),onPreviewVisibleChange:e(z)},null,8,["idx","file","cell-width","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):m("",!0),e(f)?(r(),h("div",de,[l(e(Z),{onClick:t[4]||(t[4]=s=>e(v)("prev")),class:T({disable:!e(I)("prev")})},null,8,["class"]),l(e(ee),{onClick:t[5]||(t[5]=s=>e(v)("next")),class:T({disable:!e(I)("next")})},null,8,["class"])])):m("",!0)]),_:1},8,["spinning"]),e(f)&&e(i)&&e(i)[e(n)]?(r(),M(te,{key:0,file:e(i)[e(n)],idx:e(n),onContextMenuClick:e(g)},null,8,["file","idx","onContextMenuClick"])):m("",!0)],512)}}});const Ie=Y(ce,[["__scopeId","data-v-6cc08968"]]);export{Ie as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/SubstrSearch-9d37606f.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/SubstrSearch-9d37606f.css new file mode 100644 index 0000000000000000000000000000000000000000..8b3abcd6bf21206b01475869cc0cc05804a0f7d7 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/SubstrSearch-9d37606f.css @@ -0,0 +1 @@ +.search-bar[data-v-ea1c4eca]{padding:8px;display:flex}.preview-switch[data-v-ea1c4eca]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-ea1c4eca]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-ea1c4eca]{opacity:0;pointer-events:none;cursor:none}.container[data-v-ea1c4eca]{background:var(--zp-secondary-background)}.container .file-list[data-v-ea1c4eca]{list-style:none;padding:8px;height:100%;overflow:auto;height:var(--pane-max-height);width:100%} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/SubstrSearch-b4fe9735.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/SubstrSearch-b4fe9735.js new file mode 100644 index 0000000000000000000000000000000000000000..e870c1826657587d04ae38865e87946a2ee6415e --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/SubstrSearch-b4fe9735.js @@ -0,0 +1 @@ +import{d as Y,$ as V,aw as Z,bQ as ee,bP as F,o as i,y as w,c as o,r as e,bT as ae,m,n as r,x as k,v,C as f,s as U,p as A,t as te,L as ne,N as E,ax as le,al as se,ai as ie,U as oe,V as re,Q as de,R as ue,X as ce}from"./index-cc731081.js";import{L as pe,R as me,f as ve,S as fe}from"./fullScreenContextMenu-d94d841d.js";/* empty css */import{g as ge,F as we}from"./FileItem-8394fb78.js";import{b as T,c as ke,f as Ie,u as ye}from"./db-66d20dea.js";import{c as xe,u as Ce}from"./hook-7e629e37.js";import"./shortcut-911a6445.js";const be={key:0,class:"search-bar"},he={class:"hint"},_e={key:1,class:"preview-switch"},Se=Y({__name:"SubstrSearch",setup(Me){const c=V(""),I=xe(n=>Ie(c.value,n)),{queue:d,images:s,onContextMenuClickU:y,stackViewEl:R,previewIdx:u,previewing:x,onPreviewVisibleChange:N,previewImgMove:C,canPreview:b,itemSize:h,gridItems:P,showGenInfo:p,imageGenInfo:_,q:L,multiSelectedIdxs:q,onFileItemClick:G,scroller:S,showMenuIdx:g,onFileDragStart:K,onFileDragEnd:O,cellWidth:Q,onScroll:M}=Ce(I),t=V();Z(async()=>{t.value=await T(),t.value.img_count&&t.value.expired&&z()});const z=ee(()=>d.pushAction(async()=>(await ye(),t.value=await T(),t.value)).res),D=async()=>{await I.reset({refetch:!0}),await le(),M(),S.value.scrollToItem(0),s.value.length||se.info(ie("fuzzy-search-noResults"))};return F("returnToIIB",async()=>{const n=await d.pushAction(ke).res;t.value.expired=n.expired}),F("searchIndexExpired",()=>t.value&&(t.value.expired=!0)),(n,a)=>{const H=oe,$=re,W=de,X=ue,j=fe;return i(),w("div",{class:"container",ref_key:"stackViewEl",ref:R},[t.value?(i(),w("div",be,[o(H,{value:c.value,"onUpdate:value":a[0]||(a[0]=l=>c.value=l),placeholder:n.$t("fuzzy-search-placeholder"),disabled:!e(d).isIdle,onKeydown:ae(D,["enter"]),"allow-clear":""},null,8,["value","placeholder","disabled","onKeydown"]),t.value.expired||!t.value.img_count?(i(),m($,{key:0,onClick:e(z),loading:!e(d).isIdle,type:"primary"},{default:r(()=>[k(v(t.value.img_count===0?n.$t("generateIndexHint"):n.$t("UpdateIndex")),1)]),_:1},8,["onClick","loading"])):(i(),m($,{key:1,type:"primary",onClick:D,loading:!e(d).isIdle,disabled:!c.value},{default:r(()=>[k(v(n.$t("search")),1)]),_:1},8,["loading","disabled"]))])):f("",!0),o(j,{size:"large",spinning:!e(d).isIdle},{default:r(()=>[o(X,{visible:e(p),"onUpdate:visible":a[2]||(a[2]=l=>U(p)?p.value=l:null),width:"70vw","mask-closable":"",onOk:a[3]||(a[3]=l=>p.value=!1)},{cancelText:r(()=>[]),default:r(()=>[o(W,{active:"",loading:!e(L).isIdle},{default:r(()=>[A("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:a[1]||(a[1]=l=>e(te)(e(_)))},[A("div",he,v(n.$t("doubleClickToCopy")),1),k(" "+v(e(_)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),e(s)?(i(),m(e(ge),{key:0,ref_key:"scroller",ref:S,class:"file-list",items:e(s),"item-size":e(h).first,"key-field":"fullpath","item-secondary-size":e(h).second,gridItems:e(P),onScroll:e(M)},{default:r(({item:l,index:B})=>[o(we,{idx:B,file:l,"show-menu-idx":e(g),"onUpdate:showMenuIdx":a[4]||(a[4]=J=>U(g)?g.value=J:null),onFileItemClick:e(G),"full-screen-preview-image-url":e(s)[e(u)]?e(ne)(e(s)[e(u)]):"","cell-width":e(Q),selected:e(q).includes(B),onContextMenuClick:e(y),onDragstart:e(K),onDragend:e(O),onPreviewVisibleChange:e(N)},null,8,["idx","file","show-menu-idx","onFileItemClick","full-screen-preview-image-url","cell-width","selected","onContextMenuClick","onDragstart","onDragend","onPreviewVisibleChange"])]),_:1},8,["items","item-size","item-secondary-size","gridItems","onScroll"])):f("",!0),e(x)?(i(),w("div",_e,[o(e(pe),{onClick:a[5]||(a[5]=l=>e(C)("prev")),class:E({disable:!e(b)("prev")})},null,8,["class"]),o(e(me),{onClick:a[6]||(a[6]=l=>e(C)("next")),class:E({disable:!e(b)("next")})},null,8,["class"])])):f("",!0)]),_:1},8,["spinning"]),e(x)&&e(s)&&e(s)[e(u)]?(i(),m(ve,{key:1,file:e(s)[e(u)],idx:e(u),onContextMenuClick:e(y)},null,8,["file","idx","onContextMenuClick"])):f("",!0)],512)}}});const Ae=ce(Se,[["__scopeId","data-v-ea1c4eca"]]);export{Ae as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/TagSearch-735f95ac.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/TagSearch-735f95ac.js new file mode 100644 index 0000000000000000000000000000000000000000..6d7c578cfe3cb0f599d5fd2b4cc4d7a8d6b21cc4 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/TagSearch-735f95ac.js @@ -0,0 +1 @@ +import{P as j,Z as _e,d as ae,bq as ge,aY as be,$ as F,bH as Ce,l as xe,u as he,ao as J,a0 as Z,h as x,c as v,a as W,bI as Ie,b as Ae,f as we,bJ as ke,a3 as se,bK as Pe,a2 as $e,i as Oe,b0 as Se,bL as Be,a5 as Ke,a6 as Te,a7 as Ee,ag as Ne,aT as Re,aR as Me,bM as De,aS as je,bN as Fe,k as Ue,bO as Ve,aq as Le,aw as qe,bP as oe,bQ as ze,o as C,y as S,C as q,z as Y,p as M,v as B,r as K,S as te,m as Q,n as V,x as z,A as ie,N as re,bR as Ge,q as ce,a1 as He,ap as Qe,al as de,ai as ne,R as Je,V as ue,U as We,bS as Xe,X as Ye}from"./index-cc731081.js";/* empty css *//* empty css */import{b as ve,c as Ze,d as ea,e as aa,u as ta}from"./db-66d20dea.js";var na=function(){return{prefixCls:String,activeKey:{type:[Array,Number,String]},defaultActiveKey:{type:[Array,Number,String]},accordion:{type:Boolean,default:void 0},destroyInactivePanel:{type:Boolean,default:void 0},bordered:{type:Boolean,default:void 0},expandIcon:Function,openAnimation:j.object,expandIconPosition:j.oneOf(_e("left","right")),collapsible:{type:String},ghost:{type:Boolean,default:void 0},onChange:Function,"onUpdate:activeKey":Function}},me=function(){return{openAnimation:j.object,prefixCls:String,header:j.any,headerClass:String,showArrow:{type:Boolean,default:void 0},isActive:{type:Boolean,default:void 0},destroyInactivePanel:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},accordion:{type:Boolean,default:void 0},forceRender:{type:Boolean,default:void 0},expandIcon:Function,extra:j.any,panelKey:j.oneOfType([j.string,j.number]),collapsible:{type:String},role:String,onItemClick:{type:Function}}};function fe(l){var e=l;if(!Array.isArray(e)){var t=Ae(e);e=t==="number"||t==="string"?[e]:[]}return e.map(function(s){return String(s)})}const X=ae({compatConfig:{MODE:3},name:"ACollapse",inheritAttrs:!1,props:ge(na(),{accordion:!1,destroyInactivePanel:!1,bordered:!0,openAnimation:be("ant-motion-collapse",!1),expandIconPosition:"left"}),slots:["expandIcon"],setup:function(e,t){var s=t.attrs,c=t.slots,n=t.emit,o=F(fe(Ce([e.activeKey,e.defaultActiveKey])));xe(function(){return e.activeKey},function(){o.value=fe(e.activeKey)},{deep:!0});var f=he("collapse",e),g=f.prefixCls,P=f.direction,T=J(function(){var d=e.expandIconPosition;return d!==void 0?d:P.value==="rtl"?"right":"left"}),h=function(r){var u=e.expandIcon,y=u===void 0?c.expandIcon:u,_=y?y(r):v(Pe,{rotate:r.isActive?90:void 0},null);return v("div",null,[$e(Array.isArray(y)?_[0]:_)?se(_,{class:"".concat(g.value,"-arrow")},!1):_])},E=function(r){e.activeKey===void 0&&(o.value=r);var u=e.accordion?r[0]:r;n("update:activeKey",u),n("change",u)},$=function(r){var u=o.value;if(e.accordion)u=u[0]===r?[]:[r];else{u=Oe(u);var y=u.indexOf(r),_=y>-1;_?u.splice(y,1):u.push(r)}E(u)},D=function(r,u){var y,_,R;if(!ke(r)){var a=o.value,i=e.accordion,b=e.destroyInactivePanel,k=e.collapsible,O=e.openAnimation,I=String((y=r.key)!==null&&y!==void 0?y:u),w=r.props||{},A=w.header,p=A===void 0?(_=r.children)===null||_===void 0||(R=_.header)===null||R===void 0?void 0:R.call(_):A,G=w.headerClass,m=w.collapsible,L=w.disabled,U=!1;i?U=a[0]===I:U=a.indexOf(I)>-1;var H=m??k;(L||L==="")&&(H="disabled");var ye={key:I,panelKey:I,header:p,headerClass:G,isActive:U,prefixCls:g.value,destroyInactivePanel:b,openAnimation:O,accordion:i,onItemClick:H==="disabled"?null:$,expandIcon:h,collapsible:H};return se(r,ye)}},N=function(){var r;return we((r=c.default)===null||r===void 0?void 0:r.call(c)).map(D)};return function(){var d,r=e.accordion,u=e.bordered,y=e.ghost,_=Z((d={},x(d,g.value,!0),x(d,"".concat(g.value,"-borderless"),!u),x(d,"".concat(g.value,"-icon-position-").concat(T.value),!0),x(d,"".concat(g.value,"-rtl"),P.value==="rtl"),x(d,"".concat(g.value,"-ghost"),!!y),x(d,s.class,!!s.class),d));return v("div",W(W({class:_},Ie(s)),{},{style:s.style,role:r?"tablist":null}),[N()])}}}),la=ae({compatConfig:{MODE:3},name:"PanelContent",props:me(),setup:function(e,t){var s=t.slots,c=F(!1);return Se(function(){(e.isActive||e.forceRender)&&(c.value=!0)}),function(){var n,o;if(!c.value)return null;var f=e.prefixCls,g=e.isActive,P=e.role;return v("div",{ref:F,class:Z("".concat(f,"-content"),(n={},x(n,"".concat(f,"-content-active"),g),x(n,"".concat(f,"-content-inactive"),!g),n)),role:P},[v("div",{class:"".concat(f,"-content-box")},[(o=s.default)===null||o===void 0?void 0:o.call(s)])])}}}),ee=ae({compatConfig:{MODE:3},name:"ACollapsePanel",inheritAttrs:!1,props:ge(me(),{showArrow:!0,isActive:!1,onItemClick:function(){},headerClass:"",forceRender:!1}),slots:["expandIcon","extra","header"],setup:function(e,t){var s=t.slots,c=t.emit,n=t.attrs;Be(e.disabled===void 0,"Collapse.Panel",'`disabled` is deprecated. Please use `collapsible="disabled"` instead.');var o=he("collapse",e),f=o.prefixCls,g=function(){c("itemClick",e.panelKey)},P=function(h){(h.key==="Enter"||h.keyCode===13||h.which===13)&&g()};return function(){var T,h,E,$,D=e.header,N=D===void 0?(T=s.header)===null||T===void 0?void 0:T.call(s):D,d=e.headerClass,r=e.isActive,u=e.showArrow,y=e.destroyInactivePanel,_=e.accordion,R=e.forceRender,a=e.openAnimation,i=e.expandIcon,b=i===void 0?s.expandIcon:i,k=e.extra,O=k===void 0?(h=s.extra)===null||h===void 0?void 0:h.call(s):k,I=e.collapsible,w=I==="disabled",A=f.value,p=Z("".concat(A,"-header"),(E={},x(E,d,d),x(E,"".concat(A,"-header-collapsible-only"),I==="header"),E)),G=Z(($={},x($,"".concat(A,"-item"),!0),x($,"".concat(A,"-item-active"),r),x($,"".concat(A,"-item-disabled"),w),x($,"".concat(A,"-no-arrow"),!u),x($,"".concat(n.class),!!n.class),$)),m=v("i",{class:"arrow"},null);u&&typeof b=="function"&&(m=b(e));var L=Ke(v(la,{prefixCls:A,isActive:r,forceRender:R,role:_?"tabpanel":null},{default:s.default}),[[Te,r]]),U=W({appear:!1,css:!1},a);return v("div",W(W({},n),{},{class:G}),[v("div",{class:p,onClick:function(){return I!=="header"&&g()},role:_?"tab":"button",tabindex:w?-1:0,"aria-expanded":r,onKeypress:P},[u&&m,I==="header"?v("span",{onClick:g,class:"".concat(A,"-header-text")},[N]):N,O&&v("div",{class:"".concat(A,"-extra")},[O])]),v(Ee,U,{default:function(){return[!y||r?L:null]}})])}}});X.Panel=ee;X.install=function(l){return l.component(X.name,X),l.component(ee.name,ee),l};var sa={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M869 487.8L491.2 159.9c-2.9-2.5-6.6-3.9-10.5-3.9h-88.5c-7.4 0-10.8 9.2-5.2 14l350.2 304H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h585.1L386.9 854c-5.6 4.9-2.2 14 5.2 14h91.5c1.9 0 3.8-.7 5.2-2L869 536.2a32.07 32.07 0 000-48.4z"}}]},name:"arrow-right",theme:"outlined"};const oa=sa;function pe(l){for(var e=1;e!s.isIdle),n=F(),o=F({and_tags:[],or_tags:[],not_tags:[]}),f=J(()=>n.value?n.value.tags.slice().sort((a,i)=>i.count-a.count):[]),g=["custom","Model","lora","lyco","pos","size","Postprocess upscaler","Postprocess upscale by","Sampler"].reduce((a,i,b)=>(a[i]=b,a),{}),P=J(()=>Object.entries(xa(f.value,a=>a.type)).sort((a,i)=>g[a[0]]-g[i[0]])),T=Le(),h=F(P.value.map(a=>a[0]));qe(async()=>{n.value=await ve(),h.value=P.value.map(a=>a[0]),n.value.img_count&&n.value.expired&&E()}),oe("searchIndexExpired",()=>n.value&&(n.value.expired=!0));const E=ze(()=>s.pushAction(async()=>(await ta(),n.value=await ve(),h.value=P.value.map(a=>a[0]),n.value)).res),$=()=>{t.openTagSearchMatchedImageGridInRight(e.tabIdx,T,o.value)};oe("returnToIIB",async()=>{const a=await s.pushAction(Ze).res;n.value.expired=a.expired});const D=(a,i=!1)=>(i?`[${a.type}] `:"")+(a.display_name?`${a.display_name} : ${a.name}`:a.name),N=F(!1),d=F(""),r=async()=>{var i,b,k;if(!d.value){N.value=!1;return}const a=await s.pushAction(()=>ea({tag_name:d.value})).res;a.type!=="custom"&&de.error(ne("existInOtherType")),(i=n.value)!=null&&i.tags.find(O=>O.id===a.id)?de.error(ne("alreadyExists")):((b=n.value)==null||b.tags.push(a),(k=t.conf)==null||k.all_custom_tags.push(a)),d.value="",N.value=!1},u=a=>{Je.confirm({title:ne("confirmDelete"),async onOk(){var b,k,O,I;await aa({tag_id:a});const i=((b=n.value)==null?void 0:b.tags.findIndex(w=>w.id===a))??-1;(k=n.value)==null||k.tags.splice(i,1),(I=t.conf)==null||I.all_custom_tags.splice((O=t.conf)==null?void 0:O.all_custom_tags.findIndex(w=>w.id===a),1)}})},y=J(()=>new Set([o.value.and_tags,o.value.or_tags,o.value.not_tags].flat())),_=a=>{y.value.has(a.id)?(o.value.and_tags=o.value.and_tags.filter(i=>i!==a.id),o.value.or_tags=o.value.or_tags.filter(i=>i!==a.id),o.value.not_tags=o.value.not_tags.filter(i=>i!==a.id)):o.value.and_tags.push(a.id)},R={value:a=>a.id,text:D,optionText:a=>D(a,!0)};return(a,i)=>{const b=ue,k=We,O=ue,I=Xe,w=ee,A=X;return C(),S("div",Ia,[q("",!0),n.value?(C(),S(Y,{key:1},[M("div",null,[M("div",Aa,[M("div",wa,B(a.$t("exactMatch")),1),v(K(te),{conv:R,mode:"multiple",style:{width:"100%"},options:f.value,value:o.value.and_tags,"onUpdate:value":i[0]||(i[0]=p=>o.value.and_tags=p),disabled:!f.value.length,placeholder:a.$t("selectExactMatchTag")},null,8,["options","value","disabled","placeholder"]),n.value.expired||!n.value.img_count?(C(),Q(b,{key:0,onClick:K(E),loading:!K(s).isIdle,type:"primary"},{default:V(()=>[z(B(n.value.img_count===0?a.$t("generateIndexHint"):a.$t("UpdateIndex")),1)]),_:1},8,["onClick","loading"])):(C(),Q(b,{key:1,type:"primary",onClick:$,loading:!K(s).isIdle,disabled:!o.value.and_tags.length},{default:V(()=>[z(B(a.$t("search")),1)]),_:1},8,["loading","disabled"]))]),M("div",ka,[M("div",Pa,B(a.$t("anyMatch")),1),v(K(te),{conv:R,mode:"multiple",style:{width:"100%"},options:f.value,value:o.value.or_tags,"onUpdate:value":i[1]||(i[1]=p=>o.value.or_tags=p),disabled:!f.value.length,placeholder:a.$t("selectAnyMatchTag")},null,8,["options","value","disabled","placeholder"])]),M("div",$a,[M("div",Oa,B(a.$t("exclude")),1),v(K(te),{conv:R,mode:"multiple",style:{width:"100%"},options:f.value,value:o.value.not_tags,"onUpdate:value":i[2]||(i[2]=p=>o.value.not_tags=p),disabled:!f.value.length,placeholder:a.$t("selectExcludeTag")},null,8,["options","value","disabled","placeholder"])])]),f.value.filter(p=>p.type!=="custom").length?q("",!0):(C(),S("p",Sa,B(a.$t("needGenerateIdx")),1)),M("div",Ba,[(C(!0),S(Y,null,ie(P.value,([p,G])=>(C(),S("ul",{class:"tag-list",key:p},[M("h3",{class:"cat-name",onClick:m=>h.value.includes(p)?h.value.splice(h.value.indexOf(p),1):h.value.push(p)},[v(K(ra),{class:re(["arrow",{down:h.value.includes(p)}])},null,8,["class"]),z(" "+B(a.$t(p)),1)],8,Ka),v(A,{ghost:"",activeKey:h.value,"onUpdate:activeKey":i[5]||(i[5]=m=>h.value=m)},{expandIcon:V(()=>[]),default:V(()=>[(C(),Q(w,{key:p},{default:V(()=>[(C(!0),S(Y,null,ie(G,(m,L)=>(C(),S("li",{key:m.id,class:re(["tag",{selected:y.value.has(m.id)}]),onClick:U=>_(m)},[y.value.has(m.id)?(C(),Q(K(Ge),{key:0})):q("",!0),z(" "+B(D(m))+" ",1),p==="custom"&&L!==0?(C(),S("span",{key:1,class:"remove",onClickCapture:ce(U=>u(m.id),["stop"])},[v(K(He))],40,Ea)):q("",!0)],10,Ta))),128)),p==="custom"?(C(),S("li",{key:0,class:"tag",onClick:i[4]||(i[4]=m=>N.value=!0)},[N.value?(C(),Q(I,{key:0,compact:""},{default:V(()=>[v(k,{value:d.value,"onUpdate:value":i[3]||(i[3]=m=>d.value=m),style:{width:"128px"},loading:c.value,"allow-clear":"",size:"small"},null,8,["value","loading"]),v(O,{size:"small",type:"primary",onClickCapture:ce(r,["stop"]),loading:c.value},{default:V(()=>[z(B(d.value?a.$t("submit"):a.$t("cancel")),1)]),_:1},8,["onClickCapture","loading"])]),_:1})):(C(),S(Y,{key:1},[v(K(Qe)),z(" "+B(a.$t("add")),1)],64))])):q("",!0)]),_:2},1024))]),_:2},1032,["activeKey"])]))),128))])],64)):q("",!0)])}}});const Fa=Ye(Na,[["__scopeId","data-v-d3d0aa40"]]);export{Fa as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/TagSearch-ffd782da.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/TagSearch-ffd782da.css new file mode 100644 index 0000000000000000000000000000000000000000..004c8ddc5dbc597cbe7f73fd1835b1ad54c997ab --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/TagSearch-ffd782da.css @@ -0,0 +1 @@ +.ant-collapse{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:2px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 2px 2px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;padding:12px 16px;color:#000000d9;line-height:1.5715;cursor:pointer;transition:all .3s,visibility 0s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{display:inline-block;margin-right:12px;font-size:12px;vertical-align:-1px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-left:auto}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{cursor:pointer}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{position:absolute;top:50%;right:16px;left:auto;margin:0;transform:translateY(-50%)}.ant-collapse-content{color:#000000d9;background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-hidden{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 2px 2px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:transparent;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:#00000040;cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{margin-right:0;margin-left:12px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-right:auto;margin-left:0}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}[data-v-d3d0aa40] .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:0}.container[data-v-d3d0aa40]{height:var(--pane-max-height);overflow:auto;display:flex;flex-direction:column;align-items:stretch}.container .generate-idx-hint[data-v-d3d0aa40]{margin:64px;padding:64px;font-size:2em;text-align:center;background-color:var(--zp-secondary-background);white-space:pre-line;line-height:2.5em;border-radius:16px}.container .remove[data-v-d3d0aa40]{padding:4px;position:cursor;border-radius:2px}.container .remove[data-v-d3d0aa40]:hover{background-color:var(--zp-secondary-background)}.container .select[data-v-d3d0aa40]{padding:8px}.container .search-bar[data-v-d3d0aa40]{padding:8px;display:flex}.container .search-bar .form-name[data-v-d3d0aa40]{flex-shrink:0;padding:4px 8px;width:128px}.container .list-container[data-v-d3d0aa40]{background-color:var(--zp-secondary-background);overflow:scroll}.container .cat-name[data-v-d3d0aa40]{user-select:none;position:sticky;top:0;padding:4px 16px;background:var(--zp-primary-background);margin:4px;transition:all .3s ease;border-left:4px solid var(--primary-color);cursor:pointer}.container .cat-name[data-v-d3d0aa40]:hover{border-radius:4px;background-color:var(--zp-secondary-background)}.container .cat-name .arrow[data-v-d3d0aa40]{color:var(--primary-color);transition:all .3s ease;margin-right:16px}.container .cat-name .arrow.down[data-v-d3d0aa40]{transform:rotate(90deg)}.container .tag-list[data-v-d3d0aa40]{list-style:none;margin:16px;border-radius:16px;background:var(--zp-primary-background);padding:8px}.container .tag-list .tag[data-v-d3d0aa40]{border:2px solid var(--zp-secondary);color:var(--zp-primary);border-radius:999px;padding:4px 16px;margin:4px;display:inline-block;cursor:pointer;max-width:256px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.container .tag-list .tag.selected[data-v-d3d0aa40]{color:var(--primary-color);border:2px solid var(--primary-color)} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/antd.dark-35e9b327.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/antd.dark-35e9b327.js new file mode 100644 index 0000000000000000000000000000000000000000..87b83fdf892321f331061f6765243c8701e29279 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/antd.dark-35e9b327.js @@ -0,0 +1,139 @@ +const t=`/*! + * + * ant-design-vue v3.2.20 + * + * Copyright 2017-present, ant-design-vue. + * All rights reserved. + * + *//*!****************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/style/index.less ***! + \\****************************************************************************************************************************************************************************************************************************************************/[class^=ant-]::-ms-clear,[class*=ant-]::-ms-clear,[class^=ant-] input::-ms-clear,[class*=ant-] input::-ms-clear,[class^=ant-] input::-ms-reveal,[class*=ant-] input::-ms-reveal{display:none}html,body{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{margin:0;color:#ffffffd9;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#000;font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:#ffffffd9;font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=text],input[type=password],input[type=number],textarea{-webkit-appearance:none}ol,ul,dl{margin-top:0;margin-bottom:1em}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#177ddc;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#165996}a:active{color:#388ed3}a:active,a:hover{text-decoration:none;outline:0}a:focus{text-decoration:none;outline:0}a[disabled]{color:#ffffff4d;cursor:not-allowed}pre,code,kbd,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}a,area,button,[role=button],input:not([type="range"]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:#ffffff73;text-align:left;caption-side:bottom}input,button,select,optgroup,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#2b2611}::-moz-selection{color:#fff;background:#177ddc}::selection{color:#fff;background:#177ddc}.clearfix:before{display:table;content:""}.clearfix:after{display:table;clear:both;content:""}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon>.anticon{line-height:0;vertical-align:0}.anticon[tabindex]{cursor:pointer}.anticon-spin:before{display:inline-block;animation:loadingCircle 1s infinite linear}.anticon-spin{display:inline-block;animation:loadingCircle 1s infinite linear}.ant-fade-enter,.ant-fade-appear,.ant-fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-fade-enter.ant-fade-enter-active,.ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.ant-fade-enter,.ant-fade-appear{opacity:0;animation-timing-function:linear}.ant-fade-leave{animation-timing-function:linear}.fade-enter,.fade-appear,.fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-enter.fade-enter-active,.fade-appear.fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.fade-leave.fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.fade-enter,.fade-appear{opacity:0;animation-timing-function:linear}.fade-leave{animation-timing-function:linear}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.ant-move-up-enter,.ant-move-up-appear,.ant-move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-up-enter.ant-move-up-enter-active,.ant-move-up-appear.ant-move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.ant-move-up-leave.ant-move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.ant-move-up-enter,.ant-move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-up-enter,.move-up-appear,.move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-enter.move-up-enter-active,.move-up-appear.move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.move-up-leave.move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.move-up-enter,.move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-down-enter,.ant-move-down-appear,.ant-move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-down-enter.ant-move-down-enter-active,.ant-move-down-appear.ant-move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.ant-move-down-leave.ant-move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.ant-move-down-enter,.ant-move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-enter,.move-down-appear,.move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-enter.move-down-enter-active,.move-down-appear.move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.move-down-leave.move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.move-down-enter,.move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-left-enter,.ant-move-left-appear,.ant-move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-left-enter.ant-move-left-enter-active,.ant-move-left-appear.ant-move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.ant-move-left-leave.ant-move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.ant-move-left-enter,.ant-move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-enter,.move-left-appear,.move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-enter.move-left-enter-active,.move-left-appear.move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.move-left-leave.move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.move-left-enter,.move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-right-enter,.ant-move-right-appear,.ant-move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-right-enter.ant-move-right-enter-active,.ant-move-right-appear.ant-move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.ant-move-right-leave.ant-move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.ant-move-right-enter,.ant-move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-enter,.move-right-appear,.move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-enter.move-right-enter-active,.move-right-appear.move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.move-right-leave.move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.move-right-enter,.move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@keyframes antMoveDownIn{0%{transform:translateY(100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveDownOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveLeftIn{0%{transform:translate(-100%);transform-origin:0 0;opacity:0}to{transform:translate(0);transform-origin:0 0;opacity:1}}@keyframes antMoveLeftOut{0%{transform:translate(0);transform-origin:0 0;opacity:1}to{transform:translate(-100%);transform-origin:0 0;opacity:0}}@keyframes antMoveRightIn{0%{transform:translate(100%);transform-origin:0 0;opacity:0}to{transform:translate(0);transform-origin:0 0;opacity:1}}@keyframes antMoveRightOut{0%{transform:translate(0);transform-origin:0 0;opacity:1}to{transform:translate(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveUpIn{0%{transform:translateY(-100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveUpOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(-100%);transform-origin:0 0;opacity:0}}@keyframes loadingCircle{to{transform:rotate(360deg)}}[ant-click-animating=true],[ant-click-animating-without-extra-node=true]{position:relative}html{--antd-wave-shadow-color: #177ddc;--scroll-bar: 0}[ant-click-animating-without-extra-node=true]:after,.ant-click-animating-node{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;box-shadow:0 0 #177ddc;box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation-fill-mode:forwards;content:"";pointer-events:none}@keyframes waveEffect{to{box-shadow:0 0 #177ddc;box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes fadeEffect{to{opacity:0}}.slide-up-enter,.slide-up-appear,.slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-enter.slide-up-enter-active,.slide-up-appear.slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.slide-up-leave.slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.slide-up-enter,.slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-enter,.slide-down-appear,.slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-enter.slide-down-enter-active,.slide-down-appear.slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.slide-down-leave.slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.slide-down-enter,.slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-enter,.slide-left-appear,.slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-enter.slide-left-enter-active,.slide-left-appear.slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.slide-left-leave.slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.slide-left-enter,.slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-enter,.slide-right-appear,.slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-enter.slide-right-enter-active,.slide-right-appear.slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.slide-right-leave.slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.slide-right-enter,.slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-up-enter,.ant-slide-up-appear,.ant-slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.ant-slide-up-enter,.ant-slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-down-enter,.ant-slide-down-appear,.ant-slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.ant-slide-down-enter,.ant-slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-left-enter,.ant-slide-left-appear,.ant-slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-left-enter.ant-slide-left-enter-active,.ant-slide-left-appear.ant-slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.ant-slide-left-leave.ant-slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.ant-slide-left-enter,.ant-slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-right-enter,.ant-slide-right-appear,.ant-slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-right-enter.ant-slide-right-enter-active,.ant-slide-right-appear.ant-slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.ant-slide-right-leave.ant-slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.ant-slide-right-enter,.ant-slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes antSlideUpIn{0%{transform:scaleY(.8);transform-origin:0% 0%;opacity:0}to{transform:scaleY(1);transform-origin:0% 0%;opacity:1}}@keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0% 0%;opacity:1}to{transform:scaleY(.8);transform-origin:0% 0%;opacity:0}}@keyframes antSlideDownIn{0%{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}to{transform:scaleY(1);transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1}to{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}}@keyframes antSlideLeftIn{0%{transform:scaleX(.8);transform-origin:0% 0%;opacity:0}to{transform:scaleX(1);transform-origin:0% 0%;opacity:1}}@keyframes antSlideLeftOut{0%{transform:scaleX(1);transform-origin:0% 0%;opacity:1}to{transform:scaleX(.8);transform-origin:0% 0%;opacity:0}}@keyframes antSlideRightIn{0%{transform:scaleX(.8);transform-origin:100% 0%;opacity:0}to{transform:scaleX(1);transform-origin:100% 0%;opacity:1}}@keyframes antSlideRightOut{0%{transform:scaleX(1);transform-origin:100% 0%;opacity:1}to{transform:scaleX(.8);transform-origin:100% 0%;opacity:0}}.ant-zoom-enter,.ant-zoom-appear,.ant-zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-enter.ant-zoom-enter-active,.ant-zoom-appear.ant-zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.ant-zoom-leave.ant-zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.ant-zoom-enter,.ant-zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-enter-prepare,.ant-zoom-appear-prepare{transform:none}.ant-zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-enter,.zoom-appear,.zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-enter.zoom-enter-active,.zoom-appear.zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.zoom-leave.zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.zoom-enter,.zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-enter-prepare,.zoom-appear-prepare{transform:none}.zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-enter,.ant-zoom-big-appear,.ant-zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-big-enter.ant-zoom-big-enter-active,.ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.ant-zoom-big-enter,.ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-enter-prepare,.ant-zoom-big-appear-prepare{transform:none}.ant-zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-enter,.zoom-big-appear,.zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-enter.zoom-big-enter-active,.zoom-big-appear.zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-enter,.zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-enter-prepare,.zoom-big-appear-prepare{transform:none}.zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear,.ant-zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-fast-enter-prepare,.ant-zoom-big-fast-appear-prepare{transform:none}.ant-zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-enter,.zoom-big-fast-appear,.zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-fast-enter.zoom-big-fast-enter-active,.zoom-big-fast-appear.zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-fast-enter,.zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-enter-prepare,.zoom-big-fast-appear-prepare{transform:none}.zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-up-enter,.ant-zoom-up-appear,.ant-zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-up-enter.ant-zoom-up-enter-active,.ant-zoom-up-appear.ant-zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.ant-zoom-up-leave.ant-zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.ant-zoom-up-enter,.ant-zoom-up-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-up-enter-prepare,.ant-zoom-up-appear-prepare{transform:none}.ant-zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-enter,.zoom-up-appear,.zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-enter.zoom-up-enter-active,.zoom-up-appear.zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.zoom-up-enter,.zoom-up-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-enter-prepare,.zoom-up-appear-prepare{transform:none}.zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-down-enter,.ant-zoom-down-appear,.ant-zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-down-enter.ant-zoom-down-enter-active,.ant-zoom-down-appear.ant-zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.ant-zoom-down-leave.ant-zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.ant-zoom-down-enter,.ant-zoom-down-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-down-enter-prepare,.ant-zoom-down-appear-prepare{transform:none}.ant-zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-enter,.zoom-down-appear,.zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-enter.zoom-down-enter-active,.zoom-down-appear.zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.zoom-down-enter,.zoom-down-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-enter-prepare,.zoom-down-appear-prepare{transform:none}.zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-left-enter,.ant-zoom-left-appear,.ant-zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-left-enter.ant-zoom-left-enter-active,.ant-zoom-left-appear.ant-zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.ant-zoom-left-leave.ant-zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.ant-zoom-left-enter,.ant-zoom-left-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-left-enter-prepare,.ant-zoom-left-appear-prepare{transform:none}.ant-zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-enter,.zoom-left-appear,.zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-enter.zoom-left-enter-active,.zoom-left-appear.zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.zoom-left-enter,.zoom-left-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-enter-prepare,.zoom-left-appear-prepare{transform:none}.zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-right-enter,.ant-zoom-right-appear,.ant-zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-right-enter.ant-zoom-right-enter-active,.ant-zoom-right-appear.ant-zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.ant-zoom-right-leave.ant-zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.ant-zoom-right-enter,.ant-zoom-right-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-right-enter-prepare,.ant-zoom-right-appear-prepare{transform:none}.ant-zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-enter,.zoom-right-appear,.zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-enter.zoom-right-enter-active,.zoom-right-appear.zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.zoom-right-enter,.zoom-right-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-enter-prepare,.zoom-right-appear-prepare{transform:none}.zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@keyframes antZoomIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomOut{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}@keyframes antZoomBigIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomBigOut{0%{transform:scale(1)}to{transform:scale(.8);opacity:0}}@keyframes antZoomUpIn{0%{transform:scale(.8);transform-origin:50% 0%;opacity:0}to{transform:scale(1);transform-origin:50% 0%}}@keyframes antZoomUpOut{0%{transform:scale(1);transform-origin:50% 0%}to{transform:scale(.8);transform-origin:50% 0%;opacity:0}}@keyframes antZoomLeftIn{0%{transform:scale(.8);transform-origin:0% 50%;opacity:0}to{transform:scale(1);transform-origin:0% 50%}}@keyframes antZoomLeftOut{0%{transform:scale(1);transform-origin:0% 50%}to{transform:scale(.8);transform-origin:0% 50%;opacity:0}}@keyframes antZoomRightIn{0%{transform:scale(.8);transform-origin:100% 50%;opacity:0}to{transform:scale(1);transform-origin:100% 50%}}@keyframes antZoomRightOut{0%{transform:scale(1);transform-origin:100% 50%}to{transform:scale(.8);transform-origin:100% 50%;opacity:0}}@keyframes antZoomDownIn{0%{transform:scale(.8);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes antZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(.8);transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse-legacy-active{transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden;transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/affix/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-affix{position:fixed;z-index:10}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/alert/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-alert{box-sizing:border-box;margin:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:flex;align-items:center;padding:8px 15px;word-wrap:break-word;border-radius:2px}.ant-alert-content{flex:1;min-width:0}.ant-alert-icon{margin-right:8px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#162312;border:1px solid #274916}.ant-alert-success .ant-alert-icon{color:#49aa19}.ant-alert-info{background-color:#111b26;border:1px solid #153450}.ant-alert-info .ant-alert-icon{color:#177ddc}.ant-alert-warning{background-color:#2b2111;border:1px solid #594214}.ant-alert-warning .ant-alert-icon{color:#d89614}.ant-alert-error{background-color:#2a1215;border:1px solid #58181c}.ant-alert-error .ant-alert-icon{color:#a61d24}.ant-alert-error .ant-alert-description>pre{margin:0;padding:0}.ant-alert-action{margin-left:8px}.ant-alert-close-icon{margin-left:8px;padding:0;overflow:hidden;font-size:12px;line-height:12px;background-color:transparent;border:none;outline:none;cursor:pointer}.ant-alert-close-icon .anticon-close{color:#ffffff73;transition:color .3s}.ant-alert-close-icon .anticon-close:hover{color:#ffffffbf}.ant-alert-close-text{color:#ffffff73;transition:color .3s}.ant-alert-close-text:hover{color:#ffffffbf}.ant-alert-with-description{align-items:flex-start;padding:15px 15px 15px 24px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{margin-right:15px;font-size:24px}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:#ffffffd9;font-size:16px}.ant-alert-message{color:#ffffffd9}.ant-alert-with-description .ant-alert-description{display:block}.ant-alert.ant-alert-motion-leave{overflow:hidden;opacity:1;transition:max-height .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),padding-top .3s cubic-bezier(.78,.14,.15,.86),padding-bottom .3s cubic-bezier(.78,.14,.15,.86),margin-bottom .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert.ant-alert-motion-leave-active{max-height:0;margin-bottom:0!important;padding-top:0;padding-bottom:0;opacity:0}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}.ant-alert.ant-alert-rtl{direction:rtl}.ant-alert-rtl .ant-alert-icon{margin-right:auto;margin-left:8px}.ant-alert-rtl .ant-alert-action,.ant-alert-rtl .ant-alert-close-icon{margin-right:8px;margin-left:auto}.ant-alert-rtl.ant-alert-with-description{padding-right:24px;padding-left:15px}.ant-alert-rtl.ant-alert-with-description .ant-alert-icon{margin-right:auto;margin-left:15px}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/anchor/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-anchor{box-sizing:border-box;margin:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;padding:0 0 0 2px}.ant-anchor-wrapper{margin-left:-4px;padding-left:4px;overflow:auto;background-color:transparent}.ant-anchor-ink{position:absolute;top:0;left:0;height:100%}.ant-anchor-ink:before{position:relative;display:block;width:2px;height:100%;margin:0 auto;background-color:#303030;content:" "}.ant-anchor-ink-ball{position:absolute;left:50%;display:none;width:8px;height:8px;background-color:#141414;border:2px solid #177ddc;border-radius:8px;transform:translate(-50%);transition:top .3s ease-in-out}.ant-anchor-ink-ball.visible{display:inline-block}.ant-anchor-fixed .ant-anchor-ink .ant-anchor-ink-ball{display:none}.ant-anchor-link{padding:7px 0 7px 16px;line-height:1.143}.ant-anchor-link-title{position:relative;display:block;margin-bottom:6px;overflow:hidden;color:#ffffffd9;white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-anchor-link-title:only-child{margin-bottom:0}.ant-anchor-link-active>.ant-anchor-link-title{color:#177ddc}.ant-anchor-link .ant-anchor-link{padding-top:5px;padding-bottom:5px}.ant-anchor-rtl{direction:rtl}.ant-anchor-rtl.ant-anchor-wrapper{margin-right:-4px;margin-left:0;padding-right:4px;padding-left:0}.ant-anchor-rtl .ant-anchor-ink{right:0;left:auto}.ant-anchor-rtl .ant-anchor-ink-ball{right:50%;left:0;transform:translate(50%)}.ant-anchor-rtl .ant-anchor-link{padding:7px 16px 7px 0}/*!******************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/auto-complete/style/index.less ***! + \\******************************************************************************************************************************************************************************************************************************************************************/.ant-select-auto-complete{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-select-auto-complete .ant-select-clear{right:13px}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/select/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-select-single .ant-select-selector{display:flex}.ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;top:0;right:11px;bottom:0;left:11px}.ant-select-single .ant-select-selector .ant-select-selection-search-input{width:100%}.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:30px;transition:all .3s}@supports (-moz-appearance: meterbar){.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:30px}}.ant-select-single .ant-select-selector .ant-select-selection-item{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-single .ant-select-selector .ant-select-selection-placeholder{transition:none;pointer-events:none}.ant-select-single .ant-select-selector:after,.ant-select-single .ant-select-selector .ant-select-selection-item:after,.ant-select-single .ant-select-selector .ant-select-selection-placeholder:after{display:inline-block;width:0;visibility:hidden;content:" "}.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:25px}.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:18px}.ant-select-single.ant-select-open .ant-select-selection-item{color:#ffffff4d}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{width:100%;height:32px;padding:0 11px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{height:30px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector:after{line-height:30px}.ant-select-single.ant-select-customize-input .ant-select-selector:after{display:none}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;right:0;left:0;padding:0 11px}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder:after{display:none}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{height:40px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector:after,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder{line-height:38px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:38px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{height:24px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector:after,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder{line-height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search{right:7px;left:7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{padding:0 7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:28px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:21px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{padding:0 11px}.ant-select-selection-overflow{position:relative;display:flex;flex:auto;flex-wrap:wrap;max-width:100%}.ant-select-selection-overflow-item{flex:none;align-self:center;max-width:100%}.ant-select-multiple .ant-select-selector{display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px}.ant-select-show-search.ant-select-multiple .ant-select-selector{cursor:text}.ant-select-disabled.ant-select-multiple .ant-select-selector{background:#141414;cursor:not-allowed}.ant-select-multiple .ant-select-selector:after{display:inline-block;width:0;margin:2px 0;line-height:24px;content:" "}.ant-select-multiple.ant-select-show-arrow .ant-select-selector,.ant-select-multiple.ant-select-allow-clear .ant-select-selector{padding-right:24px}.ant-select-multiple .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:24px;margin-top:2px;margin-bottom:2px;line-height:22px;background:rgba(255,255,255,.08);border:1px solid #303030;border-radius:2px;cursor:default;transition:font-size .3s,line-height .3s,height .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-margin-end:4px;margin-inline-end:4px;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:4px;padding-inline-end:4px}.ant-select-disabled.ant-select-multiple .ant-select-selection-item{color:#595959;border-color:#1f1f1f;cursor:not-allowed}.ant-select-multiple .ant-select-selection-item-content{display:inline-block;margin-right:4px;overflow:hidden;white-space:pre;text-overflow:ellipsis}.ant-select-multiple .ant-select-selection-item-remove{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;color:#ffffff73;font-weight:700;font-size:10px;line-height:inherit;cursor:pointer}.ant-select-multiple .ant-select-selection-item-remove>*{line-height:1}.ant-select-multiple .ant-select-selection-item-remove svg{display:inline-block}.ant-select-multiple .ant-select-selection-item-remove:before{display:none}.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon{display:block}.ant-select-multiple .ant-select-selection-item-remove>.anticon{vertical-align:-.2em}.ant-select-multiple .ant-select-selection-item-remove:hover{color:#ffffffbf}.ant-select-multiple .ant-select-selection-overflow-item+.ant-select-selection-overflow-item .ant-select-selection-search{-webkit-margin-start:0;margin-inline-start:0}.ant-select-multiple .ant-select-selection-search{position:relative;max-width:100%;-webkit-margin-start:7px;margin-inline-start:7px}.ant-select-multiple .ant-select-selection-search-input,.ant-select-multiple .ant-select-selection-search-mirror{height:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:24px;transition:all .3s}.ant-select-multiple .ant-select-selection-search-input{width:100%;min-width:4.1px}.ant-select-multiple .ant-select-selection-search-mirror{position:absolute;top:0;left:0;z-index:999;white-space:pre;visibility:hidden}.ant-select-multiple .ant-select-selection-placeholder{position:absolute;top:50%;right:11px;left:11px;transform:translateY(-50%);transition:all .3s}.ant-select-multiple.ant-select-lg .ant-select-selector:after{line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{height:32px;line-height:30px}.ant-select-multiple.ant-select-lg .ant-select-selection-search{height:32px;line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror{height:32px;line-height:30px}.ant-select-multiple.ant-select-sm .ant-select-selector:after{line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-item{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{height:16px;line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{left:7px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{-webkit-margin-start:3px;margin-inline-start:3px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{height:32px;line-height:32px}.ant-select-disabled .ant-select-selection-item-remove{display:none}.ant-select{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;cursor:pointer}.ant-select:not(.ant-select-customize-input) .ant-select-selector{position:relative;background-color:transparent;border:1px solid #434343;border-radius:2px;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:pointer}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector{cursor:text}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:auto}.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{color:#ffffff4d;background:rgba(255,255,255,.08);cursor:not-allowed}.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{background:#141414}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:not-allowed}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{margin:0;padding:0;background:transparent;border:none;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button{display:none;-webkit-appearance:none}.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:#165996;border-right-width:1px!important}.ant-select-selection-item{flex:1;overflow:hidden;font-weight:400;white-space:nowrap;text-overflow:ellipsis}@media all and (-ms-high-contrast: none){.ant-select-selection-item *::-ms-backdrop,.ant-select-selection-item{flex:auto}}.ant-select-selection-placeholder{flex:1;overflow:hidden;color:#ffffff4d;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}@media all and (-ms-high-contrast: none){.ant-select-selection-placeholder *::-ms-backdrop,.ant-select-selection-placeholder{flex:auto}}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;line-height:0;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;right:11px;width:12px;height:12px;margin-top:-6px;color:#ffffff4d;font-size:12px;line-height:1;text-align:center;pointer-events:none}.ant-select-arrow>*{line-height:1}.ant-select-arrow svg{display:inline-block}.ant-select-arrow:before{display:none}.ant-select-arrow .ant-select-arrow-icon{display:block}.ant-select-arrow .anticon{vertical-align:top;transition:transform .3s}.ant-select-arrow .anticon>svg{vertical-align:top}.ant-select-arrow .anticon:not(.ant-select-suffix){pointer-events:auto}.ant-select-disabled .ant-select-arrow{cursor:not-allowed}.ant-select-clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:#ffffff4d;font-size:12px;font-style:normal;line-height:1;text-align:center;text-transform:none;background:#141414;cursor:pointer;opacity:0;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-clear:before{display:block}.ant-select-clear:hover{color:#ffffff73}.ant-select:hover .ant-select-clear{opacity:1}.ant-select-dropdown{margin:0;color:#ffffffd9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;padding:4px 0;overflow:hidden;font-size:14px;font-variant:initial;background-color:#1f1f1f;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpIn}.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownIn}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpOut}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-empty{color:#ffffff4d}.ant-select-item-empty{position:relative;display:block;min-height:32px;padding:5px 12px;color:#ffffffd9;font-weight:400;font-size:14px;line-height:22px;color:#ffffff4d}.ant-select-item{position:relative;display:block;min-height:32px;padding:5px 12px;color:#ffffffd9;font-weight:400;font-size:14px;line-height:22px;cursor:pointer;transition:background .3s ease}.ant-select-item-group{color:#ffffff73;font-size:12px;cursor:default}.ant-select-item-option{display:flex}.ant-select-item-option-content{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-item-option-state{flex:none}.ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:#ffffff14}.ant-select-item-option-selected:not(.ant-select-item-option-disabled){color:#ffffffd9;font-weight:600;background-color:#111b26}.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state{color:#177ddc}.ant-select-item-option-disabled{color:#ffffff4d;cursor:not-allowed}.ant-select-item-option-disabled.ant-select-item-option-selected{background-color:#141414}.ant-select-item-option-grouped{padding-left:24px}.ant-select-lg{font-size:16px}.ant-select-borderless .ant-select-selector{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important}.ant-select-rtl{direction:rtl}.ant-select-rtl .ant-select-arrow,.ant-select-rtl .ant-select-clear{right:initial;left:11px}.ant-select-dropdown-rtl{direction:rtl}.ant-select-dropdown-rtl .ant-select-item-option-grouped{padding-right:24px;padding-left:12px}.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector,.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector{padding-right:4px;padding-left:24px}.ant-select-rtl.ant-select-multiple .ant-select-selection-item{text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content{margin-right:0;margin-left:4px;text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror{right:0;left:auto}.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder{right:11px;left:auto}.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{right:7px}.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder{right:0;left:9px;text-align:right}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:11px;left:25px}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:18px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:6px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:21px}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/empty/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-empty{margin:0 8px;font-size:14px;line-height:1.5715;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image img{height:100%}.ant-empty-image svg{height:100%;margin:auto}.ant-empty-footer{margin-top:16px}.ant-empty-normal{margin:32px 0;color:#ffffff4d}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0;color:#ffffff4d}.ant-empty-small .ant-empty-image{height:35px}.ant-empty-img-default-ellipse{fill:#fff;fill-opacity:.08}.ant-empty-img-default-path-1{fill:#262626}.ant-empty-img-default-path-2{fill:url(#linearGradient-1)}.ant-empty-img-default-path-3{fill:#595959}.ant-empty-img-default-path-4{fill:#434343}.ant-empty-img-default-path-5{fill:#595959}.ant-empty-img-default-g{fill:#434343}.ant-empty-img-simple-ellipse{fill:#fff;fill-opacity:.08}.ant-empty-img-simple-g{stroke:#434343}.ant-empty-img-simple-path{fill:#262626;stroke:#434343}.ant-empty-rtl{direction:rtl}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/avatar/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-avatar{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:rgba(255,255,255,.3);width:32px;height:32px;line-height:32px;border-radius:50%}.ant-avatar-image{background:transparent}.ant-avatar .ant-image-img{display:block}.ant-avatar-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar.ant-avatar-icon{font-size:18px}.ant-avatar.ant-avatar-icon>.anticon{margin:0}.ant-avatar-lg{width:40px;height:40px;line-height:40px;border-radius:50%}.ant-avatar-lg-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-lg.ant-avatar-icon{font-size:24px}.ant-avatar-lg.ant-avatar-icon>.anticon{margin:0}.ant-avatar-sm{width:24px;height:24px;line-height:24px;border-radius:50%}.ant-avatar-sm-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-sm.ant-avatar-icon{font-size:14px}.ant-avatar-sm.ant-avatar-icon>.anticon{margin:0}.ant-avatar-square{border-radius:2px}.ant-avatar>img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.ant-avatar-group{display:inline-flex}.ant-avatar-group .ant-avatar{border:1px solid #fff}.ant-avatar-group .ant-avatar:not(:first-child){margin-left:-8px}.ant-avatar-group-popover .ant-avatar+.ant-avatar{margin-left:3px}.ant-avatar-group-rtl .ant-avatar:not(:first-child){margin-right:-8px;margin-left:0}.ant-avatar-group-popover.ant-popover-rtl .ant-avatar+.ant-avatar{margin-right:3px;margin-left:0}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/back-top/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-back-top{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;right:100px;bottom:50px;z-index:10;width:40px;height:40px;cursor:pointer}.ant-back-top:empty{display:none}.ant-back-top-rtl{right:auto;left:100px;direction:rtl}.ant-back-top-content{width:40px;height:40px;overflow:hidden;color:#fff;text-align:center;background-color:#ffffff73;border-radius:20px;transition:all .3s}.ant-back-top-content:hover{background-color:#ffffffd9;transition:all .3s}.ant-back-top-icon{font-size:24px;line-height:40px}@media screen and (max-width: 768px){.ant-back-top{right:60px}}@media screen and (max-width: 480px){.ant-back-top{right:20px}}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/badge/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-badge{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;line-height:1}.ant-badge-count{z-index:auto;min-width:20px;height:20px;padding:0 6px;color:#fff;font-weight:400;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#a61d24;border-radius:10px;box-shadow:0 0 0 1px #141414}.ant-badge-count a,.ant-badge-count a:hover{color:#fff}.ant-badge-count-sm{min-width:14px;height:14px;padding:0;font-size:12px;line-height:14px;border-radius:7px}.ant-badge-multiple-words{padding:0 8px}.ant-badge-dot{z-index:auto;width:6px;min-width:6px;height:6px;background:#a61d24;border-radius:100%;box-shadow:0 0 0 1px #141414}.ant-badge-dot.ant-scroll-number{transition:background 1.5s}.ant-badge-count,.ant-badge-dot,.ant-badge .ant-scroll-number-custom-component{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0%}.ant-badge-count.anticon-spin,.ant-badge-dot.anticon-spin,.ant-badge .ant-scroll-number-custom-component.anticon-spin{animation:antBadgeLoadingCircle 1s infinite linear}.ant-badge-status{line-height:inherit;vertical-align:baseline}.ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%}.ant-badge-status-success{background-color:#49aa19}.ant-badge-status-processing{position:relative;background-color:#177ddc}.ant-badge-status-processing:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #177ddc;border-radius:50%;animation:antStatusProcessing 1.2s infinite ease-in-out;content:""}.ant-badge-status-default{background-color:#d9d9d9}.ant-badge-status-error{background-color:#a61d24}.ant-badge-status-warning{background-color:#d89614}.ant-badge-status-pink,.ant-badge-status-magenta{background:#cb2b83}.ant-badge-status-red{background:#d32029}.ant-badge-status-volcano{background:#d84a1b}.ant-badge-status-orange{background:#d87a16}.ant-badge-status-yellow{background:#d8bd14}.ant-badge-status-gold{background:#d89614}.ant-badge-status-cyan{background:#13a8a8}.ant-badge-status-lime{background:#8bbb11}.ant-badge-status-green{background:#49aa19}.ant-badge-status-blue{background:#177ddc}.ant-badge-status-geekblue{background:#2b4acb}.ant-badge-status-purple{background:#642ab5}.ant-badge-status-text{margin-left:8px;color:#ffffffd9;font-size:14px}.ant-badge-zoom-appear,.ant-badge-zoom-enter{animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation-fill-mode:both}.ant-badge-zoom-leave{animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);animation-fill-mode:both}.ant-badge-not-a-wrapper .ant-badge-zoom-appear,.ant-badge-not-a-wrapper .ant-badge-zoom-enter{animation:antNoWrapperZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46)}.ant-badge-not-a-wrapper .ant-badge-zoom-leave{animation:antNoWrapperZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6)}.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle}.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,.ant-badge-not-a-wrapper .ant-badge-count{transform:none}.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,.ant-badge-not-a-wrapper .ant-scroll-number{position:relative;top:auto;display:block;transform-origin:50% 50%}@keyframes antStatusProcessing{0%{transform:scale(.8);opacity:.5}to{transform:scale(2.4);opacity:0}}.ant-scroll-number{overflow:hidden;direction:ltr}.ant-scroll-number-only{position:relative;display:inline-block;height:20px;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden}.ant-scroll-number-only>p.ant-scroll-number-only-unit{height:20px;margin:0;-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden}.ant-scroll-number-symbol{vertical-align:top}@keyframes antZoomBadgeIn{0%{transform:scale(0) translate(50%,-50%);opacity:0}to{transform:scale(1) translate(50%,-50%)}}@keyframes antZoomBadgeOut{0%{transform:scale(1) translate(50%,-50%)}to{transform:scale(0) translate(50%,-50%);opacity:0}}@keyframes antNoWrapperZoomBadgeIn{0%{transform:scale(0);opacity:0}to{transform:scale(1)}}@keyframes antNoWrapperZoomBadgeOut{0%{transform:scale(1)}to{transform:scale(0);opacity:0}}@keyframes antBadgeLoadingCircle{0%{transform-origin:50%}to{transform:translate(50%,-50%) rotate(360deg);transform-origin:50%}}.ant-ribbon-wrapper{position:relative}.ant-ribbon{box-sizing:border-box;margin:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:8px;height:22px;padding:0 8px;color:#fff;line-height:22px;white-space:nowrap;background-color:#177ddc;border-radius:2px}.ant-ribbon-text{color:#fff}.ant-ribbon-corner{position:absolute;top:100%;width:8px;height:8px;color:currentcolor;border:4px solid;transform:scaleY(.75);transform-origin:top}.ant-ribbon-corner:after{position:absolute;top:-4px;left:-4px;width:inherit;height:inherit;color:#00000040;border:inherit;content:""}.ant-ribbon-color-pink,.ant-ribbon-color-magenta{color:#cb2b83;background:#cb2b83}.ant-ribbon-color-red{color:#d32029;background:#d32029}.ant-ribbon-color-volcano{color:#d84a1b;background:#d84a1b}.ant-ribbon-color-orange{color:#d87a16;background:#d87a16}.ant-ribbon-color-yellow{color:#d8bd14;background:#d8bd14}.ant-ribbon-color-gold{color:#d89614;background:#d89614}.ant-ribbon-color-cyan{color:#13a8a8;background:#13a8a8}.ant-ribbon-color-lime{color:#8bbb11;background:#8bbb11}.ant-ribbon-color-green{color:#49aa19;background:#49aa19}.ant-ribbon-color-blue{color:#177ddc;background:#177ddc}.ant-ribbon-color-geekblue{color:#2b4acb;background:#2b4acb}.ant-ribbon-color-purple{color:#642ab5;background:#642ab5}.ant-ribbon.ant-ribbon-placement-end{right:-8px;border-bottom-right-radius:0}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner{right:0;border-color:currentcolor transparent transparent currentcolor}.ant-ribbon.ant-ribbon-placement-start{left:-8px;border-bottom-left-radius:0}.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner{left:0;border-color:currentcolor currentcolor transparent transparent}.ant-badge-rtl{direction:rtl}.ant-badge-rtl .ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-count,.ant-badge-rtl .ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-dot,.ant-badge-rtl .ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component{right:auto;left:0;direction:ltr;transform:translate(-50%,-50%);transform-origin:0% 0%}.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component{right:auto;left:0;transform:translate(-50%,-50%);transform-origin:0% 0%}.ant-badge-rtl .ant-badge-status-text{margin-right:8px;margin-left:0}.ant-ribbon-rtl{direction:rtl}.ant-ribbon-rtl.ant-ribbon-placement-end{right:unset;left:-8px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner{right:unset;left:0;border-color:currentcolor currentcolor transparent transparent}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner:after{border-color:currentcolor currentcolor transparent transparent}.ant-ribbon-rtl.ant-ribbon-placement-start{right:-8px;left:unset;border-bottom-right-radius:0;border-bottom-left-radius:2px}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner{right:0;left:unset;border-color:currentcolor transparent transparent currentcolor}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner:after{border-color:currentcolor transparent transparent currentcolor}/*!***************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/breadcrumb/style/index.less ***! + \\***************************************************************************************************************************************************************************************************************************************************************/.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#ffffff73;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#ffffff73;transition:color .3s}.ant-breadcrumb a:hover{color:#165996}.ant-breadcrumb>span:last-child{color:#ffffffd9}.ant-breadcrumb>span:last-child a{color:#ffffffd9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#ffffff73}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/menu/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-menu-item-danger.ant-menu-item,.ant-menu-item-danger.ant-menu-item:hover,.ant-menu-item-danger.ant-menu-item-active{color:#a61d24}.ant-menu-item-danger.ant-menu-item:active{background:#2a1215}.ant-menu-item-danger.ant-menu-item-selected{color:#a61d24}.ant-menu-item-danger.ant-menu-item-selected>a,.ant-menu-item-danger.ant-menu-item-selected>a:hover{color:#a61d24}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{background-color:#2a1215}.ant-menu-inline .ant-menu-item-danger.ant-menu-item:after{border-right-color:#a61d24}.ant-menu-dark .ant-menu-item-danger.ant-menu-item,.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,.ant-menu-dark .ant-menu-item-danger.ant-menu-item>a{color:#a61d24}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{color:#fff;background-color:#a61d24}.ant-menu{box-sizing:border-box;margin:0;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";padding:0;color:#ffffffd9;font-size:14px;line-height:0;text-align:left;list-style:none;background:#141414;outline:none;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003;transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s}.ant-menu:before{display:table;content:""}.ant-menu:after{display:table;clear:both;content:""}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px #11263c}.ant-menu ul,.ant-menu ol{margin:0;padding:0;list-style:none}.ant-menu-overflow{display:flex}.ant-menu-overflow-item{flex:none}.ant-menu-hidden,.ant-menu-submenu-hidden{display:none}.ant-menu-item-group-title{height:1.5715;padding:8px 16px;color:#ffffff73;font-size:14px;line-height:1.5715;transition:all .3s}.ant-menu-horizontal .ant-menu-submenu{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu,.ant-menu-submenu-inline{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-selected{color:#177ddc}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#111b26}.ant-menu-submenu .ant-menu-sub{cursor:initial;transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-title-content{transition:color .3s}.ant-menu-item a{color:#ffffffd9}.ant-menu-item a:hover{color:#177ddc}.ant-menu-item a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:""}.ant-menu-item>.ant-badge a{color:#ffffffd9}.ant-menu-item>.ant-badge a:hover{color:#177ddc}.ant-menu-item-divider{overflow:hidden;line-height:0;border-color:#303030;border-style:solid;border-width:1px 0 0}.ant-menu-item-divider-dashed{border-style:dashed}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected a,.ant-menu-item-selected a:hover{color:#177ddc}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#111b26}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #303030}.ant-menu-vertical-right{border-left:1px solid #303030}.ant-menu-vertical.ant-menu-sub,.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub{min-width:160px;max-height:calc(100vh - 100px);padding:0;overflow:hidden;border-right:0}.ant-menu-vertical.ant-menu-sub:not([class*="-active"]),.ant-menu-vertical-left.ant-menu-sub:not([class*="-active"]),.ant-menu-vertical-right.ant-menu-sub:not([class*="-active"]){overflow-x:hidden;overflow-y:auto}.ant-menu-vertical.ant-menu-sub .ant-menu-item,.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu{transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu-title{transition:border-color .3s,background .3s}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;transition:border-color .3s,background .3s,padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .ant-menu-item-icon,.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;font-size:14px;transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1),color .3s}.ant-menu-item .ant-menu-item-icon+span,.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{margin-left:10px;opacity:1;transition:opacity .3s cubic-bezier(.645,.045,.355,1),margin .3s,color .3s}.ant-menu-item .ant-menu-item-icon.svg,.ant-menu-submenu-title .ant-menu-item-icon.svg{vertical-align:-.125em}.ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-submenu-title.ant-menu-item-only-child>.anticon,.ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon{margin-right:0}.ant-menu-item:focus-visible,.ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px #11263c}.ant-menu>.ant-menu-item-divider{margin:1px 0;padding:0}.ant-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;border-radius:2px;box-shadow:none;transform-origin:0 0}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;z-index:-1;width:100%;height:100%;opacity:.0001;content:" "}.ant-menu-submenu-placement-rightTop:before{top:0;left:-7px}.ant-menu-submenu>.ant-menu{background-color:#141414;border-radius:2px}.ant-menu-submenu>.ant-menu-submenu-title:after{transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-popup>.ant-menu{background-color:#1f1f1f}.ant-menu-submenu-expand-icon,.ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;color:#ffffffd9;transform:translateY(-50%);transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-arrow:before,.ant-menu-submenu-arrow:after{position:absolute;width:6px;height:1.5px;background-color:currentcolor;border-radius:2px;transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-arrow:before{transform:rotate(45deg) translateY(-2.5px)}.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translateY(2.5px)}.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-expand-icon,.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{color:#177ddc}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:before,.ant-menu-submenu-inline .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translate(2.5px)}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline .ant-menu-submenu-arrow:after{transform:rotate(45deg) translate(-2.5px)}.ant-menu-submenu-horizontal .ant-menu-submenu-arrow{display:none}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow{transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translate(-2.5px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{transform:rotate(45deg) translate(2.5px)}.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected{color:#177ddc}.ant-menu-horizontal{line-height:46px;border:0;border-bottom:1px solid #303030;box-shadow:none}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu{margin-top:-1px;margin-bottom:0;padding:0 20px}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected{color:#177ddc}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected:after{border-bottom:2px solid #177ddc}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom}.ant-menu-horizontal>.ant-menu-item:after,.ant-menu-horizontal>.ant-menu-submenu:after{position:absolute;right:20px;bottom:0;left:20px;border-bottom:2px solid transparent;transition:border-color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-horizontal>.ant-menu-submenu>.ant-menu-submenu-title{padding:0}.ant-menu-horizontal>.ant-menu-item a{color:#ffffffd9}.ant-menu-horizontal>.ant-menu-item a:hover{color:#177ddc}.ant-menu-horizontal>.ant-menu-item a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected a{color:#177ddc}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:" "}.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-inline .ant-menu-item{position:relative}.ant-menu-vertical .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-inline .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #177ddc;transform:scaleY(.0001);opacity:0;transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-inline .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;line-height:40px;text-overflow:ellipsis}.ant-menu-vertical .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-inline .ant-menu-submenu{padding-bottom:.02px}.ant-menu-vertical .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-inline .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-inline>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-selected:after,.ant-menu-inline .ant-menu-item-selected:after{transform:scaleY(1);opacity:1;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline.ant-menu-root .ant-menu-item,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title{display:flex;align-items:center;transition:border-color .3s,background .3s,padding .1s cubic-bezier(.215,.61,.355,1)}.ant-menu-inline.ant-menu-root .ant-menu-item>.ant-menu-title-content,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>.ant-menu-title-content{flex:auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.ant-menu-inline.ant-menu-root .ant-menu-item>*,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>*{flex:none}.ant-menu.ant-menu-inline-collapsed{width:80px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 calc(50% - 8px);text-overflow:clip}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:0}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;opacity:0}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed .anticon{display:inline-block}.ant-menu.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu.ant-menu-inline-collapsed-tooltip a{color:#ffffffd9}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right,.ant-menu-root.ant-menu-inline{box-shadow:none}.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item>.ant-menu-inline-collapsed-noicon,.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title>.ant-menu-inline-collapsed-noicon{font-size:16px;text-align:center}.ant-menu-sub.ant-menu-inline{padding:0;background:rgba(255,255,255,.04);border:0;border-radius:0;box-shadow:none}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:#ffffff4d!important;background:none;cursor:not-allowed}.ant-menu-item-disabled:after,.ant-menu-submenu-disabled:after{border-color:transparent!important}.ant-menu-item-disabled a,.ant-menu-submenu-disabled a{color:#ffffff4d!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:#ffffff4d!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{background:rgba(255,255,255,.3)!important}.ant-layout-header .ant-menu{line-height:inherit}.ant-menu-inline-collapsed-tooltip a,.ant-menu-inline-collapsed-tooltip a:hover{color:#fff}.ant-menu-light .ant-menu-item:hover,.ant-menu-light .ant-menu-item-active,.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,.ant-menu-light .ant-menu-submenu-active,.ant-menu-light .ant-menu-submenu-title:hover{color:#177ddc}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px #388ed3}.ant-menu-dark .ant-menu-item:focus-visible,.ant-menu-dark .ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px #388ed3}.ant-menu.ant-menu-dark,.ant-menu-dark .ant-menu-sub,.ant-menu.ant-menu-dark .ant-menu-sub{color:#ffffffa6;background:#1f1f1f}.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;transition:all .3s}.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#141414}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;padding:0 20px;border-color:#1f1f1f;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item:hover{background-color:#177ddc}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a,.ant-menu-dark .ant-menu-item>span>a{color:#ffffffa6}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-title:hover>a,.ant-menu-dark .ant-menu-item:hover>span>a,.ant-menu-dark .ant-menu-item-active>span>a,.ant-menu-dark .ant-menu-submenu-active>span>a,.ant-menu-dark .ant-menu-submenu-open>span>a,.ant-menu-dark .ant-menu-submenu-selected>span>a,.ant-menu-dark .ant-menu-submenu-title:hover>span>a{color:#fff}.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item:hover{background-color:transparent}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#177ddc}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>span>a,.ant-menu-dark .ant-menu-item-selected>a:hover,.ant-menu-dark .ant-menu-item-selected>span>a:hover{color:#fff}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,.ant-menu-dark .ant-menu-item-selected .anticon{color:#fff}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon+span,.ant-menu-dark .ant-menu-item-selected .anticon+span{color:#fff}.ant-menu.ant-menu-dark .ant-menu-item-selected,.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected{background-color:#177ddc}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled>a,.ant-menu-dark .ant-menu-item-disabled>span>a,.ant-menu-dark .ant-menu-submenu-disabled>span>a{color:#ffffff4d!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:#ffffff4d!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{background:rgba(255,255,255,.3)!important}.ant-menu.ant-menu-rtl{direction:rtl;text-align:right}.ant-menu-rtl .ant-menu-item-group-title{text-align:right}.ant-menu-rtl.ant-menu-inline,.ant-menu-rtl.ant-menu-vertical{border-right:none;border-left:1px solid #303030}.ant-menu-rtl.ant-menu-dark.ant-menu-inline,.ant-menu-rtl.ant-menu-dark.ant-menu-vertical{border-left:none}.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu{transform-origin:top right}.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-rtl .ant-menu-item .anticon,.ant-menu-rtl .ant-menu-submenu-title .anticon{margin-right:auto;margin-left:10px}.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.anticon{margin-left:0}.ant-menu-submenu-rtl.ant-menu-submenu-popup{transform-origin:100% 0}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{right:auto;left:16px}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translateY(-2px)}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{transform:rotate(45deg) translateY(2px)}.ant-menu-rtl.ant-menu-vertical .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-rtl.ant-menu-inline .ant-menu-item:after{right:auto;left:0}.ant-menu-rtl.ant-menu-vertical .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,.ant-menu-rtl.ant-menu-inline .ant-menu-item,.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{text-align:right}.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{padding-right:0;padding-left:34px}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title{padding-right:16px;padding-left:34px}.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title{padding:0 calc(50% - 8px)}.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title{padding:0 28px 0 16px}.ant-menu-sub.ant-menu-inline{border:0}.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-right:32px;padding-left:0}/*!************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tooltip/style/index.less ***! + \\************************************************************************************************************************************************************************************************************************************************************/.ant-tooltip{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;z-index:1070;display:block;width:-moz-max-content;width:max-content;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightTop,.ant-tooltip-placement-rightBottom{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftTop,.ant-tooltip-placement-leftBottom{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:#434343;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-tooltip-arrow{position:absolute;display:block;width:13.07106781px;height:13.07106781px;overflow:hidden;background:transparent;pointer-events:none}.ant-tooltip-arrow-content{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:5px;height:5px;margin:auto;background-color:#434343;content:"";pointer-events:auto}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:-5.07106781px}.ant-tooltip-placement-top .ant-tooltip-arrow-content,.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-topRight .ant-tooltip-arrow-content{box-shadow:3px 3px 7px #00000012;transform:translateY(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;transform:translate(-50%)}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:13px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{left:-5.07106781px}.ant-tooltip-placement-right .ant-tooltip-arrow-content,.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content{box-shadow:-3px 3px 7px #00000012;transform:translate(6.53553391px) rotate(45deg)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{right:-5.07106781px}.ant-tooltip-placement-left .ant-tooltip-arrow-content,.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content{box-shadow:3px -3px 7px #00000012;transform:translate(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:-5.07106781px}.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content{box-shadow:-3px -3px 7px #00000012;transform:translateY(6.53553391px) rotate(45deg)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;transform:translate(-50%)}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:13px}.ant-tooltip-pink .ant-tooltip-inner,.ant-tooltip-pink .ant-tooltip-arrow-content,.ant-tooltip-magenta .ant-tooltip-inner,.ant-tooltip-magenta .ant-tooltip-arrow-content{background-color:#cb2b83}.ant-tooltip-red .ant-tooltip-inner,.ant-tooltip-red .ant-tooltip-arrow-content{background-color:#d32029}.ant-tooltip-volcano .ant-tooltip-inner,.ant-tooltip-volcano .ant-tooltip-arrow-content{background-color:#d84a1b}.ant-tooltip-orange .ant-tooltip-inner,.ant-tooltip-orange .ant-tooltip-arrow-content{background-color:#d87a16}.ant-tooltip-yellow .ant-tooltip-inner,.ant-tooltip-yellow .ant-tooltip-arrow-content{background-color:#d8bd14}.ant-tooltip-gold .ant-tooltip-inner,.ant-tooltip-gold .ant-tooltip-arrow-content{background-color:#d89614}.ant-tooltip-cyan .ant-tooltip-inner,.ant-tooltip-cyan .ant-tooltip-arrow-content{background-color:#13a8a8}.ant-tooltip-lime .ant-tooltip-inner,.ant-tooltip-lime .ant-tooltip-arrow-content{background-color:#8bbb11}.ant-tooltip-green .ant-tooltip-inner,.ant-tooltip-green .ant-tooltip-arrow-content{background-color:#49aa19}.ant-tooltip-blue .ant-tooltip-inner,.ant-tooltip-blue .ant-tooltip-arrow-content{background-color:#177ddc}.ant-tooltip-geekblue .ant-tooltip-inner,.ant-tooltip-geekblue .ant-tooltip-arrow-content{background-color:#2b4acb}.ant-tooltip-purple .ant-tooltip-inner,.ant-tooltip-purple .ant-tooltip-arrow-content{background-color:#642ab5}.ant-tooltip-rtl{direction:rtl}.ant-tooltip-rtl .ant-tooltip-inner{text-align:right}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/dropdown/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-dropdown-menu-item.ant-dropdown-menu-item-danger{color:#a61d24}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover{color:#fff;background-color:#a61d24}.ant-dropdown{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-4px;right:0;bottom:-4px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{font-size:10px}.ant-dropdown-wrap .anticon-down:before{transition:transform .2s}.ant-dropdown-wrap-open .anticon-down:before{transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden,.ant-dropdown-menu-submenu-hidden{display:none}.ant-dropdown-show-arrow.ant-dropdown-placement-topCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-topRight{padding-bottom:10px}.ant-dropdown-show-arrow.ant-dropdown-placement-bottomCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight{padding-top:10px}.ant-dropdown-arrow{position:absolute;z-index:1;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow,.ant-dropdown-placement-topLeft>.ant-dropdown-arrow,.ant-dropdown-placement-topRight>.ant-dropdown-arrow{bottom:6.2px;border-color:transparent #1f1f1f #1f1f1f transparent;box-shadow:3px 3px 7px #00000012}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow{left:50%;transform:translate(-50%) rotate(45deg)}.ant-dropdown-placement-topLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-topRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow,.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow,.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:6px;border-color:#1f1f1f transparent transparent #1f1f1f;box-shadow:-2px -2px 5px #0000000f}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow{left:50%;transform:translate(-50%) rotate(45deg)}.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#1f1f1f;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:#ffffff73;transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;box-shadow:none;transform-origin:0 0}.ant-dropdown-menu-submenu-popup ul,.ant-dropdown-menu-submenu-popup li{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em}.ant-dropdown-menu-item{position:relative;display:flex;align-items:center}.ant-dropdown-menu-item-icon{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-title-content{flex:auto;white-space:nowrap}.ant-dropdown-menu-title-content>a{color:inherit;transition:all .3s}.ant-dropdown-menu-title-content>a:hover{color:inherit}.ant-dropdown-menu-title-content>a:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:#ffffffd9;font-weight:400;font-size:14px;line-height:22px;cursor:pointer;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu-title-selected{color:#177ddc;background-color:#111b26}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#ffffff14}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:#ffffff4d;cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:#ffffff4d;background-color:transparent;cursor:not-allowed}.ant-dropdown-menu-item-disabled a,.ant-dropdown-menu-submenu-title-disabled a{pointer-events:none}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#303030}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-right:0!important;color:#ffffff73;font-size:10px;font-style:normal}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:24px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:#ffffff4d;background-color:transparent;cursor:not-allowed}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#177ddc}.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpIn}.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight{animation-name:antSlideDownIn}.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpOut}.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight{animation-name:antSlideDownOut}.ant-dropdown-trigger>.anticon.anticon-down,.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-button>.anticon.anticon-down{font-size:10px;vertical-align:baseline}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn-loading,.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn{cursor:default;pointer-events:none}.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn:before{display:block}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only){padding-right:8px;padding-left:8px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#1f1f1f}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a{color:#ffffffa6}.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a .ant-dropdown-menu-submenu-arrow:after{color:#ffffffa6}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#177ddc}.ant-dropdown-rtl{direction:rtl}.ant-dropdown-rtl.ant-dropdown:before{right:-7px;left:0}.ant-dropdown-menu.ant-dropdown-menu-rtl,.ant-dropdown-rtl .ant-dropdown-menu-item-group-title,.ant-dropdown-menu-submenu-rtl .ant-dropdown-menu-item-group-title{direction:rtl;text-align:right}.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl{transform-origin:100% 0}.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li,.ant-dropdown-rtl .ant-dropdown-menu-item,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{text-align:right}.ant-dropdown-rtl .ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>span>.anticon:first-child{margin-right:0;margin-left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{right:auto;left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-left:0!important;transform:scaleX(-1)}.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{padding-right:12px;padding-left:24px}.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{right:100%;left:0;margin-right:4px;margin-left:0}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/button/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-btn{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;box-shadow:0 2px #00000004;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:2px;color:#ffffffd9;border-color:#434343;background:transparent}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;box-shadow:none}.ant-btn[disabled]{cursor:not-allowed}.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:6.4px 15px;font-size:16px;border-radius:2px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:2px}.ant-btn>a:only-child{color:currentcolor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:hover,.ant-btn:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn:hover>a:only-child,.ant-btn:focus>a:only-child{color:currentcolor}.ant-btn:hover>a:only-child:after,.ant-btn:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn:active>a:only-child{color:currentcolor}.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn[disabled],.ant-btn[disabled]:hover,.ant-btn[disabled]:focus,.ant-btn[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn[disabled]>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:active>a:only-child{color:currentcolor}.ant-btn[disabled]>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:hover,.ant-btn:focus,.ant-btn:active{text-decoration:none;background:transparent}.ant-btn>span{display:inline-block}.ant-btn-primary{color:#fff;border-color:#177ddc;background:#177ddc;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:hover,.ant-btn-primary:focus{color:#fff;border-color:#095cb5;background:#095cb5}.ant-btn-primary:hover>a:only-child,.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-primary:hover>a:only-child:after,.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:active{color:#fff;border-color:#3c9be8;background:#3c9be8}.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary[disabled],.ant-btn-primary[disabled]:hover,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-primary[disabled]>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#165996;border-left-color:#165996}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#434343}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#165996}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#434343}.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group .ant-btn-primary+.ant-btn-primary{border-left-color:#165996}.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled]{border-left-color:#434343}.ant-btn-ghost{color:#ffffffd9;border-color:#434343;background:transparent}.ant-btn-ghost>a:only-child{color:currentcolor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:hover,.ant-btn-ghost:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn-ghost:hover>a:only-child,.ant-btn-ghost:focus>a:only-child{color:currentcolor}.ant-btn-ghost:hover>a:only-child:after,.ant-btn-ghost:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn-ghost:active>a:only-child{color:currentcolor}.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost[disabled],.ant-btn-ghost[disabled]:hover,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-ghost[disabled]>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child{color:currentcolor}.ant-btn-ghost[disabled]>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:#ffffffd9;border-color:#434343;background:transparent;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentcolor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:hover,.ant-btn-dashed:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn-dashed:hover>a:only-child,.ant-btn-dashed:focus>a:only-child{color:currentcolor}.ant-btn-dashed:hover>a:only-child:after,.ant-btn-dashed:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn-dashed:active>a:only-child{color:currentcolor}.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed[disabled],.ant-btn-dashed[disabled]:hover,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-dashed[disabled]>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dashed[disabled]>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#fff;border-color:#a61d24;background:#a61d24;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-danger>a:only-child{color:currentcolor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:hover,.ant-btn-danger:focus{color:#fff;border-color:#800f19;background:#800f19}.ant-btn-danger:hover>a:only-child,.ant-btn-danger:focus>a:only-child{color:currentcolor}.ant-btn-danger:hover>a:only-child:after,.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:active{color:#fff;border-color:#b33b3d;background:#b33b3d}.ant-btn-danger:active>a:only-child{color:currentcolor}.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger[disabled],.ant-btn-danger[disabled]:hover,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-danger[disabled]>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:active>a:only-child{color:currentcolor}.ant-btn-danger[disabled]>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#177ddc;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:hover,.ant-btn-link:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn-link:hover>a:only-child,.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-link:hover>a:only-child:after,.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link[disabled],.ant-btn-link[disabled]:hover,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-link:hover{background:transparent}.ant-btn-link:hover,.ant-btn-link:focus,.ant-btn-link:active{border-color:transparent}.ant-btn-link[disabled],.ant-btn-link[disabled]:hover,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:active{color:#ffffff4d;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-link[disabled]>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-link[disabled]>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text{color:#ffffffd9;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-text>a:only-child{color:currentcolor}.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:hover,.ant-btn-text:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn-text:hover>a:only-child,.ant-btn-text:focus>a:only-child{color:currentcolor}.ant-btn-text:hover>a:only-child:after,.ant-btn-text:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn-text:active>a:only-child{color:currentcolor}.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text[disabled],.ant-btn-text[disabled]:hover,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-text:hover,.ant-btn-text:focus{color:#ffffffd9;background:rgba(255,255,255,.03);border-color:transparent}.ant-btn-text:active{color:#ffffffd9;background:rgba(255,255,255,.04);border-color:transparent}.ant-btn-text[disabled],.ant-btn-text[disabled]:hover,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:active{color:#ffffff4d;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-text[disabled]>a:only-child,.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-text[disabled]:active>a:only-child{color:currentcolor}.ant-btn-text[disabled]>a:only-child:after,.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-text[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous{color:#a61d24;border-color:#a61d24;background:transparent}.ant-btn-dangerous>a:only-child{color:currentcolor}.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:hover,.ant-btn-dangerous:focus{color:#800f19;border-color:#800f19;background:transparent}.ant-btn-dangerous:hover>a:only-child,.ant-btn-dangerous:focus>a:only-child{color:currentcolor}.ant-btn-dangerous:hover>a:only-child:after,.ant-btn-dangerous:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:active{color:#b33b3d;border-color:#b33b3d;background:transparent}.ant-btn-dangerous:active>a:only-child{color:currentcolor}.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous[disabled],.ant-btn-dangerous[disabled]:hover,.ant-btn-dangerous[disabled]:focus,.ant-btn-dangerous[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-dangerous[disabled]>a:only-child,.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-dangerous[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous[disabled]>a:only-child:after,.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-dangerous[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary{color:#fff;border-color:#a61d24;background:#a61d24;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-dangerous.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:hover,.ant-btn-dangerous.ant-btn-primary:focus{color:#fff;border-color:#800f19;background:#800f19}.ant-btn-dangerous.ant-btn-primary:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:active{color:#fff;border-color:#b33b3d;background:#b33b3d}.ant-btn-dangerous.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary[disabled],.ant-btn-dangerous.ant-btn-primary[disabled]:hover,.ant-btn-dangerous.ant-btn-primary[disabled]:focus,.ant-btn-dangerous.ant-btn-primary[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link{color:#a61d24;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-dangerous.ant-btn-link:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn-dangerous.ant-btn-link:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-dangerous.ant-btn-link:focus{color:#800f19;border-color:transparent;background:transparent}.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-dangerous.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:active{color:#b33b3d;border-color:transparent;background:transparent}.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#ffffff4d;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text{color:#a61d24;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-text>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:hover,.ant-btn-dangerous.ant-btn-text:focus{color:#165996;border-color:#165996;background:transparent}.ant-btn-dangerous.ant-btn-text:active{color:#388ed3;border-color:#388ed3;background:transparent}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:hover,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text:hover,.ant-btn-dangerous.ant-btn-text:focus{color:#800f19;border-color:transparent;background:rgba(255,255,255,.03)}.ant-btn-dangerous.ant-btn-text:hover>a:only-child,.ant-btn-dangerous.ant-btn-text:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:active{color:#b33b3d;border-color:transparent;background:rgba(255,255,255,.04)}.ant-btn-dangerous.ant-btn-text:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:hover,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:active{color:#ffffff4d;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-icon-only{width:32px;height:32px;padding:2.4px 0;font-size:16px;border-radius:2px;vertical-align:-3px}.ant-btn-icon-only>*{font-size:16px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:4.9px 0;font-size:18px;border-radius:2px}.ant-btn-icon-only.ant-btn-lg>*{font-size:18px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:2px}.ant-btn-icon-only.ant-btn-sm>*{font-size:14px}.ant-btn-icon-only>.anticon{display:flex;justify-content:center}a.ant-btn-icon-only{vertical-align:-1px}a.ant-btn-icon-only>.anticon{display:inline}.ant-btn-round{height:32px;padding:4px 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:6.4px 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#141414;border-radius:inherit;opacity:.35;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-plus>svg,.ant-btn .anticon.anticon-minus>svg{shape-rendering:optimizespeed}.ant-btn.ant-btn-loading{position:relative;cursor:default}.ant-btn.ant-btn-loading:before{display:block}.ant-btn>.ant-btn-loading-icon{transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1)}.ant-btn>.ant-btn-loading-icon .anticon{padding-right:8px;animation:none}.ant-btn>.ant-btn-loading-icon .anticon svg{animation:loadingCircle 1s infinite linear}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0}.ant-btn-group{position:relative;display:inline-flex}.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn:hover,.ant-btn-group>.ant-btn:focus,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>.ant-btn:active,.ant-btn-group>span>.ant-btn:active{z-index:2}.ant-btn-group>.ant-btn[disabled],.ant-btn-group>span>.ant-btn[disabled]{z-index:0}.ant-btn-group .ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:6.4px 15px;font-size:16px;border-radius:0}.ant-btn-group-lg .ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn-group-sm .ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn-group .ant-btn+.ant-btn,.ant-btn+.ant-btn-group,.ant-btn-group span+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child{border-radius:2px}.ant-btn-group>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group-sm>.ant-btn:only-child{border-radius:2px}.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-rtl.ant-btn+.ant-btn-group,.ant-btn-rtl.ant-btn-group span+.ant-btn,.ant-btn-rtl.ant-btn-group .ant-btn+span,.ant-btn-rtl.ant-btn-group>span+span,.ant-btn-rtl.ant-btn-group+.ant-btn,.ant-btn-rtl.ant-btn-group+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group-rtl.ant-btn+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group span+.ant-btn,.ant-btn-group-rtl.ant-btn-group .ant-btn+span,.ant-btn-group-rtl.ant-btn-group>span+span,.ant-btn-group-rtl.ant-btn-group+.ant-btn,.ant-btn-group-rtl.ant-btn-group+.ant-btn-group{margin-right:-1px;margin-left:auto}.ant-btn-group.ant-btn-group-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-radius:0 2px 2px 0}.ant-btn-group-rtl.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-radius:2px 0 0 2px}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-radius:0 2px 2px 0}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-radius:2px 0 0 2px}.ant-btn:focus>span,.ant-btn:active>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn.ant-btn-background-ghost{color:#ffffffd9;border-color:#ffffff40}.ant-btn.ant-btn-background-ghost,.ant-btn.ant-btn-background-ghost:hover,.ant-btn.ant-btn-background-ghost:active,.ant-btn.ant-btn-background-ghost:focus{background:transparent}.ant-btn.ant-btn-background-ghost:hover,.ant-btn.ant-btn-background-ghost:focus{color:#3c9be8;border-color:#3c9be8}.ant-btn.ant-btn-background-ghost:active{color:#095cb5;border-color:#095cb5}.ant-btn.ant-btn-background-ghost[disabled]{color:#ffffff4d;background:transparent;border-color:#434343}.ant-btn-background-ghost.ant-btn-primary{color:#177ddc;border-color:#177ddc;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:hover,.ant-btn-background-ghost.ant-btn-primary:focus{color:#095cb5;border-color:#095cb5}.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:active{color:#3c9be8;border-color:#3c9be8}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled]:hover,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#a61d24;border-color:#a61d24;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:hover,.ant-btn-background-ghost.ant-btn-danger:focus{color:#800f19;border-color:#800f19}.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:active{color:#b33b3d;border-color:#b33b3d}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled]:hover,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous{color:#a61d24;border-color:#a61d24;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:hover,.ant-btn-background-ghost.ant-btn-dangerous:focus{color:#800f19;border-color:#800f19}.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:active{color:#b33b3d;border-color:#b33b3d}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous[disabled],.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link{color:#a61d24;border-color:transparent;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus{color:#800f19;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active{color:#b33b3d;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#ffffff4d;border-color:#434343;background:rgba(255,255,255,.08);text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>*:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn.ant-btn-block{width:100%}.ant-btn:empty{display:inline-block;width:0;visibility:hidden;content:" "}a.ant-btn{padding-top:.01px!important;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-btn-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary{border-right-color:#165996;border-left-color:#434343}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled]{border-right-color:#434343;border-left-color:#165996}.ant-btn-rtl.ant-btn>.ant-btn-loading-icon .anticon{padding-right:0;padding-left:8px}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0;padding-left:0}.ant-btn-rtl.ant-btn>.anticon+span,.ant-btn-rtl.ant-btn>span+.anticon{margin-right:8px;margin-left:0}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/calendar/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-picker-calendar{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background:#141414}.ant-picker-calendar-header{display:flex;justify-content:flex-end;padding:12px 0}.ant-picker-calendar-header .ant-picker-calendar-year-select{min-width:80px}.ant-picker-calendar-header .ant-picker-calendar-month-select{min-width:70px;margin-left:8px}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-left:8px}.ant-picker-calendar .ant-picker-panel{background:#141414;border:0;border-top:1px solid #303030;border-radius:0}.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel,.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel{width:auto}.ant-picker-calendar .ant-picker-panel .ant-picker-body{padding:8px 0}.ant-picker-calendar .ant-picker-panel .ant-picker-content{width:100%}.ant-picker-calendar-mini{border-radius:2px}.ant-picker-calendar-mini .ant-picker-calendar-header{padding-right:8px;padding-left:8px}.ant-picker-calendar-mini .ant-picker-panel{border-radius:0 0 2px 2px}.ant-picker-calendar-mini .ant-picker-content{height:256px}.ant-picker-calendar-mini .ant-picker-content th{height:auto;padding:0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel{display:block;width:100%;text-align:right;background:#141414;border:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th,.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td{padding:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{height:auto;padding:0 12px 5px 0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date{background:rgba(255,255,255,.08)}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today:before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today{background:#111b26}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:#177ddc}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{display:block;width:auto;height:auto;margin:0 4px;padding:4px 8px 0;border:0;border-top:2px solid #303030;border-radius:0;transition:background .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value{line-height:24px;transition:color .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{position:static;width:auto;height:86px;overflow-y:auto;color:#ffffffd9;line-height:1.5715;text-align:left}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today{border-color:#177ddc}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:#ffffffd9}@media only screen and (max-width: 480px){.ant-picker-calendar-header{display:block}.ant-picker-calendar-header .ant-picker-calendar-year-select{width:50%}.ant-picker-calendar-header .ant-picker-calendar-month-select{width:calc(50% - 8px)}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{width:100%;margin-top:8px;margin-left:0}.ant-picker-calendar-header .ant-picker-calendar-mode-switch>label{width:50%;text-align:center}}.ant-picker-calendar-rtl{direction:rtl}.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select,.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-right:8px;margin-left:0}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel{text-align:left}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{padding:0 0 5px 12px}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{text-align:right}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/radio/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-radio-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block;font-size:0}.ant-radio-group .ant-badge-count{z-index:1}.ant-radio-group>.ant-badge:not(:first-child)>.ant-radio-button-wrapper{border-left:none}.ant-radio-wrapper{box-sizing:border-box;margin:0 8px 0 0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-flex;align-items:baseline;cursor:pointer}.ant-radio-wrapper-disabled{cursor:not-allowed}.ant-radio-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-radio{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;display:inline-block;outline:none;cursor:pointer}.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner,.ant-radio-input:focus+.ant-radio-inner{border-color:#177ddc}.ant-radio-input:focus+.ant-radio-inner{box-shadow:0 0 0 3px #111b26}.ant-radio-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #177ddc;border-radius:50%;visibility:hidden;animation:antRadioEffect .36s ease-in-out;animation-fill-mode:both;content:""}.ant-radio:hover:after,.ant-radio-wrapper:hover .ant-radio:after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:transparent;border-color:#434343;border-style:solid;border-width:1px;border-radius:50%;transition:all .3s}.ant-radio-inner:after{position:absolute;top:50%;left:50%;display:block;width:16px;height:16px;margin-top:-8px;margin-left:-8px;background-color:#177ddc;border-top:0;border-left:0;border-radius:16px;transform:scale(0);opacity:0;transition:all .3s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#177ddc}.ant-radio-checked .ant-radio-inner:after{transform:scale(.5);opacity:1;transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled{cursor:not-allowed}.ant-radio-disabled .ant-radio-inner{background-color:#ffffff14;border-color:#434343!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner:after{background-color:#fff3}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:#ffffff4d;cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;color:#ffffffd9;font-size:14px;line-height:30px;background:transparent;border:1px solid #434343;border-top-width:1.02px;border-left-width:0;cursor:pointer;transition:color .3s,background .3s,border-color .3s,box-shadow .3s}.ant-radio-button-wrapper a{color:#ffffffd9}.ant-radio-button-wrapper>.ant-radio-button{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child):before{position:absolute;top:-1px;left:-1px;display:block;box-sizing:content-box;width:1px;height:100%;padding:1px 0;background-color:#434343;transition:background-color .3s;content:""}.ant-radio-button-wrapper:first-child{border-left:1px solid #434343;border-radius:2px 0 0 2px}.ant-radio-button-wrapper:last-child{border-radius:0 2px 2px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:2px}.ant-radio-button-wrapper:hover{position:relative;color:#177ddc}.ant-radio-button-wrapper:focus-within{box-shadow:0 0 0 3px #111b26}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#177ddc;background:transparent;border-color:#177ddc}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):before{background-color:#177ddc}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#177ddc}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#165996;border-color:#165996}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover:before{background-color:#165996}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#388ed3;border-color:#388ed3}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active:before{background-color:#388ed3}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px #111b26}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#177ddc;border-color:#177ddc}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#165996;border-color:#165996}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#388ed3;border-color:#388ed3}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px #111b26}.ant-radio-button-wrapper-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;cursor:not-allowed}.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:#ffffff4d;background-color:#ffffff14;border-color:#434343}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#434343}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:#ffffff4d;background-color:#fff3;border-color:#434343;box-shadow:none}@keyframes antRadioEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-radio-group.ant-radio-group-rtl{direction:rtl}.ant-radio-wrapper.ant-radio-wrapper-rtl{margin-right:0;margin-left:8px;direction:rtl}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl{border-right-width:0;border-left-width:1px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child):before{right:-1px;left:0}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child{border-right:1px solid #434343;border-radius:0 2px 2px 0}.ant-radio-button-wrapper-checked:not([class*=" ant-radio-button-wrapper-disabled"]).ant-radio-button-wrapper:first-child{border-right-color:#165996}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child{border-radius:2px 0 0 2px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child{border-right-color:#434343}/*!****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/date-picker/style/index.less ***! + \\****************************************************************************************************************************************************************************************************************************************************************/.ant-picker{box-sizing:border-box;margin:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";padding:4px 11px;position:relative;display:inline-flex;align-items:center;background:transparent;border:1px solid #434343;border-radius:2px;transition:border .3s,box-shadow .3s}.ant-picker:hover,.ant-picker-focused{border-color:#165996;border-right-width:1px!important}.ant-picker-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-picker.ant-picker-disabled{background:rgba(255,255,255,.08);border-color:#434343;cursor:not-allowed}.ant-picker.ant-picker-disabled .ant-picker-suffix{color:#ffffff4d}.ant-picker.ant-picker-borderless{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important}.ant-picker-input{position:relative;display:inline-flex;align-items:center;width:100%}.ant-picker-input>input{position:relative;display:inline-block;width:100%;min-width:0;color:#ffffffd9;font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #434343;border-radius:2px;transition:all .3s;flex:auto;min-width:1px;height:auto;padding:0;background:transparent;border:0}.ant-picker-input>input::-moz-placeholder{opacity:1}.ant-picker-input>input::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-picker-input>input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:hover{border-color:#165996;border-right-width:1px!important}.ant-picker-input>input:focus,.ant-picker-input>input-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-picker-input>input-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-picker-input>input-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-picker-input>input[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-picker-input>input[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-picker-input>input-borderless,.ant-picker-input>input-borderless:hover,.ant-picker-input>input-borderless:focus,.ant-picker-input>input-borderless-focused,.ant-picker-input>input-borderless-disabled,.ant-picker-input>input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-picker-input>input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-picker-input>input-lg{padding:6.5px 11px;font-size:16px}.ant-picker-input>input-sm{padding:0 7px}.ant-picker-input>input:focus{box-shadow:none}.ant-picker-input>input[disabled]{background:transparent}.ant-picker-input:hover .ant-picker-clear{opacity:1}.ant-picker-input-placeholder>input{color:#ffffff4d}.ant-picker-large{padding:6.5px 11px}.ant-picker-large .ant-picker-input>input{font-size:16px}.ant-picker-small{padding:0 7px}.ant-picker-suffix{align-self:center;margin-left:4px;color:#ffffff4d;line-height:1;pointer-events:none}.ant-picker-suffix>*{vertical-align:top}.ant-picker-clear{position:absolute;top:50%;right:0;color:#ffffff4d;line-height:1;background:#141414;transform:translateY(-50%);cursor:pointer;opacity:0;transition:opacity .3s,color .3s}.ant-picker-clear>*{vertical-align:top}.ant-picker-clear:hover{color:#ffffff73}.ant-picker-separator{position:relative;display:inline-block;width:1em;height:16px;color:#ffffff4d;font-size:16px;vertical-align:top;cursor:default}.ant-picker-focused .ant-picker-separator{color:#ffffff73}.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator{cursor:not-allowed}.ant-picker-range{position:relative;display:inline-flex}.ant-picker-range .ant-picker-clear{right:11px}.ant-picker-range:hover .ant-picker-clear{opacity:1}.ant-picker-range .ant-picker-active-bar{bottom:-1px;height:2px;margin-left:11px;background:#177ddc;opacity:0;transition:all .3s ease-out;pointer-events:none}.ant-picker-range.ant-picker-focused .ant-picker-active-bar{opacity:1}.ant-picker-range-separator{align-items:center;padding:0 8px;line-height:1}.ant-picker-range.ant-picker-small .ant-picker-clear{right:7px}.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-left:7px}.ant-picker-dropdown{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;z-index:1050}.ant-picker-dropdown-hidden{display:none}.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow{top:1.66666667px;display:block;transform:rotate(-45deg)}.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow{bottom:1.66666667px;display:block;transform:rotate(135deg)}.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight{animation-name:antSlideDownIn}.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight{animation-name:antSlideUpIn}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight{animation-name:antSlideDownOut}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight{animation-name:antSlideUpOut}.ant-picker-dropdown-range{padding:6.66666667px 0}.ant-picker-dropdown-range-hidden{display:none}.ant-picker-dropdown .ant-picker-panel>.ant-picker-time-panel{padding-top:4px}.ant-picker-ranges{margin-bottom:0;padding:4px 12px;overflow:hidden;line-height:34px;text-align:left;list-style:none}.ant-picker-ranges>li{display:inline-block}.ant-picker-ranges .ant-picker-preset>.ant-tag-blue{color:#177ddc;background:#111b26;border-color:#153450;cursor:pointer}.ant-picker-ranges .ant-picker-ok{float:right;margin-left:8px}.ant-picker-range-wrapper{display:flex}.ant-picker-range-arrow{position:absolute;z-index:1;display:none;width:10px;height:10px;margin-left:16.5px;box-shadow:2px -2px 6px #0000000f;transition:left .3s ease-out}.ant-picker-range-arrow:after{position:absolute;top:1px;right:1px;width:10px;height:10px;border:5px solid #303030;border-color:#1f1f1f #1f1f1f transparent transparent;content:""}.ant-picker-panel-container{overflow:hidden;vertical-align:top;background:#1f1f1f;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003;transition:margin .3s}.ant-picker-panel-container .ant-picker-panels{display:inline-flex;flex-wrap:nowrap;direction:ltr}.ant-picker-panel-container .ant-picker-panel{vertical-align:top;background:transparent;border-width:0 0 1px 0;border-radius:0}.ant-picker-panel-container .ant-picker-panel .ant-picker-content,.ant-picker-panel-container .ant-picker-panel table{text-align:center}.ant-picker-panel-container .ant-picker-panel-focused{border-color:#303030}.ant-picker-panel{display:inline-flex;flex-direction:column;text-align:center;background:#1f1f1f;border:1px solid #303030;border-radius:2px;outline:none}.ant-picker-panel-focused{border-color:#177ddc}.ant-picker-decade-panel,.ant-picker-year-panel,.ant-picker-quarter-panel,.ant-picker-month-panel,.ant-picker-week-panel,.ant-picker-date-panel,.ant-picker-time-panel{display:flex;flex-direction:column;width:280px}.ant-picker-header{display:flex;padding:0 8px;color:#ffffffd9;border-bottom:1px solid #303030}.ant-picker-header>*{flex:none}.ant-picker-header button{padding:0;color:#ffffff4d;line-height:40px;background:transparent;border:0;cursor:pointer;transition:color .3s}.ant-picker-header>button{min-width:1.6em;font-size:14px}.ant-picker-header>button:hover{color:#ffffffd9}.ant-picker-header-view{flex:auto;font-weight:500;line-height:40px}.ant-picker-header-view button{color:inherit;font-weight:inherit}.ant-picker-header-view button:not(:first-child){margin-left:8px}.ant-picker-header-view button:hover{color:#177ddc}.ant-picker-prev-icon,.ant-picker-next-icon,.ant-picker-super-prev-icon,.ant-picker-super-next-icon{position:relative;display:inline-block;width:7px;height:7px}.ant-picker-prev-icon:before,.ant-picker-next-icon:before,.ant-picker-super-prev-icon:before,.ant-picker-super-next-icon:before{position:absolute;top:0;left:0;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-width:1.5px 0 0 1.5px;content:""}.ant-picker-super-prev-icon:after,.ant-picker-super-next-icon:after{position:absolute;top:4px;left:4px;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-width:1.5px 0 0 1.5px;content:""}.ant-picker-prev-icon,.ant-picker-super-prev-icon{transform:rotate(-45deg)}.ant-picker-next-icon,.ant-picker-super-next-icon{transform:rotate(135deg)}.ant-picker-content{width:100%;table-layout:fixed;border-collapse:collapse}.ant-picker-content th,.ant-picker-content td{position:relative;min-width:24px;font-weight:400}.ant-picker-content th{height:30px;color:#ffffffd9;line-height:30px}.ant-picker-cell{padding:3px 0;color:#ffffff4d;cursor:pointer}.ant-picker-cell-in-view{color:#ffffffd9}.ant-picker-cell:before{position:absolute;top:50%;right:0;left:0;z-index:1;height:24px;transform:translateY(-50%);transition:all .3s;content:""}.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner{background:rgba(255,255,255,.08)}.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border:1px solid #177ddc;border-radius:2px;content:""}.ant-picker-cell-in-view.ant-picker-cell-in-range{position:relative}.ant-picker-cell-in-view.ant-picker-cell-in-range:before{background:#111b26}.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner{color:#fff;background:#177ddc}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):before{background:#111b26}.ant-picker-cell-in-view.ant-picker-cell-range-start:before{left:50%}.ant-picker-cell-in-view.ant-picker-cell-range-end:before{right:50%}.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range):after{position:absolute;top:50%;z-index:0;height:24px;border-top:1px dashed #0e4980;border-bottom:1px dashed #0e4980;transform:translateY(-50%);transition:all .3s;content:""}.ant-picker-cell-range-hover-start:after,.ant-picker-cell-range-hover-end:after,.ant-picker-cell-range-hover:after{right:0;left:2px}.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start:before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end:before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start:before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end:before{background:#06213a}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:2px 0 0 2px}.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:0 2px 2px 0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after,.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{position:absolute;top:0;bottom:0;z-index:-1;background:#06213a;transition:all .3s;content:""}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{right:-6px;left:0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{right:0;left:-6px}.ant-picker-cell-range-hover.ant-picker-cell-range-start:after{right:50%}.ant-picker-cell-range-hover.ant-picker-cell-range-end:after{left:50%}tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child:after,.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:after{left:6px;border-left:1px dashed #0e4980;border-top-left-radius:2px;border-bottom-left-radius:2px}tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child:after,.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:after{right:6px;border-right:1px dashed #0e4980;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-picker-cell-disabled{color:#ffffff4d;pointer-events:none}.ant-picker-cell-disabled .ant-picker-cell-inner{background:transparent}.ant-picker-cell-disabled:before{background:#303030}.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner:before{border-color:#ffffff4d}.ant-picker-decade-panel .ant-picker-content,.ant-picker-year-panel .ant-picker-content,.ant-picker-quarter-panel .ant-picker-content,.ant-picker-month-panel .ant-picker-content{height:264px}.ant-picker-decade-panel .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px}.ant-picker-quarter-panel .ant-picker-content{height:56px}.ant-picker-footer{width:-moz-min-content;width:min-content;min-width:100%;line-height:38px;text-align:center;border-bottom:1px solid transparent}.ant-picker-panel .ant-picker-footer{border-top:1px solid #303030}.ant-picker-footer-extra{padding:0 12px;line-height:38px;text-align:left}.ant-picker-footer-extra:not(:last-child){border-bottom:1px solid #303030}.ant-picker-now{text-align:left}.ant-picker-today-btn{color:#177ddc}.ant-picker-today-btn:hover{color:#165996}.ant-picker-today-btn:active{color:#388ed3}.ant-picker-today-btn.ant-picker-today-btn-disabled{color:#ffffff4d;cursor:not-allowed}.ant-picker-decade-panel .ant-picker-cell-inner{padding:0 4px}.ant-picker-decade-panel .ant-picker-cell:before{display:none}.ant-picker-year-panel .ant-picker-body,.ant-picker-quarter-panel .ant-picker-body,.ant-picker-month-panel .ant-picker-body{padding:0 8px}.ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-inner{width:60px}.ant-picker-year-panel .ant-picker-cell-range-hover-start:after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-start:after,.ant-picker-month-panel .ant-picker-cell-range-hover-start:after{left:14px;border-left:1px dashed #0e4980;border-radius:2px 0 0 2px}.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start:after{right:14px;border-right:1px dashed #0e4980;border-radius:0 2px 2px 0}.ant-picker-year-panel .ant-picker-cell-range-hover-end:after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-end:after,.ant-picker-month-panel .ant-picker-cell-range-hover-end:after{right:14px;border-right:1px dashed #0e4980;border-radius:0 2px 2px 0}.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end:after{left:14px;border-left:1px dashed #0e4980;border-radius:2px 0 0 2px}.ant-picker-week-panel .ant-picker-body{padding:8px 12px}.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner{background:transparent!important}.ant-picker-week-panel-row td{transition:background .3s}.ant-picker-week-panel-row:hover td{background:rgba(255,255,255,.08)}.ant-picker-week-panel-row-selected td,.ant-picker-week-panel-row-selected:hover td{background:#177ddc}.ant-picker-week-panel-row-selected td.ant-picker-cell-week,.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week{color:#ffffff80}.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner:before,.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner:before{border-color:#fff}.ant-picker-week-panel-row-selected td .ant-picker-cell-inner,.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner{color:#fff}.ant-picker-date-panel .ant-picker-body{padding:8px 12px}.ant-picker-date-panel .ant-picker-content{width:252px}.ant-picker-date-panel .ant-picker-content th{width:36px}.ant-picker-datetime-panel{display:flex}.ant-picker-datetime-panel .ant-picker-time-panel{border-left:1px solid #303030}.ant-picker-datetime-panel .ant-picker-date-panel,.ant-picker-datetime-panel .ant-picker-time-panel{transition:opacity .3s}.ant-picker-datetime-panel-active .ant-picker-date-panel,.ant-picker-datetime-panel-active .ant-picker-time-panel{opacity:.3}.ant-picker-datetime-panel-active .ant-picker-date-panel-active,.ant-picker-datetime-panel-active .ant-picker-time-panel-active{opacity:1}.ant-picker-time-panel{width:auto;min-width:auto}.ant-picker-time-panel .ant-picker-content{display:flex;flex:auto;height:224px}.ant-picker-time-panel-column{flex:1 0 auto;width:56px;margin:0;padding:0;overflow-y:hidden;text-align:left;list-style:none;transition:background .3s}.ant-picker-time-panel-column:after{display:block;height:196px;content:""}.ant-picker-datetime-panel .ant-picker-time-panel-column:after{height:198px}.ant-picker-time-panel-column:not(:first-child){border-left:1px solid #303030}.ant-picker-time-panel-column-active{background:rgba(17,27,38,.2)}.ant-picker-time-panel-column:hover{overflow-y:auto}.ant-picker-time-panel-column>li{margin:0;padding:0}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner{display:block;width:100%;height:28px;margin:0;padding:0 0 0 14px;color:#ffffffd9;line-height:28px;border-radius:0;cursor:pointer;transition:background .3s}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover{background:rgba(255,255,255,.08)}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:#111b26}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner{color:#ffffff4d;background:transparent;cursor:not-allowed}_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell{padding:21px 0}.ant-picker-rtl{direction:rtl}.ant-picker-rtl .ant-picker-suffix{margin-right:4px;margin-left:0}.ant-picker-rtl .ant-picker-clear{right:auto;left:0}.ant-picker-rtl .ant-picker-separator{transform:rotate(180deg)}.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child){margin-right:8px;margin-left:0}.ant-picker-rtl.ant-picker-range .ant-picker-clear{right:auto;left:11px}.ant-picker-rtl.ant-picker-range .ant-picker-active-bar{margin-right:11px;margin-left:0}.ant-picker-rtl.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-right:7px}.ant-picker-dropdown-rtl .ant-picker-ranges{text-align:right}.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok{float:left;margin-right:8px;margin-left:0}.ant-picker-panel-rtl{direction:rtl}.ant-picker-panel-rtl .ant-picker-prev-icon,.ant-picker-panel-rtl .ant-picker-super-prev-icon{transform:rotate(135deg)}.ant-picker-panel-rtl .ant-picker-next-icon,.ant-picker-panel-rtl .ant-picker-super-next-icon{transform:rotate(-45deg)}.ant-picker-cell .ant-picker-cell-inner{position:relative;z-index:2;display:inline-block;min-width:24px;height:24px;line-height:24px;border-radius:2px;transition:background .3s,border .3s}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:before{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:before{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end:before{right:50%;left:50%}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{right:0;left:-6px}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{right:-6px;left:0}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start:after{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end:after{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:0 2px 2px 0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:2px 0 0 2px}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):first-child:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:after{right:6px;left:0;border-right:1px dashed #0e4980;border-left:none;border-radius:0 2px 2px 0}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):last-child:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:after{right:0;left:6px;border-right:none;border-left:1px dashed #0e4980;border-radius:2px 0 0 2px}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-end.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-start.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-start:last-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-end:first-child:after{right:6px;left:6px;border-right:1px dashed #0e4980;border-left:1px dashed #0e4980;border-radius:2px}.ant-picker-dropdown-rtl .ant-picker-footer-extra{direction:rtl;text-align:right}.ant-picker-panel-rtl .ant-picker-time-panel{direction:ltr}/*!********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tag/style/index.less ***! + \\********************************************************************************************************************************************************************************************************************************************************/.ant-tag{box-sizing:border-box;margin:0 8px 0 0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block;height:auto;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:rgba(255,255,255,.04);border:1px solid #434343;border-radius:2px;opacity:1;transition:all .3s}.ant-tag,.ant-tag a,.ant-tag a:hover{color:#ffffffd9}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag-close-icon{margin-left:3px;color:#ffffff73;font-size:10px;cursor:pointer;transition:all .3s}.ant-tag-close-icon:hover{color:#ffffffd9}.ant-tag-has-color{border-color:transparent}.ant-tag-has-color,.ant-tag-has-color a,.ant-tag-has-color a:hover,.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover{color:#fff}.ant-tag-checkable{background-color:transparent;border-color:transparent;cursor:pointer}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#177ddc}.ant-tag-checkable:active,.ant-tag-checkable-checked{color:#fff}.ant-tag-checkable-checked{background-color:#177ddc}.ant-tag-checkable:active{background-color:#388ed3}.ant-tag-hidden{display:none}.ant-tag-pink{color:#e0529c;background:#291321;border-color:#551c3b}.ant-tag-pink-inverse{color:#fff;background:#cb2b83;border-color:#cb2b83}.ant-tag-magenta{color:#e0529c;background:#291321;border-color:#551c3b}.ant-tag-magenta-inverse{color:#fff;background:#cb2b83;border-color:#cb2b83}.ant-tag-red{color:#e84749;background:#2a1215;border-color:#58181c}.ant-tag-red-inverse{color:#fff;background:#d32029;border-color:#d32029}.ant-tag-volcano{color:#e87040;background:#2b1611;border-color:#592716}.ant-tag-volcano-inverse{color:#fff;background:#d84a1b;border-color:#d84a1b}.ant-tag-orange{color:#e89a3c;background:#2b1d11;border-color:#593815}.ant-tag-orange-inverse{color:#fff;background:#d87a16;border-color:#d87a16}.ant-tag-yellow{color:#e8d639;background:#2b2611;border-color:#595014}.ant-tag-yellow-inverse{color:#fff;background:#d8bd14;border-color:#d8bd14}.ant-tag-gold{color:#e8b339;background:#2b2111;border-color:#594214}.ant-tag-gold-inverse{color:#fff;background:#d89614;border-color:#d89614}.ant-tag-cyan{color:#33bcb7;background:#112123;border-color:#144848}.ant-tag-cyan-inverse{color:#fff;background:#13a8a8;border-color:#13a8a8}.ant-tag-lime{color:#a9d134;background:#1f2611;border-color:#3e4f13}.ant-tag-lime-inverse{color:#fff;background:#8bbb11;border-color:#8bbb11}.ant-tag-green{color:#6abe39;background:#162312;border-color:#274916}.ant-tag-green-inverse{color:#fff;background:#49aa19;border-color:#49aa19}.ant-tag-blue{color:#3c9ae8;background:#111d2c;border-color:#15395b}.ant-tag-blue-inverse{color:#fff;background:#177ddc;border-color:#177ddc}.ant-tag-geekblue{color:#5273e0;background:#131629;border-color:#1c2755}.ant-tag-geekblue-inverse{color:#fff;background:#2b4acb;border-color:#2b4acb}.ant-tag-purple{color:#854eca;background:#1a1325;border-color:#301c4d}.ant-tag-purple-inverse{color:#fff;background:#642ab5;border-color:#642ab5}.ant-tag-success{color:#49aa19;background:#162312;border-color:#274916}.ant-tag-processing{color:#177ddc;background:#111b26;border-color:#153450}.ant-tag-error{color:#a61d24;background:#2a1215;border-color:#58181c}.ant-tag-warning{color:#d89614;background:#2b1d11;border-color:#593815}.ant-tag>.anticon+span,.ant-tag>span+.anticon{margin-left:7px}.ant-tag.ant-tag-rtl{margin-right:0;margin-left:8px;direction:rtl;text-align:right}.ant-tag-rtl .ant-tag-close-icon{margin-right:3px;margin-left:0}.ant-tag-rtl.ant-tag>.anticon+span,.ant-tag-rtl.ant-tag>span+.anticon{margin-right:7px;margin-left:0}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/card/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-card{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;background:#141414;border-radius:2px}.ant-card-rtl{direction:rtl}.ant-card-hoverable{cursor:pointer;transition:box-shadow .3s,border-color .3s}.ant-card-hoverable:hover{border-color:transparent;box-shadow:0 1px 2px -2px #000000a3,0 3px 6px #0000007a,0 5px 12px 4px #0000005c}.ant-card-bordered{border:1px solid #303030}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:#ffffffd9;font-weight:500;font-size:16px;background:transparent;border-bottom:1px solid #303030;border-radius:2px 2px 0 0}.ant-card-head:before{display:table;content:""}.ant-card-head:after{display:table;clear:both;content:""}.ant-card-head-wrapper{display:flex;align-items:center}.ant-card-head-title{display:inline-block;flex:1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-head-title>.ant-typography,.ant-card-head-title>.ant-typography-edit-content{left:0;margin-top:0;margin-bottom:0}.ant-card-head .ant-tabs-top{clear:both;margin-bottom:-17px;color:#ffffffd9;font-weight:400;font-size:14px}.ant-card-head .ant-tabs-top-bar{border-bottom:1px solid #303030}.ant-card-extra{float:right;margin-left:auto;padding:16px 0;color:#ffffffd9;font-weight:400;font-size:14px}.ant-card-rtl .ant-card-extra{margin-right:auto;margin-left:0}.ant-card-body{padding:24px}.ant-card-body:before{display:table;content:""}.ant-card-body:after{display:table;clear:both;content:""}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;box-shadow:1px 0 #303030,0 1px #303030,1px 1px #303030,1px 0 #303030 inset,0 1px #303030 inset;transition:all .3s}.ant-card-rtl .ant-card-grid{float:right}.ant-card-grid-hoverable:hover{position:relative;z-index:1;box-shadow:0 1px 2px -2px #000000a3,0 3px 6px #0000007a,0 5px 12px 4px #0000005c}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs>.ant-card-head .ant-card-extra{padding-bottom:0}.ant-card-bordered .ant-card-cover{margin-top:-1px;margin-right:-1px;margin-left:-1px}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:2px 2px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#141414;border-top:1px solid #303030}.ant-card-actions:before{display:table;content:""}.ant-card-actions:after{display:table;clear:both;content:""}.ant-card-actions>li{float:left;margin:12px 0;color:#ffffff73;text-align:center}.ant-card-rtl .ant-card-actions>li{float:right}.ant-card-actions>li>span{position:relative;display:block;min-width:32px;font-size:14px;line-height:1.5715;cursor:pointer}.ant-card-actions>li>span:hover{color:#177ddc;transition:color .3s}.ant-card-actions>li>span a:not(.ant-btn),.ant-card-actions>li>span>.anticon{display:inline-block;width:100%;color:#ffffff73;line-height:22px;transition:color .3s}.ant-card-actions>li>span a:not(.ant-btn):hover,.ant-card-actions>li>span>.anticon:hover{color:#177ddc}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li:not(:last-child){border-right:1px solid #303030}.ant-card-rtl .ant-card-actions>li:not(:last-child){border-right:none;border-left:1px solid #303030}.ant-card-type-inner .ant-card-head{padding:0 24px;background:rgba(255,255,255,.04)}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0}.ant-card-meta:before{display:table;content:""}.ant-card-meta:after{display:table;clear:both;content:""}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-rtl .ant-card-meta-avatar{float:right;padding-right:0;padding-left:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:#ffffffd9;font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:#ffffff73}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-card-loading-content p{margin:0}.ant-card-loading-block{height:14px;margin:4px 0;background:linear-gradient(90deg,rgba(48,48,48,.2),rgba(48,48,48,.4),rgba(48,48,48,.2));background-size:600% 600%;border-radius:2px;animation:card-loading 1.4s ease infinite}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tabs/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:8px 0;font-size:14px}.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:16px 0;font-size:16px}.ant-tabs-card.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:6px 16px}.ant-tabs-card.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:7px 16px 6px}.ant-tabs-rtl{direction:rtl}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type{margin-left:0}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon{margin-right:0;margin-left:12px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove{margin-right:8px;margin-left:-4px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-nav{order:1}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-content-holder{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-nav{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-content-holder{order:1}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-right:2px;margin-left:0}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-add{margin-right:2px;margin-left:0}.ant-tabs-dropdown-rtl{direction:rtl}.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item{text-align:right}.ant-tabs-top,.ant-tabs-bottom{flex-direction:column}.ant-tabs-top>.ant-tabs-nav,.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-top>div>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{margin:0 0 16px}.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before{position:absolute;right:0;left:0;border-bottom:1px solid #303030;content:""}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar{height:2px}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:width .3s,left .3s,right .3s}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{top:0;bottom:0;width:30px}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{left:0;box-shadow:inset 10px 0 8px -8px #00000014}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;box-shadow:inset -10px 0 8px -8px #00000014}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before{opacity:1}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after{opacity:1}.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before{bottom:0}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar{bottom:0}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{order:1;margin-top:16px;margin-bottom:0}.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before{top:0}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar{top:0}.ant-tabs-bottom>.ant-tabs-content-holder,.ant-tabs-bottom>div>.ant-tabs-content-holder{order:0}.ant-tabs-left>.ant-tabs-nav,.ant-tabs-right>.ant-tabs-nav,.ant-tabs-left>div>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{flex-direction:column;min-width:50px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{padding:8px 24px;text-align:center}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin:16px 0 0}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap{flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;left:0;height:30px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{top:0;box-shadow:inset 0 10px 8px -8px #00000014}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{bottom:0;box-shadow:inset 0 -10px 8px -8px #00000014}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{width:2px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:height .3s,top .3s}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-operations{flex:1 0 auto;flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar{right:0}.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-left>div>.ant-tabs-content-holder{margin-left:-1px;border-left:1px solid #303030}.ant-tabs-left>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-left>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-left:24px}.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{order:1}.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{left:0}.ant-tabs-right>.ant-tabs-content-holder,.ant-tabs-right>div>.ant-tabs-content-holder{order:0;margin-right:-1px;border-right:1px solid #303030}.ant-tabs-right>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-right>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-right:24px}.ant-tabs-dropdown{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-tabs-dropdown-hidden{display:none}.ant-tabs-dropdown-menu{max-height:200px;margin:0;padding:4px 0;overflow-x:hidden;overflow-y:auto;text-align:left;list-style-type:none;background-color:#1f1f1f;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-tabs-dropdown-menu-item{display:flex;align-items:center;min-width:120px;margin:0;padding:5px 12px;overflow:hidden;color:#ffffffd9;font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-tabs-dropdown-menu-item>span{flex:1;white-space:nowrap}.ant-tabs-dropdown-menu-item-remove{flex:none;margin-left:12px;color:#ffffff73;font-size:12px;background:transparent;border:0;cursor:pointer}.ant-tabs-dropdown-menu-item-remove:hover{color:#165996}.ant-tabs-dropdown-menu-item:hover{background:rgba(255,255,255,.08)}.ant-tabs-dropdown-menu-item-disabled,.ant-tabs-dropdown-menu-item-disabled:hover{color:#ffffff4d;background:transparent;cursor:not-allowed}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab{margin:0;padding:8px 16px;background:rgba(255,255,255,.04);border:1px solid #303030;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab-active{color:#177ddc;background:#141414}.ant-tabs-card>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-ink-bar{visibility:hidden}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-left:2px}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 2px 0 0}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab-active{border-bottom-color:#141414}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 2px 2px}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab-active{border-top-color:#141414}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-top:2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 0 0 2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab-active{border-right-color:#141414}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 2px 2px 0}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab-active{border-left-color:#141414}.ant-tabs{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:flex;overflow:hidden}.ant-tabs>.ant-tabs-nav,.ant-tabs>div>.ant-tabs-nav{position:relative;display:flex;flex:none;align-items:center}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap{position:relative;display:inline-block;display:flex;flex:auto;align-self:stretch;overflow:hidden;white-space:nowrap;transform:translate(0)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{position:absolute;z-index:1;opacity:0;transition:opacity .3s;content:"";pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-list{position:relative;display:flex;transition:transform .3s}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations{display:flex;align-self:stretch}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations-hidden,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations-hidden{position:absolute;visibility:hidden;pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more{position:relative;padding:8px 16px;background:transparent;border:0}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more:after{position:absolute;right:0;bottom:0;left:0;height:5px;transform:translateY(100%);content:""}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add{min-width:40px;margin-left:2px;padding:0 8px;background:rgba(255,255,255,.04);border:1px solid #303030;border-radius:2px 2px 0 0;outline:none;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:hover,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:hover{color:#165996}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:focus,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:focus{color:#388ed3}.ant-tabs-extra-content{flex:none}.ant-tabs-centered>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*="ant-tabs-nav-wrap-ping"]),.ant-tabs-centered>div>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*="ant-tabs-nav-wrap-ping"]){justify-content:center}.ant-tabs-ink-bar{position:absolute;background:#177ddc;pointer-events:none}.ant-tabs-tab{position:relative;display:inline-flex;align-items:center;padding:12px 0;font-size:14px;background:transparent;border:0;outline:none;cursor:pointer}.ant-tabs-tab-btn:focus,.ant-tabs-tab-remove:focus,.ant-tabs-tab-btn:active,.ant-tabs-tab-remove:active{color:#388ed3}.ant-tabs-tab-btn{outline:none;transition:all .3s}.ant-tabs-tab-remove{flex:none;margin-right:-4px;margin-left:8px;color:#ffffff73;font-size:12px;background:transparent;border:none;outline:none;cursor:pointer;transition:all .3s}.ant-tabs-tab-remove:hover{color:#ffffffd9}.ant-tabs-tab:hover{color:#165996}.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#177ddc;text-shadow:0 0 .25px currentcolor}.ant-tabs-tab.ant-tabs-tab-disabled{color:#ffffff4d;cursor:not-allowed}.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active{color:#ffffff4d}.ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-tab .anticon{margin-right:12px}.ant-tabs-tab+.ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-content{display:flex;width:100%}.ant-tabs-content-holder{flex:auto;min-width:0;min-height:0}.ant-tabs-content-animated{transition:margin .3s}.ant-tabs-tabpane{flex:none;width:100%;outline:none}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/grid/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-row{display:flex;flex-flow:row wrap}.ant-row:before,.ant-row:after{display:flex}.ant-row-no-wrap{flex-wrap:nowrap}.ant-row-start{justify-content:flex-start}.ant-row-center{justify-content:center}.ant-row-end{justify-content:flex-end}.ant-row-space-between{justify-content:space-between}.ant-row-space-around{justify-content:space-around}.ant-row-top{align-items:flex-start}.ant-row-middle{align-items:center}.ant-row-bottom{align-items:flex-end}.ant-col{position:relative;max-width:100%;min-height:1px}.ant-col-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{order:24}.ant-col-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{order:23}.ant-col-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{order:22}.ant-col-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{order:21}.ant-col-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{order:20}.ant-col-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{order:19}.ant-col-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{order:18}.ant-col-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{order:17}.ant-col-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{order:16}.ant-col-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{order:15}.ant-col-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{order:14}.ant-col-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{order:13}.ant-col-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{order:12}.ant-col-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{order:11}.ant-col-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{order:10}.ant-col-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{order:9}.ant-col-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{order:8}.ant-col-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{order:7}.ant-col-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{order:6}.ant-col-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{order:5}.ant-col-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{order:4}.ant-col-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{order:3}.ant-col-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{order:2}.ant-col-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{order:0}.ant-col-offset-0.ant-col-rtl{margin-right:0}.ant-col-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}.ant-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{order:24}.ant-col-xs-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{order:23}.ant-col-xs-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{order:22}.ant-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{order:21}.ant-col-xs-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{order:20}.ant-col-xs-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{order:19}.ant-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{order:18}.ant-col-xs-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{order:17}.ant-col-xs-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{order:16}.ant-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{order:15}.ant-col-xs-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{order:14}.ant-col-xs-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{order:13}.ant-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{order:12}.ant-col-xs-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{order:11}.ant-col-xs-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{order:10}.ant-col-xs-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{order:9}.ant-col-xs-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{order:8}.ant-col-xs-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{order:7}.ant-col-xs-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{order:6}.ant-col-xs-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{order:5}.ant-col-xs-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{order:4}.ant-col-xs-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{order:3}.ant-col-xs-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{order:2}.ant-col-xs-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xs-push-0.ant-col-rtl{right:auto}.ant-col-xs-pull-0.ant-col-rtl{left:auto}.ant-col-xs-offset-0.ant-col-rtl{margin-right:0}.ant-col-xs-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xs-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xs-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xs-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xs-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xs-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xs-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xs-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xs-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xs-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xs-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xs-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xs-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xs-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xs-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xs-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xs-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xs-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xs-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xs-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xs-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xs-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xs-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xs-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xs-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xs-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xs-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xs-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xs-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xs-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xs-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xs-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xs-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xs-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xs-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xs-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xs-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xs-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xs-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xs-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xs-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xs-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xs-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xs-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xs-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xs-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xs-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xs-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xs-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xs-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xs-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xs-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xs-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xs-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xs-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xs-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xs-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xs-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xs-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xs-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xs-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xs-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xs-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xs-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xs-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xs-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xs-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xs-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xs-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xs-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xs-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xs-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}@media (min-width: 576px){.ant-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{order:24}.ant-col-sm-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{order:23}.ant-col-sm-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{order:22}.ant-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{order:21}.ant-col-sm-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{order:20}.ant-col-sm-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{order:19}.ant-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{order:18}.ant-col-sm-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{order:17}.ant-col-sm-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{order:16}.ant-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{order:15}.ant-col-sm-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{order:14}.ant-col-sm-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{order:13}.ant-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{order:12}.ant-col-sm-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{order:11}.ant-col-sm-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{order:10}.ant-col-sm-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{order:9}.ant-col-sm-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{order:8}.ant-col-sm-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{order:7}.ant-col-sm-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{order:6}.ant-col-sm-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{order:5}.ant-col-sm-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{order:4}.ant-col-sm-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{order:3}.ant-col-sm-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{order:2}.ant-col-sm-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-sm-push-0.ant-col-rtl{right:auto}.ant-col-sm-pull-0.ant-col-rtl{left:auto}.ant-col-sm-offset-0.ant-col-rtl{margin-right:0}.ant-col-sm-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-sm-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-sm-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-sm-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-sm-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-sm-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-sm-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-sm-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-sm-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-sm-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-sm-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-sm-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-sm-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-sm-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-sm-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-sm-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-sm-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-sm-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-sm-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-sm-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-sm-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-sm-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-sm-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-sm-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-sm-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-sm-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-sm-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-sm-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-sm-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-sm-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-sm-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-sm-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-sm-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-sm-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-sm-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-sm-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-sm-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-sm-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-sm-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-sm-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-sm-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-sm-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-sm-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-sm-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-sm-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-sm-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-sm-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-sm-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-sm-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-sm-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-sm-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-sm-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-sm-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-sm-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-sm-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-sm-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-sm-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-sm-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-sm-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-sm-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-sm-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-sm-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-sm-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-sm-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-sm-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-sm-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-sm-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-sm-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-sm-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-sm-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-sm-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-sm-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 768px){.ant-col-md-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{order:24}.ant-col-md-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{order:23}.ant-col-md-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{order:22}.ant-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{order:21}.ant-col-md-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{order:20}.ant-col-md-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{order:19}.ant-col-md-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{order:18}.ant-col-md-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{order:17}.ant-col-md-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{order:16}.ant-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{order:15}.ant-col-md-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{order:14}.ant-col-md-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{order:13}.ant-col-md-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{order:12}.ant-col-md-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{order:11}.ant-col-md-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{order:10}.ant-col-md-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{order:9}.ant-col-md-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{order:8}.ant-col-md-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{order:7}.ant-col-md-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{order:6}.ant-col-md-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{order:5}.ant-col-md-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{order:4}.ant-col-md-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{order:3}.ant-col-md-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{order:2}.ant-col-md-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-md-push-0.ant-col-rtl{right:auto}.ant-col-md-pull-0.ant-col-rtl{left:auto}.ant-col-md-offset-0.ant-col-rtl{margin-right:0}.ant-col-md-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-md-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-md-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-md-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-md-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-md-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-md-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-md-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-md-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-md-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-md-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-md-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-md-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-md-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-md-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-md-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-md-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-md-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-md-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-md-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-md-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-md-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-md-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-md-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-md-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-md-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-md-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-md-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-md-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-md-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-md-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-md-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-md-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-md-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-md-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-md-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-md-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-md-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-md-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-md-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-md-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-md-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-md-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-md-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-md-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-md-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-md-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-md-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-md-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-md-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-md-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-md-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-md-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-md-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-md-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-md-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-md-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-md-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-md-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-md-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-md-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-md-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-md-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-md-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-md-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-md-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-md-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-md-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-md-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-md-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-md-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-md-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 992px){.ant-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{order:24}.ant-col-lg-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{order:23}.ant-col-lg-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{order:22}.ant-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{order:21}.ant-col-lg-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{order:20}.ant-col-lg-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{order:19}.ant-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{order:18}.ant-col-lg-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{order:17}.ant-col-lg-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{order:16}.ant-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{order:15}.ant-col-lg-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{order:14}.ant-col-lg-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{order:13}.ant-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{order:12}.ant-col-lg-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{order:11}.ant-col-lg-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{order:10}.ant-col-lg-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{order:9}.ant-col-lg-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{order:8}.ant-col-lg-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{order:7}.ant-col-lg-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{order:6}.ant-col-lg-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{order:5}.ant-col-lg-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{order:4}.ant-col-lg-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{order:3}.ant-col-lg-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{order:2}.ant-col-lg-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-lg-push-0.ant-col-rtl{right:auto}.ant-col-lg-pull-0.ant-col-rtl{left:auto}.ant-col-lg-offset-0.ant-col-rtl{margin-right:0}.ant-col-lg-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-lg-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-lg-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-lg-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-lg-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-lg-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-lg-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-lg-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-lg-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-lg-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-lg-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-lg-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-lg-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-lg-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-lg-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-lg-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-lg-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-lg-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-lg-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-lg-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-lg-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-lg-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-lg-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-lg-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-lg-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-lg-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-lg-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-lg-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-lg-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-lg-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-lg-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-lg-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-lg-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-lg-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-lg-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-lg-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-lg-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-lg-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-lg-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-lg-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-lg-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-lg-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-lg-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-lg-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-lg-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-lg-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-lg-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-lg-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-lg-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-lg-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-lg-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-lg-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-lg-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-lg-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-lg-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-lg-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-lg-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-lg-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-lg-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-lg-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-lg-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-lg-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-lg-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-lg-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-lg-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-lg-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-lg-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-lg-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-lg-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-lg-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-lg-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-lg-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 1200px){.ant-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{order:24}.ant-col-xl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{order:23}.ant-col-xl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{order:22}.ant-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{order:21}.ant-col-xl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{order:20}.ant-col-xl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{order:19}.ant-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{order:18}.ant-col-xl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{order:17}.ant-col-xl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{order:16}.ant-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{order:15}.ant-col-xl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{order:14}.ant-col-xl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{order:13}.ant-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{order:12}.ant-col-xl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{order:11}.ant-col-xl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{order:10}.ant-col-xl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{order:9}.ant-col-xl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{order:8}.ant-col-xl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{order:7}.ant-col-xl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{order:6}.ant-col-xl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{order:5}.ant-col-xl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{order:4}.ant-col-xl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{order:3}.ant-col-xl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{order:2}.ant-col-xl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xl-push-0.ant-col-rtl{right:auto}.ant-col-xl-pull-0.ant-col-rtl{left:auto}.ant-col-xl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 1600px){.ant-col-xxl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{order:24}.ant-col-xxl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{order:23}.ant-col-xxl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{order:22}.ant-col-xxl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{order:21}.ant-col-xxl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{order:20}.ant-col-xxl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{order:19}.ant-col-xxl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{order:18}.ant-col-xxl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{order:17}.ant-col-xxl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{order:16}.ant-col-xxl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{order:15}.ant-col-xxl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{order:14}.ant-col-xxl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{order:13}.ant-col-xxl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{order:12}.ant-col-xxl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{order:11}.ant-col-xxl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{order:10}.ant-col-xxl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{order:9}.ant-col-xxl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{order:8}.ant-col-xxl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{order:7}.ant-col-xxl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{order:6}.ant-col-xxl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{order:5}.ant-col-xxl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{order:4}.ant-col-xxl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{order:3}.ant-col-xxl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{order:2}.ant-col-xxl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-push-0.ant-col-rtl{right:auto}.ant-col-xxl-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xxl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xxl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xxl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xxl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xxl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xxl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xxl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xxl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xxl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xxl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xxl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xxl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xxl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xxl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xxl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xxl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xxl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xxl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xxl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xxl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xxl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xxl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xxl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xxl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xxl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xxl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xxl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xxl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xxl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xxl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xxl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xxl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xxl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xxl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xxl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xxl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xxl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xxl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xxl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xxl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xxl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xxl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xxl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xxl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xxl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xxl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xxl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xxl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xxl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xxl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xxl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xxl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xxl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xxl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xxl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xxl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xxl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xxl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xxl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xxl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xxl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xxl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xxl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xxl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xxl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xxl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xxl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xxl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xxl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xxl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xxl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xxl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 2000px){.ant-col-xxxl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xxxl-push-24{left:100%}.ant-col-xxxl-pull-24{right:100%}.ant-col-xxxl-offset-24{margin-left:100%}.ant-col-xxxl-order-24{order:24}.ant-col-xxxl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xxxl-push-23{left:95.83333333%}.ant-col-xxxl-pull-23{right:95.83333333%}.ant-col-xxxl-offset-23{margin-left:95.83333333%}.ant-col-xxxl-order-23{order:23}.ant-col-xxxl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xxxl-push-22{left:91.66666667%}.ant-col-xxxl-pull-22{right:91.66666667%}.ant-col-xxxl-offset-22{margin-left:91.66666667%}.ant-col-xxxl-order-22{order:22}.ant-col-xxxl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xxxl-push-21{left:87.5%}.ant-col-xxxl-pull-21{right:87.5%}.ant-col-xxxl-offset-21{margin-left:87.5%}.ant-col-xxxl-order-21{order:21}.ant-col-xxxl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xxxl-push-20{left:83.33333333%}.ant-col-xxxl-pull-20{right:83.33333333%}.ant-col-xxxl-offset-20{margin-left:83.33333333%}.ant-col-xxxl-order-20{order:20}.ant-col-xxxl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xxxl-push-19{left:79.16666667%}.ant-col-xxxl-pull-19{right:79.16666667%}.ant-col-xxxl-offset-19{margin-left:79.16666667%}.ant-col-xxxl-order-19{order:19}.ant-col-xxxl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xxxl-push-18{left:75%}.ant-col-xxxl-pull-18{right:75%}.ant-col-xxxl-offset-18{margin-left:75%}.ant-col-xxxl-order-18{order:18}.ant-col-xxxl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xxxl-push-17{left:70.83333333%}.ant-col-xxxl-pull-17{right:70.83333333%}.ant-col-xxxl-offset-17{margin-left:70.83333333%}.ant-col-xxxl-order-17{order:17}.ant-col-xxxl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xxxl-push-16{left:66.66666667%}.ant-col-xxxl-pull-16{right:66.66666667%}.ant-col-xxxl-offset-16{margin-left:66.66666667%}.ant-col-xxxl-order-16{order:16}.ant-col-xxxl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xxxl-push-15{left:62.5%}.ant-col-xxxl-pull-15{right:62.5%}.ant-col-xxxl-offset-15{margin-left:62.5%}.ant-col-xxxl-order-15{order:15}.ant-col-xxxl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xxxl-push-14{left:58.33333333%}.ant-col-xxxl-pull-14{right:58.33333333%}.ant-col-xxxl-offset-14{margin-left:58.33333333%}.ant-col-xxxl-order-14{order:14}.ant-col-xxxl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xxxl-push-13{left:54.16666667%}.ant-col-xxxl-pull-13{right:54.16666667%}.ant-col-xxxl-offset-13{margin-left:54.16666667%}.ant-col-xxxl-order-13{order:13}.ant-col-xxxl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xxxl-push-12{left:50%}.ant-col-xxxl-pull-12{right:50%}.ant-col-xxxl-offset-12{margin-left:50%}.ant-col-xxxl-order-12{order:12}.ant-col-xxxl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xxxl-push-11{left:45.83333333%}.ant-col-xxxl-pull-11{right:45.83333333%}.ant-col-xxxl-offset-11{margin-left:45.83333333%}.ant-col-xxxl-order-11{order:11}.ant-col-xxxl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xxxl-push-10{left:41.66666667%}.ant-col-xxxl-pull-10{right:41.66666667%}.ant-col-xxxl-offset-10{margin-left:41.66666667%}.ant-col-xxxl-order-10{order:10}.ant-col-xxxl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xxxl-push-9{left:37.5%}.ant-col-xxxl-pull-9{right:37.5%}.ant-col-xxxl-offset-9{margin-left:37.5%}.ant-col-xxxl-order-9{order:9}.ant-col-xxxl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xxxl-push-8{left:33.33333333%}.ant-col-xxxl-pull-8{right:33.33333333%}.ant-col-xxxl-offset-8{margin-left:33.33333333%}.ant-col-xxxl-order-8{order:8}.ant-col-xxxl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xxxl-push-7{left:29.16666667%}.ant-col-xxxl-pull-7{right:29.16666667%}.ant-col-xxxl-offset-7{margin-left:29.16666667%}.ant-col-xxxl-order-7{order:7}.ant-col-xxxl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xxxl-push-6{left:25%}.ant-col-xxxl-pull-6{right:25%}.ant-col-xxxl-offset-6{margin-left:25%}.ant-col-xxxl-order-6{order:6}.ant-col-xxxl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xxxl-push-5{left:20.83333333%}.ant-col-xxxl-pull-5{right:20.83333333%}.ant-col-xxxl-offset-5{margin-left:20.83333333%}.ant-col-xxxl-order-5{order:5}.ant-col-xxxl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xxxl-push-4{left:16.66666667%}.ant-col-xxxl-pull-4{right:16.66666667%}.ant-col-xxxl-offset-4{margin-left:16.66666667%}.ant-col-xxxl-order-4{order:4}.ant-col-xxxl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xxxl-push-3{left:12.5%}.ant-col-xxxl-pull-3{right:12.5%}.ant-col-xxxl-offset-3{margin-left:12.5%}.ant-col-xxxl-order-3{order:3}.ant-col-xxxl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xxxl-push-2{left:8.33333333%}.ant-col-xxxl-pull-2{right:8.33333333%}.ant-col-xxxl-offset-2{margin-left:8.33333333%}.ant-col-xxxl-order-2{order:2}.ant-col-xxxl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xxxl-push-1{left:4.16666667%}.ant-col-xxxl-pull-1{right:4.16666667%}.ant-col-xxxl-offset-1{margin-left:4.16666667%}.ant-col-xxxl-order-1{order:1}.ant-col-xxxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxxl-push-0{left:auto}.ant-col-xxxl-pull-0{right:auto}.ant-col-xxxl-offset-0{margin-left:0}.ant-col-xxxl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xxxl-push-0.ant-col-rtl{right:auto}.ant-col-xxxl-pull-0.ant-col-rtl{left:auto}.ant-col-xxxl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xxxl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xxxl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xxxl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xxxl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xxxl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xxxl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xxxl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xxxl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xxxl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xxxl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xxxl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xxxl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xxxl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xxxl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xxxl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xxxl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xxxl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xxxl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xxxl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xxxl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xxxl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xxxl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xxxl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xxxl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xxxl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xxxl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xxxl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xxxl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xxxl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xxxl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xxxl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xxxl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xxxl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xxxl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xxxl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xxxl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xxxl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xxxl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xxxl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xxxl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xxxl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xxxl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xxxl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xxxl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xxxl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xxxl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xxxl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xxxl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xxxl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xxxl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xxxl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xxxl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xxxl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xxxl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xxxl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xxxl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xxxl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xxxl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xxxl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xxxl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xxxl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xxxl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xxxl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xxxl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xxxl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xxxl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xxxl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xxxl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xxxl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xxxl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xxxl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xxxl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}.ant-row-rtl{direction:rtl}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/carousel/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-carousel{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-carousel .slick-slider{position:relative;display:block;box-sizing:border-box;touch-action:pan-y;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.ant-carousel .slick-list{position:relative;display:block;margin:0;padding:0;overflow:hidden}.ant-carousel .slick-list:focus{outline:none}.ant-carousel .slick-list.dragging{cursor:pointer}.ant-carousel .slick-list .slick-slide{pointer-events:none}.ant-carousel .slick-list .slick-slide input.ant-radio-input,.ant-carousel .slick-list .slick-slide input.ant-checkbox-input{visibility:hidden}.ant-carousel .slick-list .slick-slide.slick-active{pointer-events:auto}.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input,.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input{visibility:visible}.ant-carousel .slick-list .slick-slide>div>div{vertical-align:bottom}.ant-carousel .slick-slider .slick-track,.ant-carousel .slick-slider .slick-list{transform:translateZ(0);touch-action:pan-y}.ant-carousel .slick-track{position:relative;top:0;left:0;display:block}.ant-carousel .slick-track:before,.ant-carousel .slick-track:after{display:table;content:""}.ant-carousel .slick-track:after{clear:both}.slick-loading .ant-carousel .slick-track{visibility:hidden}.ant-carousel .slick-slide{display:none;float:left;height:100%;min-height:1px}.ant-carousel .slick-slide img{display:block}.ant-carousel .slick-slide.slick-loading img{display:none}.ant-carousel .slick-slide.dragging img{pointer-events:none}.ant-carousel .slick-initialized .slick-slide{display:block}.ant-carousel .slick-loading .slick-slide{visibility:hidden}.ant-carousel .slick-vertical .slick-slide{display:block;height:auto}.ant-carousel .slick-arrow.slick-hidden{display:none}.ant-carousel .slick-prev,.ant-carousel .slick-next{position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;color:transparent;font-size:0;line-height:0;background:transparent;border:0;outline:none;cursor:pointer}.ant-carousel .slick-prev:hover,.ant-carousel .slick-next:hover,.ant-carousel .slick-prev:focus,.ant-carousel .slick-next:focus{color:transparent;background:transparent;outline:none}.ant-carousel .slick-prev:hover:before,.ant-carousel .slick-next:hover:before,.ant-carousel .slick-prev:focus:before,.ant-carousel .slick-next:focus:before{opacity:1}.ant-carousel .slick-prev.slick-disabled:before,.ant-carousel .slick-next.slick-disabled:before{opacity:.25}.ant-carousel .slick-prev{left:-25px}.ant-carousel .slick-prev:before{content:"←"}.ant-carousel .slick-next{right:-25px}.ant-carousel .slick-next:before{content:"→"}.ant-carousel .slick-dots{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex!important;justify-content:center;margin-right:15%;margin-left:15%;padding-left:0;list-style:none}.ant-carousel .slick-dots-bottom{bottom:12px}.ant-carousel .slick-dots-top{top:12px;bottom:auto}.ant-carousel .slick-dots li{position:relative;display:inline-block;flex:0 1 auto;box-sizing:content-box;width:16px;height:3px;margin:0 3px;padding:0;text-align:center;text-indent:-999px;vertical-align:top;transition:all .5s}.ant-carousel .slick-dots li button{display:block;width:100%;height:3px;padding:0;color:transparent;font-size:0;background:#141414;border:0;border-radius:1px;outline:none;cursor:pointer;opacity:.3;transition:all .5s}.ant-carousel .slick-dots li button:hover,.ant-carousel .slick-dots li button:focus{opacity:.75}.ant-carousel .slick-dots li.slick-active{width:24px}.ant-carousel .slick-dots li.slick-active button{background:#141414;opacity:1}.ant-carousel .slick-dots li.slick-active:hover,.ant-carousel .slick-dots li.slick-active:focus{opacity:1}.ant-carousel-vertical .slick-dots{top:50%;bottom:auto;flex-direction:column;width:3px;height:auto;margin:0;transform:translateY(-50%)}.ant-carousel-vertical .slick-dots-left{right:auto;left:12px}.ant-carousel-vertical .slick-dots-right{right:12px;left:auto}.ant-carousel-vertical .slick-dots li{width:3px;height:16px;margin:4px 2px;vertical-align:baseline}.ant-carousel-vertical .slick-dots li button{width:3px;height:16px}.ant-carousel-vertical .slick-dots li.slick-active,.ant-carousel-vertical .slick-dots li.slick-active button{width:3px;height:24px}.ant-carousel-rtl{direction:rtl}.ant-carousel-rtl .ant-carousel .slick-track{right:0;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev{right:-25px;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev:before{content:"→"}.ant-carousel-rtl .ant-carousel .slick-next{right:auto;left:-25px}.ant-carousel-rtl .ant-carousel .slick-next:before{content:"←"}.ant-carousel-rtl.ant-carousel .slick-dots{flex-direction:row-reverse}.ant-carousel-rtl.ant-carousel-vertical .slick-dots{flex-direction:column}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/cascader/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-cascader-checkbox{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-inner,.ant-cascader-checkbox:hover .ant-cascader-checkbox-inner,.ant-cascader-checkbox-input:focus+.ant-cascader-checkbox-inner{border-color:#177ddc}.ant-cascader-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #177ddc;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-cascader-checkbox:hover:after,.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox:after{visibility:visible}.ant-cascader-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #434343;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-cascader-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-cascader-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner{background-color:#177ddc;border-color:#177ddc}.ant-cascader-checkbox-disabled{cursor:not-allowed}.ant-cascader-checkbox-disabled.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner:after{border-color:#ffffff4d;animation-name:none}.ant-cascader-checkbox-disabled .ant-cascader-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner{background-color:#ffffff14;border-color:#434343!important}.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner:after{border-color:#ffffff14;border-collapse:separate;animation-name:none}.ant-cascader-checkbox-disabled+span{color:#ffffff4d;cursor:not-allowed}.ant-cascader-checkbox-disabled:hover:after,.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-disabled:after{visibility:hidden}.ant-cascader-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-cascader-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-disabled{cursor:not-allowed}.ant-cascader-checkbox-wrapper+.ant-cascader-checkbox-wrapper{margin-left:8px}.ant-cascader-checkbox+span{padding-right:8px;padding-left:8px}.ant-cascader-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-cascader-checkbox-group-item{margin-right:8px}.ant-cascader-checkbox-group-item:last-child{margin-right:0}.ant-cascader-checkbox-group-item+.ant-cascader-checkbox-group-item{margin-left:0}.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner{background-color:transparent;border-color:#434343}.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#177ddc;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-cascader-checkbox-indeterminate.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner:after{background-color:#ffffff4d;border-color:#ffffff4d}.ant-cascader{width:184px}.ant-cascader-checkbox{top:0;margin-right:8px}.ant-cascader-menus{display:flex;flex-wrap:nowrap;align-items:flex-start}.ant-cascader-menus.ant-cascader-menu-empty .ant-cascader-menu{width:100%;height:auto}.ant-cascader-menu{min-width:111px;height:180px;margin:-4px 0;padding:4px 0;overflow:auto;vertical-align:top;list-style:none;border-right:1px solid #303030;-ms-overflow-style:-ms-autohiding-scrollbar}.ant-cascader-menu-item{display:flex;flex-wrap:nowrap;align-items:center;padding:5px 12px;overflow:hidden;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-cascader-menu-item:hover{background:rgba(255,255,255,.08)}.ant-cascader-menu-item-disabled{color:#ffffff4d;cursor:not-allowed}.ant-cascader-menu-item-disabled:hover{background:transparent}.ant-cascader-menu-empty .ant-cascader-menu-item{color:#ffffff4d;cursor:default;pointer-events:none}.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover{font-weight:600;background-color:#111b26}.ant-cascader-menu-item-content{flex:auto}.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-loading-icon{margin-left:4px;color:#ffffff73;font-size:10px}.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon{color:#ffffff4d}.ant-cascader-menu-item-keyword{color:#a61d24}.ant-cascader-rtl .ant-cascader-menu-item-expand-icon,.ant-cascader-rtl .ant-cascader-menu-item-loading-icon{margin-right:4px;margin-left:0}.ant-cascader-rtl .ant-cascader-checkbox{top:0;margin-right:0;margin-left:8px}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/checkbox/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#177ddc}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #177ddc;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #434343;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#177ddc;border-color:#177ddc}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#ffffff4d;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#ffffff14;border-color:#434343!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#ffffff14;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#ffffff4d;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:transparent;border-color:#434343}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#177ddc;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#ffffff4d;border-color:#ffffff4d}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/collapse/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-collapse{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background-color:#ffffff0a;border:1px solid #434343;border-bottom:0;border-radius:2px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #434343}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 2px 2px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;padding:12px 16px;color:#ffffffd9;line-height:1.5715;cursor:pointer;transition:all .3s,visibility 0s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{display:inline-block;margin-right:12px;font-size:12px;vertical-align:-1px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-left:auto}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{cursor:pointer}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{position:absolute;top:50%;right:16px;left:auto;margin:0;transform:translateY(-50%)}.ant-collapse-content{color:#ffffffd9;background-color:#141414;border-top:1px solid #434343}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-hidden{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 2px 2px}.ant-collapse-borderless{background-color:#ffffff0a;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #434343}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:transparent;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:#ffffff4d;cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{margin-right:0;margin-left:12px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-right:auto;margin-left:0}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}/*!************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/comment/style/index.less ***! + \\************************************************************************************************************************************************************************************************************************************************************/.ant-comment{position:relative;background-color:transparent}.ant-comment-inner{display:flex;padding:16px 0}.ant-comment-avatar{position:relative;flex-shrink:0;margin-right:12px;cursor:pointer}.ant-comment-avatar img{width:32px;height:32px;border-radius:50%}.ant-comment-content{position:relative;flex:1 1 auto;min-width:1px;font-size:14px;word-wrap:break-word}.ant-comment-content-author{display:flex;flex-wrap:wrap;justify-content:flex-start;margin-bottom:4px;font-size:14px}.ant-comment-content-author>a,.ant-comment-content-author>span{padding-right:8px;font-size:12px;line-height:18px}.ant-comment-content-author-name{color:#ffffff73;font-size:14px;transition:color .3s}.ant-comment-content-author-name>*{color:#ffffff73}.ant-comment-content-author-name>*:hover{color:#ffffff73}.ant-comment-content-author-time{color:#ffffff4d;white-space:nowrap;cursor:auto}.ant-comment-content-detail p{margin-bottom:inherit;white-space:pre-wrap}.ant-comment-actions{margin-top:12px;margin-bottom:inherit;padding-left:0}.ant-comment-actions>li{display:inline-block;color:#ffffff73}.ant-comment-actions>li>span{margin-right:10px;color:#ffffff73;font-size:12px;cursor:pointer;transition:color .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-comment-actions>li>span:hover{color:#ffffffa6}.ant-comment-nested{margin-left:44px}.ant-comment-rtl{direction:rtl}.ant-comment-rtl .ant-comment-avatar{margin-right:0;margin-left:12px}.ant-comment-rtl .ant-comment-content-author>a,.ant-comment-rtl .ant-comment-content-author>span{padding-right:0;padding-left:8px}.ant-comment-rtl .ant-comment-actions{padding-right:0}.ant-comment-rtl .ant-comment-actions>li>span{margin-right:0;margin-left:10px}.ant-comment-rtl .ant-comment-nested{margin-right:44px;margin-left:0}/*!********************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/config-provider/style/index.less ***! + \\********************************************************************************************************************************************************************************************************************************************************************//*!*****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/descriptions/style/index.less ***! + \\*****************************************************************************************************************************************************************************************************************************************************************/.ant-descriptions-header{display:flex;align-items:center;margin-bottom:20px}.ant-descriptions-title{flex:auto;overflow:hidden;color:#ffffffd9;font-weight:700;font-size:16px;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-descriptions-extra{margin-left:auto;color:#ffffffd9;font-size:14px}.ant-descriptions-view{width:100%;border-radius:2px}.ant-descriptions-view table{width:100%;table-layout:fixed}.ant-descriptions-row>th,.ant-descriptions-row>td{padding-bottom:16px}.ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-item-label{color:#ffffffd9;font-weight:400;font-size:14px;line-height:1.5715;text-align:start}.ant-descriptions-item-label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-descriptions-item-label.ant-descriptions-item-no-colon:after{content:" "}.ant-descriptions-item-no-label:after{margin:0;content:""}.ant-descriptions-item-content{display:table-cell;flex:1;color:#ffffffd9;font-size:14px;line-height:1.5715;word-break:break-word;overflow-wrap:break-word}.ant-descriptions-item{padding-bottom:0;vertical-align:top}.ant-descriptions-item-container{display:flex}.ant-descriptions-item-container .ant-descriptions-item-label,.ant-descriptions-item-container .ant-descriptions-item-content{display:inline-flex;align-items:baseline}.ant-descriptions-middle .ant-descriptions-row>th,.ant-descriptions-middle .ant-descriptions-row>td{padding-bottom:12px}.ant-descriptions-small .ant-descriptions-row>th,.ant-descriptions-small .ant-descriptions-row>td{padding-bottom:8px}.ant-descriptions-bordered .ant-descriptions-view{border:1px solid #303030}.ant-descriptions-bordered .ant-descriptions-view>table{table-layout:auto;border-collapse:collapse}.ant-descriptions-bordered .ant-descriptions-item-label,.ant-descriptions-bordered .ant-descriptions-item-content{padding:16px 24px;border-right:1px solid #303030}.ant-descriptions-bordered .ant-descriptions-item-label:last-child,.ant-descriptions-bordered .ant-descriptions-item-content:last-child{border-right:none}.ant-descriptions-bordered .ant-descriptions-item-label{background-color:#ffffff0a}.ant-descriptions-bordered .ant-descriptions-item-label:after{display:none}.ant-descriptions-bordered .ant-descriptions-row{border-bottom:1px solid #303030}.ant-descriptions-bordered .ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label,.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content{padding:12px 24px}.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label,.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content{padding:8px 16px}.ant-descriptions-rtl{direction:rtl}.ant-descriptions-rtl .ant-descriptions-item-label:after{margin:0 2px 0 8px}.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label,.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content{border-right:none;border-left:1px solid #303030}.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label:last-child,.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content:last-child{border-left:none}/*!************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/divider/style/index.less ***! + \\************************************************************************************************************************************************************************************************************************************************************/.ant-divider{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";border-top:1px solid rgba(255,255,255,.12)}.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;height:.9em;margin:0 8px;vertical-align:middle;border-top:0;border-left:1px solid rgba(255,255,255,.12)}.ant-divider-horizontal{display:flex;clear:both;width:100%;min-width:100%;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text{display:flex;margin:16px 0;color:#ffffffd9;font-weight:500;font-size:16px;white-space:nowrap;text-align:center;border-top:0;border-top-color:#ffffff1f}.ant-divider-horizontal.ant-divider-with-text:before,.ant-divider-horizontal.ant-divider-with-text:after{position:relative;top:50%;width:50%;border-top:1px solid transparent;border-top-color:inherit;border-bottom:0;transform:translateY(50%);content:""}.ant-divider-horizontal.ant-divider-with-text-left:before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left:after{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 1em}.ant-divider-dashed{background:none;border-color:#ffffff1f;border-style:dashed;border-width:1px 0 0}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after{border-style:dashed none none}.ant-divider-vertical.ant-divider-dashed{border-width:0 0 0 1px}.ant-divider-plain.ant-divider-with-text{color:#ffffffd9;font-weight:400;font-size:14px}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left:before{width:0}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left:after{width:100%}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left .ant-divider-inner-text{padding-left:0}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right:before{width:100%}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right:after{width:0}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right .ant-divider-inner-text{padding-right:0}.ant-divider-rtl{direction:rtl}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left:before{width:95%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left:after{width:5%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right:before{width:5%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right:after{width:95%}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/drawer/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-drawer{position:fixed;z-index:1000;width:0%;height:100%;transition:width 0s ease .3s,height 0s ease .3s}.ant-drawer-content-wrapper{position:absolute;width:100%;height:100%;transition:transform .3s cubic-bezier(.23,1,.32,1),box-shadow .3s cubic-bezier(.23,1,.32,1)}.ant-drawer .ant-drawer-content{width:100%;height:100%}.ant-drawer-left,.ant-drawer-right{top:0;width:0%;height:100%}.ant-drawer-left .ant-drawer-content-wrapper,.ant-drawer-right .ant-drawer-content-wrapper{height:100%}.ant-drawer-left.ant-drawer-open,.ant-drawer-right.ant-drawer-open{width:100%;transition:transform .3s cubic-bezier(.23,1,.32,1)}.ant-drawer-left,.ant-drawer-left .ant-drawer-content-wrapper{left:0}.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:6px 0 16px -8px #00000052,9px 0 28px #0003,12px 0 48px 16px #0000001f}.ant-drawer-right,.ant-drawer-right .ant-drawer-content-wrapper{right:0}.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:-6px 0 16px -8px #00000014,-9px 0 28px #0000000d,-12px 0 48px 16px #00000008}.ant-drawer-right.ant-drawer-open.no-mask{right:1px;transform:translate(1px)}.ant-drawer-top,.ant-drawer-bottom{left:0;width:100%;height:0%}.ant-drawer-top .ant-drawer-content-wrapper,.ant-drawer-bottom .ant-drawer-content-wrapper{width:100%}.ant-drawer-top.ant-drawer-open,.ant-drawer-bottom.ant-drawer-open{height:100%;transition:transform .3s cubic-bezier(.23,1,.32,1)}.ant-drawer-top{top:0}.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 6px 16px -8px #00000052,0 9px 28px #0003,0 12px 48px 16px #0000001f}.ant-drawer-bottom,.ant-drawer-bottom .ant-drawer-content-wrapper{bottom:0}.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 -6px 16px -8px #00000052,0 -9px 28px #0003,0 -12px 48px 16px #0000001f}.ant-drawer-bottom.ant-drawer-open.no-mask{bottom:1px;transform:translateY(1px)}.ant-drawer.ant-drawer-open .ant-drawer-mask{height:100%;opacity:1;transition:none;animation:antdDrawerFadeIn .3s cubic-bezier(.23,1,.32,1);pointer-events:auto}.ant-drawer-title{flex:1;margin:0;color:#ffffffd9;font-weight:500;font-size:16px;line-height:22px}.ant-drawer-content{position:relative;z-index:1;overflow:auto;background-color:#1f1f1f;background-clip:padding-box;border:0}.ant-drawer-close{display:inline-block;margin-right:12px;color:#ffffff73;font-weight:700;font-size:16px;font-style:normal;line-height:1;text-align:center;text-transform:none;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s;text-rendering:auto}.ant-drawer-close:focus,.ant-drawer-close:hover{color:#ffffffbf;text-decoration:none}.ant-drawer-header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:16px 24px;color:#ffffffd9;background:#1f1f1f;border-bottom:1px solid #303030;border-radius:2px 2px 0 0}.ant-drawer-header-title{display:flex;flex:1;align-items:center;justify-content:space-between}.ant-drawer-header-close-only{padding-bottom:0;border:none}.ant-drawer-wrapper-body{display:flex;flex-flow:column nowrap;width:100%;height:100%}.ant-drawer-body{flex-grow:1;padding:24px;overflow:auto;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-drawer-footer{flex-shrink:0;padding:10px 16px;border-top:1px solid #303030}.ant-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0;background-color:#00000073;opacity:0;transition:opacity .3s linear,height 0s ease .3s;pointer-events:none}.ant-drawer .ant-picker-clear{background:#1f1f1f}@keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}.ant-drawer-rtl{direction:rtl}.ant-drawer-rtl .ant-drawer-close{margin-right:0;margin-left:12px}.ant-drawer .ant-picker-clear,.ant-drawer .ant-slider-handle,.ant-drawer .ant-anchor-wrapper,.ant-drawer .ant-collapse-content,.ant-drawer .ant-timeline-item-head,.ant-drawer .ant-card{background-color:#1f1f1f}.ant-drawer .ant-transfer-list-header{background:#1f1f1f;border-bottom:1px solid #3a3a3a}.ant-drawer .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#ffffff14}.ant-drawer tr.ant-table-expanded-row>td,.ant-drawer tr.ant-table-expanded-row:hover>td{background:#272727}.ant-drawer .ant-table.ant-table-small thead>tr>th{background-color:#1f1f1f;border-bottom:1px solid #3a3a3a}.ant-drawer .ant-table{background-color:#1f1f1f}.ant-drawer .ant-table .ant-table-row-expand-icon{border:1px solid #3a3a3a}.ant-drawer .ant-table tfoot>tr>th,.ant-drawer .ant-table tfoot>tr>td{border-bottom:1px solid #3a3a3a}.ant-drawer .ant-table thead>tr>th{background-color:#272727;border-bottom:1px solid #3a3a3a}.ant-drawer .ant-table tbody>tr>td{border-bottom:1px solid #3a3a3a}.ant-drawer .ant-table tbody>tr>td.ant-table-cell-fix-left,.ant-drawer .ant-table tbody>tr>td.ant-table-cell-fix-right{background-color:#1f1f1f}.ant-drawer .ant-table tbody>tr.ant-table-row:hover>td{background:#303030}.ant-drawer .ant-table.ant-table-bordered .ant-table-title{border:1px solid #3a3a3a}.ant-drawer .ant-table.ant-table-bordered thead>tr>th,.ant-drawer .ant-table.ant-table-bordered tbody>tr>td,.ant-drawer .ant-table.ant-table-bordered tfoot>tr>th,.ant-drawer .ant-table.ant-table-bordered tfoot>tr>td{border-right:1px solid #3a3a3a}.ant-drawer .ant-table.ant-table-bordered .ant-table-cell-fix-right-first:after{border-right:1px solid #3a3a3a}.ant-drawer .ant-table.ant-table-bordered table thead>tr:not(:last-child)>th{border-bottom:1px solid #303030}.ant-drawer .ant-table.ant-table-bordered .ant-table-container{border:1px solid #3a3a3a}.ant-drawer .ant-table.ant-table-bordered .ant-table-expanded-row-fixed:after{border-right:1px solid #3a3a3a}.ant-drawer .ant-table.ant-table-bordered .ant-table-footer{border:1px solid #3a3a3a}.ant-drawer .ant-table .ant-table-filter-trigger-container-open{background-color:#525252}.ant-drawer .ant-picker-calendar-full,.ant-drawer .ant-picker-calendar-full .ant-picker-panel{background-color:#1f1f1f}.ant-drawer .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{border-top:2px solid #3a3a3a}.ant-drawer .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{background-color:#1f1f1f;border-bottom:1px solid #1f1f1f}.ant-drawer .ant-badge-count{box-shadow:0 0 0 1px #1f1f1f}.ant-drawer .ant-tree-show-line .ant-tree-switcher{background:#1f1f1f}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/form/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-form-item .ant-upload{background:transparent}.ant-form-item .ant-upload.ant-upload-drag{background:rgba(255,255,255,.04)}.ant-form-item input[type=radio],.ant-form-item input[type=checkbox]{width:14px;height:14px}.ant-form-item .ant-radio-inline,.ant-form-item .ant-checkbox-inline{display:inline-block;margin-left:8px;font-weight:400;vertical-align:middle;cursor:pointer}.ant-form-item .ant-radio-inline:first-child,.ant-form-item .ant-checkbox-inline:first-child{margin-left:0}.ant-form-item .ant-checkbox-vertical,.ant-form-item .ant-radio-vertical{display:block}.ant-form-item .ant-checkbox-vertical+.ant-checkbox-vertical,.ant-form-item .ant-radio-vertical+.ant-radio-vertical{margin-left:0}.ant-form-item .ant-input-number+.ant-form-text{margin-left:8px}.ant-form-item .ant-input-number-handler-wrap{z-index:2}.ant-form-item .ant-select,.ant-form-item .ant-cascader-picker{width:100%}.ant-form-item .ant-picker-calendar-year-select,.ant-form-item .ant-picker-calendar-month-select,.ant-form-item .ant-input-group .ant-select,.ant-form-item .ant-input-group .ant-cascader-picker,.ant-form-item .ant-input-number-group .ant-select,.ant-form-item .ant-input-number-group .ant-cascader-picker{width:auto}.ant-form-inline{display:flex;flex-wrap:wrap}.ant-form-inline .ant-form-item{flex:none;flex-wrap:nowrap;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-label,.ant-form-inline .ant-form-item>.ant-form-item-control{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-item>.ant-form-item-label{flex:none}.ant-form-inline .ant-form-item .ant-form-text,.ant-form-inline .ant-form-item .ant-form-item-has-feedback{display:inline-block}.ant-form-horizontal .ant-form-item-label{flex-grow:0}.ant-form-horizontal .ant-form-item-control{flex:1 1 0;min-width:0}.ant-form-horizontal .ant-form-item-label.ant-col-24+.ant-form-item-control{min-width:unset}.ant-form-vertical .ant-form-item{flex-direction:column}.ant-form-vertical .ant-form-item-label>label{height:auto}.ant-form-vertical .ant-form-item-label,.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-form-vertical .ant-form-item-label>label,.ant-col-24.ant-form-item-label>label,.ant-col-xl-24.ant-form-item-label>label{margin:0}.ant-form-vertical .ant-form-item-label>label:after,.ant-col-24.ant-form-item-label>label:after,.ant-col-xl-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-form-vertical .ant-form-item-label,.ant-form-rtl.ant-col-24.ant-form-item-label,.ant-form-rtl.ant-col-xl-24.ant-form-item-label{text-align:right}@media (max-width: 575px){.ant-form-item .ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-form-item .ant-form-item-label>label{margin:0}.ant-form-item .ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-form-item .ant-form-item-label{text-align:right}.ant-form .ant-form-item{flex-wrap:wrap}.ant-form .ant-form-item .ant-form-item-label,.ant-form .ant-form-item .ant-form-item-control{flex:0 0 100%;max-width:100%}.ant-col-xs-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-xs-24.ant-form-item-label>label{margin:0}.ant-col-xs-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-xs-24.ant-form-item-label{text-align:right}}@media (max-width: 767px){.ant-col-sm-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-sm-24.ant-form-item-label>label{margin:0}.ant-col-sm-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-sm-24.ant-form-item-label{text-align:right}}@media (max-width: 991px){.ant-col-md-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-md-24.ant-form-item-label>label{margin:0}.ant-col-md-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-md-24.ant-form-item-label{text-align:right}}@media (max-width: 1199px){.ant-col-lg-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-lg-24.ant-form-item-label>label{margin:0}.ant-col-lg-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-lg-24.ant-form-item-label{text-align:right}}@media (max-width: 1599px){.ant-col-xl-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-xl-24.ant-form-item-label>label{margin:0}.ant-col-xl-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-xl-24.ant-form-item-label{text-align:right}}.ant-form-item-explain-error{color:#a61d24}.ant-form-item-explain-warning{color:#d89614}.ant-form-item-has-feedback .ant-input{padding-right:24px}.ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:18px}.ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:28px}.ant-form-item-has-feedback .ant-switch{margin:2px 0 4px}.ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-item-has-feedback>.ant-select .ant-select-clear,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-arrow,.ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-clear{right:32px}.ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-selection-selected-value{padding-right:42px}.ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:19px}.ant-form-item-has-feedback .ant-cascader-picker-clear{right:32px}.ant-form-item-has-feedback .ant-picker,.ant-form-item-has-feedback .ant-picker-large{padding-right:29.2px}.ant-form-item-has-feedback .ant-picker-small{padding-right:25.2px}.ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.ant-form-item-has-success.ant-form-item-has-feedback .ant-form-item-children-icon{color:#49aa19;animation-name:diffZoomIn1!important}.ant-form-item-has-warning .ant-form-item-split{color:#d89614}.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover{background-color:transparent;border-color:#d89614}.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused{border-color:#d89614;box-shadow:0 0 0 2px #d8961433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#d89614;box-shadow:0 0 0 2px #d8961433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-input-prefix,.ant-form-item-has-warning .ant-input-number-prefix{color:#d89614}.ant-form-item-has-warning :not(.ant-input-group-addon-disabled).ant-input-group-addon,.ant-form-item-has-warning :not(.ant-input-number-group-addon-disabled).ant-input-number-group-addon{color:#d89614;border-color:#d89614}.ant-form-item-has-warning .has-feedback{color:#d89614}.ant-form-item-has-warning.ant-form-item-has-feedback .ant-form-item-children-icon{color:#d89614;animation-name:diffZoomIn3!important}.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector{background-color:transparent;border-color:#d89614!important}.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector,.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector{border-color:#d89614;box-shadow:0 0 0 2px #d8961433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-input-number,.ant-form-item-has-warning .ant-picker{background-color:transparent;border-color:#d89614}.ant-form-item-has-warning .ant-input-number-focused,.ant-form-item-has-warning .ant-picker-focused,.ant-form-item-has-warning .ant-input-number:focus,.ant-form-item-has-warning .ant-picker:focus{border-color:#d89614;box-shadow:0 0 0 2px #d8961433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-input-number:not([disabled]):hover,.ant-form-item-has-warning .ant-picker:not([disabled]):hover{background-color:transparent;border-color:#d89614}.ant-form-item-has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#d89614;box-shadow:0 0 0 2px #d8961433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-form-item-split{color:#a61d24}.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover{background-color:transparent;border-color:#a61d24}.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused{border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-input-prefix,.ant-form-item-has-error .ant-input-number-prefix{color:#a61d24}.ant-form-item-has-error :not(.ant-input-group-addon-disabled).ant-input-group-addon,.ant-form-item-has-error :not(.ant-input-number-group-addon-disabled).ant-input-number-group-addon{color:#a61d24;border-color:#a61d24}.ant-form-item-has-error .has-feedback{color:#a61d24}.ant-form-item-has-error.ant-form-item-has-feedback .ant-form-item-children-icon{color:#a61d24;animation-name:diffZoomIn2!important}.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector{background-color:transparent;border-color:#a61d24!important}.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector,.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector{border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector,.ant-form-item-has-error .ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:0;box-shadow:none}.ant-form-item-has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#a61d24}.ant-form-item-has-error .ant-input-number,.ant-form-item-has-error .ant-picker{background-color:transparent;border-color:#a61d24}.ant-form-item-has-error .ant-input-number-focused,.ant-form-item-has-error .ant-picker-focused,.ant-form-item-has-error .ant-input-number:focus,.ant-form-item-has-error .ant-picker:focus{border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-input-number:not([disabled]):hover,.ant-form-item-has-error .ant-picker:not([disabled]):hover{background-color:transparent;border-color:#a61d24}.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover{background-color:transparent;border-color:#a61d24}.ant-form-item-has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus{border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-cascader-picker:hover .ant-cascader-picker-label:hover+.ant-cascader-input.ant-input{border-color:#a61d24}.ant-form-item-has-error .ant-cascader-picker:focus .ant-cascader-input{background-color:transparent;border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-transfer-list{border-color:#a61d24}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]){border-color:#434343}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#165996;border-right-width:1px!important}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-radio-button-wrapper{border-color:#a61d24!important}.ant-form-item-has-error .ant-radio-button-wrapper:not(:first-child):before{background-color:#a61d24}.ant-form-item-has-error .ant-mentions{border-color:#a61d24!important}.ant-form-item-has-error .ant-mentions-focused,.ant-form-item-has-error .ant-mentions:focus{border-color:#a61d24;box-shadow:0 0 0 2px #a61d2433;border-right-width:1px!important;outline:0}.ant-form-item-is-validating.ant-form-item-has-feedback .ant-form-item-children-icon{display:inline-block;color:#177ddc}.ant-form{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:#ffffff73;font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #434343}.ant-form label{font-size:14px}.ant-form input[type=search]{box-sizing:border-box}.ant-form input[type=radio],.ant-form input[type=checkbox]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form select[multiple],.ant-form select[size]{height:auto}.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus,.ant-form input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output{display:block;padding-top:15px;color:#ffffffd9;font-size:14px;line-height:1.5715}.ant-form .ant-form-text{display:inline-block;padding-right:8px}.ant-form-small .ant-form-item-label>label{height:24px}.ant-form-small .ant-form-item-control-input{min-height:24px}.ant-form-large .ant-form-item-label>label{height:40px}.ant-form-large .ant-form-item-control-input{min-height:40px}.ant-form-item{box-sizing:border-box;margin:0 0 24px;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";vertical-align:top}.ant-form-item-with-help{margin-bottom:0;transition:none}.ant-form-item-hidden,.ant-form-item-hidden.ant-row{display:none}.ant-form-item-label{display:inline-block;flex-grow:0;overflow:hidden;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item-label-wrap{overflow:unset;line-height:1.3215em;white-space:unset}.ant-form-item-label>label{position:relative;display:inline-flex;align-items:center;max-width:100%;height:32px;color:#ffffffd9;font-size:14px}.ant-form-item-label>label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional):before{display:inline-block;margin-right:4px;color:#a61d24;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.ant-form-hide-required-mark .ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional):before{display:none}.ant-form-item-label>label .ant-form-item-optional{display:inline-block;margin-left:4px;color:#ffffff73}.ant-form-hide-required-mark .ant-form-item-label>label .ant-form-item-optional{display:none}.ant-form-item-label>label .ant-form-item-tooltip{color:#ffffff73;cursor:help;writing-mode:horizontal-tb;-webkit-margin-start:4px;margin-inline-start:4px}.ant-form-item-label>label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-form-item-label>label.ant-form-item-no-colon:after{content:" "}.ant-form-item-control{display:flex;flex-direction:column;flex-grow:1}.ant-form-item-control:first-child:not([class^="ant-col-"]):not([class*=" ant-col-"]){width:100%}.ant-form-item-control-input{position:relative;display:flex;align-items:center;min-height:32px}.ant-form-item-control-input-content{flex:auto;max-width:100%}.ant-form-item-explain,.ant-form-item-extra{clear:both;color:#ffffff73;font-size:14px;line-height:1.5715;transition:color .3s cubic-bezier(.215,.61,.355,1)}.ant-form-item-explain-connected{height:0;min-height:0;opacity:0}.ant-form-item-extra{min-height:24px}.ant-form-item .ant-input-textarea-show-count:after{margin-bottom:-22px}.ant-form-item-with-help .ant-form-item-explain{height:auto;min-height:24px;opacity:1}.ant-show-help{transition:height .3s linear,min-height .3s linear,margin-bottom .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1)}.ant-show-help-leave{min-height:24px}.ant-show-help-leave-active{min-height:0}.ant-show-help-item{overflow:hidden;transition:height .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1)!important}.ant-show-help-item-appear,.ant-show-help-item-enter{transform:translateY(-5px);opacity:0}.ant-show-help-item-appear-active,.ant-show-help-item-enter-active{transform:translateY(0);opacity:1}.ant-show-help-item-leave-active{transform:translateY(-5px)}@keyframes diffZoomIn1{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn2{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn3{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.ant-form-rtl{direction:rtl}.ant-form-rtl .ant-form-item-label{text-align:left}.ant-form-rtl .ant-form-item-label>label.ant-form-item-required:before{margin-right:0;margin-left:4px}.ant-form-rtl .ant-form-item-label>label:after{margin:0 2px 0 8px}.ant-form-rtl .ant-form-item-label>label .ant-form-item-optional{margin-right:4px;margin-left:0}.ant-col-rtl .ant-form-item-control:first-child{width:100%}.ant-form-rtl .ant-form-item-has-feedback .ant-input{padding-right:11px;padding-left:24px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:11px;padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input,.ant-form-rtl .ant-form-item-has-feedback .ant-input-number-affix-wrapper .ant-input-number{padding:0}.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:auto;left:28px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-number{padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-clear,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-selection-selected-value{padding-right:0;padding-left:42px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:0;margin-left:19px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker,.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large{padding-right:11px;padding-left:29.2px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small{padding-right:7px;padding-left:25.2px}.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{right:auto;left:0}.ant-form-rtl.ant-form-inline .ant-form-item{margin-right:0;margin-left:16px}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/icon/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************//*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/image/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-image{position:relative;display:inline-block}.ant-image-img{width:100%;height:auto;vertical-align:middle}.ant-image-img-placeholder{background-color:#f5f5f5;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=);background-repeat:no-repeat;background-position:center center;background-size:30%}.ant-image-mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(0,0,0,.5);cursor:pointer;opacity:0;transition:opacity .3s}.ant-image-mask-info{padding:0 4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-image-mask-info .anticon{-webkit-margin-end:4px;margin-inline-end:4px}.ant-image-mask:hover{opacity:1}.ant-image-placeholder{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview{pointer-events:none;height:100%;text-align:center}.ant-image-preview.ant-zoom-enter,.ant-image-preview.antzoom-appear{transform:none;opacity:0;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-image-preview-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-image-preview-mask-hidden{display:none}.ant-image-preview-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-image-preview-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.ant-image-preview-img{max-width:100%;max-height:100%;vertical-align:middle;transform:scaleZ(1);cursor:grab;transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:auto}.ant-image-preview-img-wrapper{position:absolute;top:0;right:0;bottom:0;left:0;transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s}.ant-image-preview-img-wrapper:before{display:inline-block;width:1px;height:50%;margin-right:-1px;content:""}.ant-image-preview-moving .ant-image-preview-img{cursor:grabbing}.ant-image-preview-moving .ant-image-preview-img-wrapper{transition-duration:0s}.ant-image-preview-wrap{z-index:1080}.ant-image-preview-operations{box-sizing:border-box;margin:0;padding:0;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";position:absolute;top:0;right:0;z-index:1;display:flex;flex-direction:row-reverse;align-items:center;width:100%;color:#ffffffd9;list-style:none;background:rgba(0,0,0,.1);pointer-events:auto}.ant-image-preview-operations-operation{margin-left:12px;padding:12px;cursor:pointer}.ant-image-preview-operations-operation-disabled{color:#ffffff40;pointer-events:none}.ant-image-preview-operations-operation:last-of-type{margin-left:0}.ant-image-preview-operations-icon{font-size:18px}.ant-image-preview-switch-left,.ant-image-preview-switch-right{position:absolute;top:50%;right:10px;z-index:1;display:flex;align-items:center;justify-content:center;width:44px;height:44px;margin-top:-22px;color:#ffffffd9;background:rgba(0,0,0,.1);border-radius:50%;cursor:pointer;pointer-events:auto}.ant-image-preview-switch-left-disabled,.ant-image-preview-switch-right-disabled{color:#ffffff40;cursor:not-allowed}.ant-image-preview-switch-left-disabled>.anticon,.ant-image-preview-switch-right-disabled>.anticon{cursor:not-allowed}.ant-image-preview-switch-left>.anticon,.ant-image-preview-switch-right>.anticon{font-size:18px}.ant-image-preview-switch-left{left:10px}.ant-image-preview-switch-right{right:10px}/*!*****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/input-number/style/index.less ***! + \\*****************************************************************************************************************************************************************************************************************************************************************/.ant-input-number-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;color:#ffffffd9;font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #434343;border-radius:2px;transition:all .3s;position:static;display:inline-flex;width:90px;padding:0;-webkit-padding-start:11px;padding-inline-start:11px}.ant-input-number-affix-wrapper::-moz-placeholder{opacity:1}.ant-input-number-affix-wrapper::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number-affix-wrapper:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-number-affix-wrapper:hover{border-color:#165996;border-right-width:1px!important}.ant-input-number-affix-wrapper:focus,.ant-input-number-affix-wrapper-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-input-number-affix-wrapper-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number-affix-wrapper-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-input-number-affix-wrapper[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number-affix-wrapper[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-input-number-affix-wrapper-borderless,.ant-input-number-affix-wrapper-borderless:hover,.ant-input-number-affix-wrapper-borderless:focus,.ant-input-number-affix-wrapper-borderless-focused,.ant-input-number-affix-wrapper-borderless-disabled,.ant-input-number-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-number-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-number-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-number-affix-wrapper-sm{padding:0 7px}.ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover{border-color:#165996;border-right-width:1px!important;z-index:1}.ant-input-number-affix-wrapper-focused,.ant-input-number-affix-wrapper:focus{z-index:1}.ant-input-number-affix-wrapper-disabled .ant-input-number[disabled]{background:transparent}.ant-input-number-affix-wrapper>div.ant-input-number{width:100%;border:none;outline:none}.ant-input-number-affix-wrapper>div.ant-input-number.ant-input-number-focused{box-shadow:none!important}.ant-input-number-affix-wrapper input.ant-input-number-input{padding:0}.ant-input-number-affix-wrapper:before{width:0;visibility:hidden;content:" "}.ant-input-number-prefix{display:flex;flex:none;align-items:center;-webkit-margin-end:4px;margin-inline-end:4px}.ant-input-number-group-wrapper .ant-input-number-affix-wrapper{width:100%}.ant-input-number{box-sizing:border-box;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;width:100%;min-width:0;color:#ffffffd9;font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;transition:all .3s;display:inline-block;width:90px;margin:0;padding:0;border:1px solid #434343;border-radius:2px}.ant-input-number::-moz-placeholder{opacity:1}.ant-input-number::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number:placeholder-shown{text-overflow:ellipsis}.ant-input-number:focus,.ant-input-number-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-input-number[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-input-number-borderless,.ant-input-number-borderless:hover,.ant-input-number-borderless:focus,.ant-input-number-borderless-focused,.ant-input-number-borderless-disabled,.ant-input-number-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-number{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-number-lg{padding:6.5px 11px;font-size:16px}.ant-input-number-sm{padding:0 7px}.ant-input-number-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-number-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-number-group>[class*=col-]{padding-right:8px}.ant-input-number-group>[class*=col-]:last-child{padding-right:0}.ant-input-number-group-addon,.ant-input-number-group-wrap,.ant-input-number-group>.ant-input-number{display:table-cell}.ant-input-number-group-addon:not(:first-child):not(:last-child),.ant-input-number-group-wrap:not(:first-child):not(:last-child),.ant-input-number-group>.ant-input-number:not(:first-child):not(:last-child){border-radius:0}.ant-input-number-group-addon,.ant-input-number-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-number-group-wrap>*{display:block!important}.ant-input-number-group .ant-input-number{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-number-group .ant-input-number:focus{z-index:1;border-right-width:1px}.ant-input-number-group .ant-input-number:hover{z-index:1;border-right-width:1px}.ant-input-search-with-button .ant-input-number-group .ant-input-number:hover{z-index:0}.ant-input-number-group-addon{position:relative;padding:0 11px;color:#ffffffd9;font-weight:400;font-size:14px;text-align:center;background-color:#ffffff0a;border:1px solid #434343;border-radius:2px;transition:all .3s}.ant-input-number-group-addon .ant-select{margin:-5px -11px}.ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-number-group-addon .ant-select-open .ant-select-selector,.ant-input-number-group-addon .ant-select-focused .ant-select-selector{color:#177ddc}.ant-input-number-group-addon .ant-cascader-picker{margin:-9px -12px;background-color:transparent}.ant-input-number-group-addon .ant-cascader-picker .ant-cascader-input{text-align:left;border:0;box-shadow:none}.ant-input-number-group>.ant-input-number:first-child,.ant-input-number-group-addon:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-number-group>.ant-input-number:first-child .ant-select .ant-select-selector,.ant-input-number-group-addon:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-number-group>.ant-input-number-affix-wrapper:not(:first-child) .ant-input-number{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group>.ant-input-number-affix-wrapper:not(:last-child) .ant-input-number{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-number-group-addon:first-child{border-right:0}.ant-input-number-group-addon:last-child{border-left:0}.ant-input-number-group>.ant-input-number:last-child,.ant-input-number-group-addon:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group>.ant-input-number:last-child .ant-select .ant-select-selector,.ant-input-number-group-addon:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group-lg .ant-input-number,.ant-input-number-group-lg>.ant-input-number-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-number-group-sm .ant-input-number,.ant-input-number-group-sm>.ant-input-number-group-addon{padding:0 7px}.ant-input-number-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-number-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child){border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child),.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group.ant-input-number-group-compact{display:block}.ant-input-number-group.ant-input-number-group-compact:before{display:table;content:""}.ant-input-number-group.ant-input-number-group-compact:after{display:table;clear:both;content:""}.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child),.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-number-group.ant-input-number-group-compact>.ant-input-number:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number:not(:first-child):not(:last-child):focus{z-index:1}.ant-input-number-group.ant-input-number-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-number-group.ant-input-number-group-compact>.ant-input-number-affix-wrapper{display:inline-flex}.ant-input-number-group.ant-input-number-group-compact>.ant-picker-range{display:inline-flex}.ant-input-number-group.ant-input-number-group-compact>*:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-number-group.ant-input-number-group-compact .ant-input-number{float:none}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-input-group-wrapper .ant-input{border-right-width:1px;border-radius:0}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-input-group-wrapper .ant-input:hover{z-index:1}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-input-group-wrapper .ant-input:focus{z-index:1}.ant-input-number-group.ant-input-number-group-compact>.ant-select-focused{z-index:1}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-arrow{z-index:1}.ant-input-number-group.ant-input-number-group-compact>*:first-child,.ant-input-number-group.ant-input-number-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker:first-child .ant-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-number-group.ant-input-number-group-compact>*:last-child,.ant-input-number-group.ant-input-number-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-right-width:1px;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-left:-1px}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper{border-radius:0}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:2px 0 0 2px}.ant-input-number-group-wrapper{display:inline-block;text-align:start;vertical-align:top}.ant-input-number-handler{position:relative;display:block;width:100%;height:50%;overflow:hidden;color:#ffffff73;font-weight:700;line-height:0;text-align:center;border-left:1px solid #434343;transition:all .1s linear}.ant-input-number-handler:active{background:rgba(255,255,255,.08)}.ant-input-number-handler:hover .ant-input-number-handler-up-inner,.ant-input-number-handler:hover .ant-input-number-handler-down-inner{color:#165996}.ant-input-number-handler-up-inner,.ant-input-number-handler-down-inner{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;width:12px;height:12px;color:#ffffff73;line-height:12px;transition:all .1s linear;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number-handler-up-inner>*,.ant-input-number-handler-down-inner>*{line-height:1}.ant-input-number-handler-up-inner svg,.ant-input-number-handler-down-inner svg{display:inline-block}.ant-input-number-handler-up-inner:before,.ant-input-number-handler-down-inner:before{display:none}.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon{display:block}.ant-input-number:hover{border-color:#165996;border-right-width:1px!important}.ant-input-number:hover+.ant-form-item-children-icon{opacity:0;transition:opacity .24s linear .24s}.ant-input-number-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-input-number-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-input-number-disabled .ant-input-number-input{cursor:not-allowed}.ant-input-number-disabled .ant-input-number-handler-wrap,.ant-input-number-readonly .ant-input-number-handler-wrap{display:none}.ant-input-number-input{width:100%;height:30px;padding:0 11px;text-align:left;background-color:transparent;border:0;border-radius:2px;outline:0;transition:all .3s linear;-webkit-appearance:textfield!important;-moz-appearance:textfield!important;appearance:textfield!important}.ant-input-number-input::-moz-placeholder{opacity:1}.ant-input-number-input::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number-input:placeholder-shown{text-overflow:ellipsis}.ant-input-number-input[type=number]::-webkit-inner-spin-button,.ant-input-number-input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;appearance:none}.ant-input-number-lg{padding:0;font-size:16px}.ant-input-number-lg input{height:38px}.ant-input-number-sm{padding:0}.ant-input-number-sm input{height:22px;padding:0 7px}.ant-input-number-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#141414;border-radius:0 2px 2px 0;opacity:0;transition:opacity .24s linear .1s}.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner{display:flex;align-items:center;justify-content:center;min-width:auto;margin-right:0;font-size:7px}.ant-input-number-borderless .ant-input-number-handler-wrap{border-left-width:0}.ant-input-number-handler-wrap:hover .ant-input-number-handler{height:40%}.ant-input-number:hover .ant-input-number-handler-wrap,.ant-input-number-focused .ant-input-number-handler-wrap{opacity:1}.ant-input-number-handler-up{border-top-right-radius:2px;cursor:pointer}.ant-input-number-handler-up-inner{top:50%;margin-top:-5px;text-align:center}.ant-input-number-handler-up:hover{height:60%!important}.ant-input-number-handler-down{top:0;border-top:1px solid #434343;border-bottom-right-radius:2px;cursor:pointer}.ant-input-number-handler-down-inner{top:50%;text-align:center;transform:translateY(-50%)}.ant-input-number-handler-down:hover{height:60%!important}.ant-input-number-borderless .ant-input-number-handler-down{border-top-width:0}.ant-input-number-handler-up-disabled,.ant-input-number-handler-down-disabled{cursor:not-allowed}.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner,.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner{color:#ffffff4d}.ant-input-number-borderless{box-shadow:none}.ant-input-number-out-of-range input{color:#a61d24}.ant-input-number-rtl{direction:rtl}.ant-input-number-rtl .ant-input-number-handler{border-right:1px solid #434343;border-left:0}.ant-input-number-rtl .ant-input-number-handler-wrap{right:auto;left:0}.ant-input-number-rtl.ant-input-number-borderless .ant-input-number-handler-wrap{border-right-width:0}.ant-input-number-rtl .ant-input-number-handler-up{border-top-right-radius:0}.ant-input-number-rtl .ant-input-number-handler-down{border-bottom-right-radius:0}.ant-input-number-rtl .ant-input-number-input{direction:ltr;text-align:right}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/input/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-input-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#ffffffd9;font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #434343;border-radius:2px;transition:all .3s;display:inline-flex}.ant-input-affix-wrapper::-moz-placeholder{opacity:1}.ant-input-affix-wrapper::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-affix-wrapper:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:hover{border-color:#165996;border-right-width:1px!important}.ant-input-rtl .ant-input-affix-wrapper:hover{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-input-rtl .ant-input-affix-wrapper:focus,.ant-input-rtl .ant-input-affix-wrapper-focused{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-input-affix-wrapper[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-input-affix-wrapper-borderless,.ant-input-affix-wrapper-borderless:hover,.ant-input-affix-wrapper-borderless:focus,.ant-input-affix-wrapper-borderless-focused,.ant-input-affix-wrapper-borderless-disabled,.ant-input-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-affix-wrapper-sm{padding:0 7px}.ant-input-affix-wrapper-rtl{direction:rtl}.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:#165996;border-right-width:1px!important;z-index:1}.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-right-width:0;border-left-width:1px!important}.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{z-index:0}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{z-index:1}.ant-input-affix-wrapper-disabled .ant-input[disabled]{background:transparent}.ant-input-affix-wrapper>input.ant-input{padding:0;border:none;outline:none}.ant-input-affix-wrapper>input.ant-input:focus{box-shadow:none!important}.ant-input-affix-wrapper:before{width:0;visibility:hidden;content:" "}.ant-input-prefix,.ant-input-suffix{display:flex;flex:none;align-items:center}.ant-input-show-count-suffix{color:#ffffff73}.ant-input-show-count-has-suffix{margin-right:2px}.ant-input-prefix{margin-right:4px}.ant-input-suffix{margin-left:4px}.anticon.ant-input-clear-icon{margin:0;color:#ffffff4d;font-size:12px;vertical-align:-1px;cursor:pointer;transition:color .3s}.anticon.ant-input-clear-icon:hover{color:#ffffff73}.anticon.ant-input-clear-icon:active{color:#ffffffd9}.anticon.ant-input-clear-icon-hidden{visibility:hidden}.anticon.ant-input-clear-icon-has-suffix{margin:0 4px}.ant-input-affix-wrapper-textarea-with-clear-btn{padding:0!important;border:0!important}.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon{position:absolute;top:8px;right:8px;z-index:1}.ant-input{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#ffffffd9;font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #434343;border-radius:2px;transition:all .3s}.ant-input::-moz-placeholder{opacity:1}.ant-input::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:hover{border-color:#165996;border-right-width:1px!important}.ant-input-rtl .ant-input:hover{border-right-width:0;border-left-width:1px!important}.ant-input:focus,.ant-input-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-input-rtl .ant-input:focus,.ant-input-rtl .ant-input-focused{border-right-width:0;border-left-width:1px!important}.ant-input-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-input[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-input-borderless,.ant-input-borderless:hover,.ant-input-borderless:focus,.ant-input-borderless-focused,.ant-input-borderless-disabled,.ant-input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-lg{padding:6.5px 11px;font-size:16px}.ant-input-sm{padding:0 7px}.ant-input-rtl{direction:rtl}.ant-input-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus{z-index:1;border-right-width:1px}.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-search-with-button .ant-input-group .ant-input:hover{z-index:0}.ant-input-group-addon{position:relative;padding:0 11px;color:#ffffffd9;font-weight:400;font-size:14px;text-align:center;background-color:#ffffff0a;border:1px solid #434343;border-radius:2px;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-group-addon .ant-select-open .ant-select-selector,.ant-input-group-addon .ant-select-focused .ant-select-selector{color:#177ddc}.ant-input-group-addon .ant-cascader-picker{margin:-9px -12px;background-color:transparent}.ant-input-group-addon .ant-cascader-picker .ant-cascader-input{text-align:left;border:0;box-shadow:none}.ant-input-group>.ant-input:first-child,.ant-input-group-addon:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input:first-child .ant-select .ant-select-selector,.ant-input-group-addon:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group>.ant-input:last-child,.ant-input-group-addon:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input:last-child .ant-select .ant-select-selector,.ant-input-group-addon:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:0 7px}.ant-input-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group .ant-input-affix-wrapper:not(:first-child),.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group.ant-input-group-compact{display:block}.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{display:table;clear:both;content:""}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-input-affix-wrapper{display:inline-flex}.ant-input-group.ant-input-group-compact>.ant-picker-range{display:inline-flex}.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select-focused{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-arrow{z-index:1}.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-right-width:1px;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-left:-1px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:2px 0 0 2px}.ant-input-group>.ant-input-rtl:first-child,.ant-input-group-rtl .ant-input-group-addon:first-child{border-radius:0 2px 2px 0}.ant-input-group-rtl .ant-input-group-addon:first-child{border-right:1px solid #434343;border-left:0}.ant-input-group-rtl .ant-input-group-addon:last-child{border-right:0;border-left:1px solid #434343}.ant-input-group-rtl.ant-input-group>.ant-input:last-child,.ant-input-group-rtl.ant-input-group-addon:last-child{border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child){border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-right:0;margin-left:-1px;border-left-width:1px}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-left-width:1px;border-radius:2px 0 0 2px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl+.ant-input-group-wrapper-rtl{margin-right:-1px;margin-left:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:0 2px 2px 0}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-password-icon{color:#ffffff73;cursor:pointer;transition:all .3s}.ant-input-password-icon:hover{color:#ffffffd9}.ant-input[type=color]{height:32px}.ant-input[type=color].ant-input-lg{height:40px}.ant-input[type=color].ant-input-sm{height:24px;padding-top:3px;padding-bottom:3px}.ant-input-textarea-show-count>.ant-input{height:100%}.ant-input-textarea-show-count:after{float:right;color:#ffffff73;white-space:nowrap;content:attr(data-count);pointer-events:none}.ant-input-search .ant-input:hover,.ant-input-search .ant-input:focus{border-color:#165996}.ant-input-search .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-left-color:#165996}.ant-input-search .ant-input-affix-wrapper{border-radius:0}.ant-input-search .ant-input-lg{line-height:1.5713}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child{left:-1px;padding:0;border:0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button{padding-top:0;padding-bottom:0;border-radius:0 2px 2px 0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary){color:#ffffff73}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading:before{top:0;right:0;bottom:0;left:0}.ant-input-search-button{height:32px}.ant-input-search-button:hover,.ant-input-search-button:focus{z-index:1}.ant-input-search-large .ant-input-search-button{height:40px}.ant-input-search-small .ant-input-search-button{height:24px}.ant-input-group-wrapper-rtl,.ant-input-group-rtl{direction:rtl}.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl>input.ant-input{border:none;outline:none}.ant-input-affix-wrapper-rtl .ant-input-prefix{margin:0 0 0 4px}.ant-input-affix-wrapper-rtl .ant-input-suffix{margin:0 4px 0 0}.ant-input-textarea-rtl{direction:rtl}.ant-input-textarea-rtl.ant-input-textarea-show-count:after{text-align:left}.ant-input-affix-wrapper-rtl .ant-input-clear-icon-has-suffix{margin-right:0;margin-left:4px}.ant-input-affix-wrapper-rtl .ant-input-clear-icon{right:auto;left:8px}.ant-input-search-rtl{direction:rtl}.ant-input-search-rtl .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search-rtl .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-right-color:#165996;border-left-color:#434343}.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper:hover,.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper-focused{border-right-color:#165996}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon{right:-1px;left:auto}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon .ant-input-search-button{border-radius:2px 0 0 2px}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ant-input{height:32px}.ant-input-lg{height:40px}.ant-input-sm{height:24px}.ant-input-affix-wrapper>input.ant-input{height:auto}}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/layout/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-layout{display:flex;flex:auto;flex-direction:column;min-height:0;background:#000}.ant-layout,.ant-layout *{box-sizing:border-box}.ant-layout.ant-layout-has-sider{flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{width:0}.ant-layout-header,.ant-layout-footer{flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;color:#ffffffd9;line-height:64px;background:#1f1f1f}.ant-layout-footer{padding:24px 50px;color:#ffffffd9;font-size:14px;background:#000}.ant-layout-content{flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#1f1f1f;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed{width:auto}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#262626;cursor:pointer;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;z-index:1;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#1f1f1f;border-radius:0 2px 2px 0;cursor:pointer;transition:background .3s ease}.ant-layout-sider-zero-width-trigger:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;transition:all .3s;content:""}.ant-layout-sider-zero-width-trigger:hover:after{background:rgba(255,255,255,.1)}.ant-layout-sider-zero-width-trigger-right{left:-36px;border-radius:2px 0 0 2px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:#ffffffd9;background:#fff}.ant-layout-rtl{direction:rtl}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/list/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-list .ant-card{background:transparent}.ant-list{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative}.ant-list *{outline:none}.ant-list-pagination{margin-top:24px;text-align:right}.ant-list-pagination .ant-pagination-options{text-align:left}.ant-list-more{margin-top:12px;text-align:center}.ant-list-more button{padding-right:32px;padding-left:32px}.ant-list-spin{min-height:40px;text-align:center}.ant-list-empty-text{padding:16px;color:#ffffff4d;font-size:14px;text-align:center}.ant-list-items{margin:0;padding:0;list-style:none}.ant-list-item{display:flex;align-items:center;justify-content:space-between;padding:12px 0;color:#ffffffd9}.ant-list-item-meta{display:flex;flex:1;align-items:flex-start;max-width:100%}.ant-list-item-meta-avatar{margin-right:16px}.ant-list-item-meta-content{flex:1 0;width:0;color:#ffffffd9}.ant-list-item-meta-title{margin-bottom:4px;color:#ffffffd9;font-size:14px;line-height:1.5715}.ant-list-item-meta-title>a{color:#ffffffd9;transition:all .3s}.ant-list-item-meta-title>a:hover{color:#177ddc}.ant-list-item-meta-description{color:#ffffff73;font-size:14px;line-height:1.5715}.ant-list-item-action{flex:0 0 auto;margin-left:48px;padding:0;font-size:0;list-style:none}.ant-list-item-action>li{position:relative;display:inline-block;padding:0 8px;color:#ffffff73;font-size:14px;line-height:1.5715;text-align:center}.ant-list-item-action>li:first-child{padding-left:0}.ant-list-item-action-split{position:absolute;top:50%;right:0;width:1px;height:14px;margin-top:-7px;background-color:#303030}.ant-list-header,.ant-list-footer{background:transparent}.ant-list-header,.ant-list-footer{padding-top:12px;padding-bottom:12px}.ant-list-empty{padding:16px 0;color:#ffffff73;font-size:12px;text-align:center}.ant-list-split .ant-list-item{border-bottom:1px solid #303030}.ant-list-split .ant-list-item:last-child{border-bottom:none}.ant-list-split .ant-list-header{border-bottom:1px solid #303030}.ant-list-split.ant-list-empty .ant-list-footer{border-top:1px solid #303030}.ant-list-loading .ant-list-spin-nested-loading{min-height:32px}.ant-list-split.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child{border-bottom:1px solid #303030}.ant-list-lg .ant-list-item{padding:16px 24px}.ant-list-sm .ant-list-item{padding:8px 16px}.ant-list-vertical .ant-list-item{align-items:initial}.ant-list-vertical .ant-list-item-main{display:block;flex:1}.ant-list-vertical .ant-list-item-extra{margin-left:40px}.ant-list-vertical .ant-list-item-meta{margin-bottom:16px}.ant-list-vertical .ant-list-item-meta-title{margin-bottom:12px;color:#ffffffd9;font-size:16px;line-height:24px}.ant-list-vertical .ant-list-item-action{margin-top:16px;margin-left:auto}.ant-list-vertical .ant-list-item-action>li{padding:0 16px}.ant-list-vertical .ant-list-item-action>li:first-child{padding-left:0}.ant-list-grid .ant-col>.ant-list-item{display:block;max-width:100%;margin-bottom:16px;padding-top:0;padding-bottom:0;border-bottom:none}.ant-list-item-no-flex{display:block}.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:right}.ant-list-bordered{border:1px solid #434343;border-radius:2px}.ant-list-bordered .ant-list-header,.ant-list-bordered .ant-list-footer,.ant-list-bordered .ant-list-item{padding-right:24px;padding-left:24px}.ant-list-bordered .ant-list-pagination{margin:16px 24px}.ant-list-bordered.ant-list-sm .ant-list-item,.ant-list-bordered.ant-list-sm .ant-list-header,.ant-list-bordered.ant-list-sm .ant-list-footer{padding:8px 16px}.ant-list-bordered.ant-list-lg .ant-list-item,.ant-list-bordered.ant-list-lg .ant-list-header,.ant-list-bordered.ant-list-lg .ant-list-footer{padding:16px 24px}@media screen and (max-width: 768px){.ant-list-item-action,.ant-list-vertical .ant-list-item-extra{margin-left:24px}}@media screen and (max-width: 576px){.ant-list-item{flex-wrap:wrap}.ant-list-item-action{margin-left:12px}.ant-list-vertical .ant-list-item{flex-wrap:wrap-reverse}.ant-list-vertical .ant-list-item-main{min-width:220px}.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-list-rtl{direction:rtl;text-align:right}.ant-list-rtl .ReactVirtualized__List .ant-list-item{direction:rtl}.ant-list-rtl .ant-list-pagination{text-align:left}.ant-list-rtl .ant-list-item-meta-avatar{margin-right:0;margin-left:16px}.ant-list-rtl .ant-list-item-action{margin-right:48px;margin-left:0}.ant-list.ant-list-rtl .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list-item-action-split{right:auto;left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin-right:40px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-action{margin-right:auto}.ant-list-rtl .ant-list-vertical .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:left}@media screen and (max-width: 768px){.ant-list-rtl .ant-list-item-action,.ant-list-rtl .ant-list-vertical .ant-list-item-extra{margin-right:24px;margin-left:0}}@media screen and (max-width: 576px){.ant-list-rtl .ant-list-item-action{margin-right:22px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/spin/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-spin{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;display:none;color:#177ddc;text-align:center;vertical-align:middle;opacity:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #141414}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none \\ ;width:100%;height:100%;background:#141414;opacity:0;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;opacity:.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:#ffffff73}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#177ddc;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.ant-spin-dot-item:nth-child(1){top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;animation-delay:1.2s}.ant-spin-dot-spin{transform:rotate(45deg);animation:antRotate 1.2s infinite linear}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ant-spin-blur{background:#141414;opacity:.5}}@keyframes antSpinMove{to{opacity:1}}@keyframes antRotate{to{transform:rotate(405deg)}}.ant-spin-rtl{direction:rtl}.ant-spin-rtl .ant-spin-dot-spin{transform:rotate(-45deg);animation-name:antRotateRtl}@keyframes antRotateRtl{to{transform:rotate(-405deg)}}/*!***************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/pagination/style/index.less ***! + \\***************************************************************************************************************************************************************************************************************************************************************/.ant-pagination{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-pagination ul,.ant-pagination ol{margin:0;padding:0;list-style:none}.ant-pagination:after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:" "}.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{display:inline-block;min-width:32px;height:32px;margin-right:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:30px;text-align:center;vertical-align:middle;list-style:none;background-color:transparent;border:1px solid #434343;border-radius:2px;outline:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:#ffffffd9;transition:none}.ant-pagination-item a:hover{text-decoration:none}.ant-pagination-item:hover{border-color:#177ddc;transition:all .3s}.ant-pagination-item:hover a{color:#177ddc}.ant-pagination-item:focus-visible{border-color:#177ddc;transition:all .3s}.ant-pagination-item:focus-visible a{color:#177ddc}.ant-pagination-item-active{font-weight:500;background:transparent;border-color:#177ddc}.ant-pagination-item-active a{color:#177ddc}.ant-pagination-item-active:hover{border-color:#165996}.ant-pagination-item-active:focus-visible{border-color:#165996}.ant-pagination-item-active:hover a{color:#165996}.ant-pagination-item-active:focus-visible a{color:#165996}.ant-pagination-jump-prev,.ant-pagination-jump-next{outline:0}.ant-pagination-jump-prev .ant-pagination-item-container,.ant-pagination-jump-next .ant-pagination-item-container{position:relative}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon{color:#177ddc;font-size:12px;letter-spacing:-1px;opacity:0;transition:all .2s}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:#ffffff4d;font-family:Arial,Helvetica,sans-serif;letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;transition:all .2s}.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,.ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,.ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-prev,.ant-pagination-jump-prev,.ant-pagination-jump-next{margin-right:8px}.ant-pagination-prev,.ant-pagination-next,.ant-pagination-jump-prev,.ant-pagination-jump-next{display:inline-block;min-width:32px;height:32px;color:#ffffffd9;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:2px;cursor:pointer;transition:all .3s}.ant-pagination-prev,.ant-pagination-next{font-family:Arial,Helvetica,sans-serif;outline:0}.ant-pagination-prev button,.ant-pagination-next button{color:#ffffffd9;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-pagination-prev:hover button,.ant-pagination-next:hover button{border-color:#165996}.ant-pagination-prev .ant-pagination-item-link,.ant-pagination-next .ant-pagination-item-link{display:block;width:100%;height:100%;padding:0;font-size:12px;text-align:center;background-color:transparent;border:1px solid #434343;border-radius:2px;outline:none;transition:all .3s}.ant-pagination-prev:focus-visible .ant-pagination-item-link,.ant-pagination-next:focus-visible .ant-pagination-item-link{color:#177ddc;border-color:#177ddc}.ant-pagination-prev:hover .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link{color:#177ddc;border-color:#177ddc}.ant-pagination-disabled,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:hover .ant-pagination-item-link{color:#ffffff4d;border-color:#434343;cursor:not-allowed}.ant-pagination-disabled:focus-visible{cursor:not-allowed}.ant-pagination-disabled:focus-visible .ant-pagination-item-link{color:#ffffff4d;border-color:#434343;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}@media all and (-ms-high-contrast: none){.ant-pagination-options *::-ms-backdrop,.ant-pagination-options{vertical-align:top}}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;margin-left:8px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#ffffffd9;font-size:14px;line-height:1.5715;background-color:transparent;background-image:none;border:1px solid #434343;border-radius:2px;transition:all .3s;width:50px;height:32px;margin:0 8px}.ant-pagination-options-quick-jumper input::-moz-placeholder{opacity:1}.ant-pagination-options-quick-jumper input::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-pagination-options-quick-jumper input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:hover{border-color:#165996;border-right-width:1px!important}.ant-pagination-options-quick-jumper input:focus,.ant-pagination-options-quick-jumper input-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-pagination-options-quick-jumper input-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-pagination-options-quick-jumper input-borderless,.ant-pagination-options-quick-jumper input-borderless:hover,.ant-pagination-options-quick-jumper input-borderless:focus,.ant-pagination-options-quick-jumper input-borderless-focused,.ant-pagination-options-quick-jumper input-borderless-disabled,.ant-pagination-options-quick-jumper input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-pagination-options-quick-jumper input-lg{padding:6.5px 11px;font-size:16px}.ant-pagination-options-quick-jumper input-sm{padding:0 7px}.ant-pagination-simple .ant-pagination-prev,.ant-pagination-simple .ant-pagination-next{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link{height:24px;background-color:transparent;border:0}.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:after,.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:transparent;border:1px solid #434343;border-radius:2px;outline:none;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#177ddc}.ant-pagination-simple .ant-pagination-simple-pager input:focus{border-color:#3c9be8;box-shadow:0 0 0 2px #177ddc33}.ant-pagination-simple .ant-pagination-simple-pager input[disabled]{color:#ffffff4d;background:rgba(255,255,255,.08);border-color:#434343;cursor:not-allowed}.ant-pagination.mini .ant-pagination-total-text,.ant-pagination.mini .ant-pagination-simple-pager{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-prev,.ant-pagination.mini .ant-pagination-next{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link{background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link:after,.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-jump-prev,.ant-pagination.mini .ant-pagination-jump-next{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-size-changer{top:0px}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{padding:0 7px;width:44px;height:24px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:rgba(255,255,255,.08);border-color:#434343;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:#ffffff4d;background:transparent;border:none;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:rgba(255,255,255,.25)}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#000}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{color:#ffffff4d;background:rgba(255,255,255,.08);border-color:#434343;cursor:not-allowed}.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{background:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis{opacity:1}.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager{color:#ffffff4d}@media only screen and (max-width: 992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width: 576px){.ant-pagination-options{display:none}}.ant-pagination-rtl .ant-pagination-total-text,.ant-pagination-rtl .ant-pagination-item,.ant-pagination-rtl .ant-pagination-prev,.ant-pagination-rtl .ant-pagination-jump-prev,.ant-pagination-rtl .ant-pagination-jump-next{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-slash{margin:0 5px 0 10px}.ant-pagination-rtl .ant-pagination-options{margin-right:16px;margin-left:0}.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-size-changer.ant-select{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-quick-jumper{margin-left:0}.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager,.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input{margin-right:0;margin-left:8px}.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options{margin-right:2px;margin-left:0}/*!********************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/locale-provider/style/index.less ***! + \\********************************************************************************************************************************************************************************************************************************************************************//*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/mentions/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-mentions{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";width:100%;min-width:0;color:#ffffffd9;font-size:14px;background-color:transparent;background-image:none;border:1px solid #434343;border-radius:2px;transition:all .3s;position:relative;display:inline-block;height:auto;padding:0;overflow:hidden;line-height:1.5715;white-space:pre-wrap;vertical-align:bottom}.ant-mentions::-moz-placeholder{opacity:1}.ant-mentions::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-mentions:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions:placeholder-shown{text-overflow:ellipsis}.ant-mentions:hover{border-color:#165996;border-right-width:1px!important}.ant-mentions:focus,.ant-mentions-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-mentions-disabled{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-mentions-disabled:hover{border-color:#434343;border-right-width:1px!important}.ant-mentions[disabled]{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-mentions[disabled]:hover{border-color:#434343;border-right-width:1px!important}.ant-mentions-borderless,.ant-mentions-borderless:hover,.ant-mentions-borderless:focus,.ant-mentions-borderless-focused,.ant-mentions-borderless-disabled,.ant-mentions-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-mentions{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-mentions-lg{padding:6.5px 11px;font-size:16px}.ant-mentions-sm{padding:0 7px}.ant-mentions-disabled>textarea{color:#ffffff4d;background-color:#ffffff14;border-color:#434343;box-shadow:none;cursor:not-allowed;opacity:1}.ant-mentions-disabled>textarea:hover{border-color:#434343;border-right-width:1px!important}.ant-mentions-focused{border-color:#177ddc;box-shadow:0 0 0 2px #177ddc33;border-right-width:1px!important;outline:0}.ant-mentions>textarea,.ant-mentions-measure{min-height:30px;margin:0;padding:4px 11px;overflow:inherit;overflow-x:hidden;overflow-y:auto;font-weight:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-variant:inherit;font-size-adjust:inherit;font-stretch:inherit;line-height:inherit;direction:inherit;letter-spacing:inherit;white-space:inherit;text-align:inherit;vertical-align:top;word-wrap:break-word;word-break:inherit;-moz-tab-size:inherit;-o-tab-size:inherit;tab-size:inherit}.ant-mentions>textarea{width:100%;border:none;outline:none;resize:none;background-color:transparent}.ant-mentions>textarea::-moz-placeholder{opacity:1}.ant-mentions>textarea::placeholder{color:#ffffff4d;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-mentions>textarea:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions>textarea:placeholder-shown{text-overflow:ellipsis}.ant-mentions-measure{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;color:transparent;pointer-events:none}.ant-mentions-measure>span{display:inline-block;min-height:1em}.ant-mentions-dropdown{margin:0;padding:0;color:#ffffffd9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;font-size:14px;font-variant:initial;background-color:#1f1f1f;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-mentions-dropdown-hidden{display:none}.ant-mentions-dropdown-menu{max-height:250px;margin-bottom:0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-mentions-dropdown-menu-item{position:relative;display:block;min-width:100px;padding:5px 12px;overflow:hidden;color:#ffffffd9;font-weight:400;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:background .3s ease}.ant-mentions-dropdown-menu-item:hover{background-color:#ffffff14}.ant-mentions-dropdown-menu-item:first-child{border-radius:2px 2px 0 0}.ant-mentions-dropdown-menu-item:last-child{border-radius:0 0 2px 2px}.ant-mentions-dropdown-menu-item-disabled{color:#ffffff4d;cursor:not-allowed}.ant-mentions-dropdown-menu-item-disabled:hover{color:#ffffff4d;background-color:#1f1f1f;cursor:not-allowed}.ant-mentions-dropdown-menu-item-selected{color:#ffffffd9;font-weight:600;background-color:#ffffff0a}.ant-mentions-dropdown-menu-item-active{background-color:#ffffff14}.ant-mentions-rtl{direction:rtl}/*!************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/message/style/index.less ***! + \\************************************************************************************************************************************************************************************************************************************************************/.ant-message{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;top:8px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#1f1f1f;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003;pointer-events:all}.ant-message-success .anticon{color:#49aa19}.ant-message-error .anticon{color:#a61d24}.ant-message-warning .anticon{color:#d89614}.ant-message-info .anticon,.ant-message-loading .anticon{color:#177ddc}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active{animation-name:MessageMoveOut;animation-duration:.3s}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}.ant-message-rtl,.ant-message-rtl span{direction:rtl}.ant-message-rtl .anticon{margin-right:0;margin-left:8px}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/modal/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-modal{box-sizing:border-box;padding:0 0 24px;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";pointer-events:none;position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);margin:0 auto}.ant-modal.ant-zoom-enter,.ant-modal.antzoom-appear{transform:none;opacity:0;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-modal-mask-hidden{display:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-wrap{z-index:1000}.ant-modal-title{margin:0;color:#ffffffd9;font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#1f1f1f;background-clip:padding-box;border:0;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003;pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:#ffffff73;font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:#ffffffbf;text-decoration:none}.ant-modal-header{padding:16px 24px;color:#ffffffd9;background:#1f1f1f;border-bottom:1px solid #303030;border-radius:2px 2px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #303030;border-radius:0 0 2px 2px}.ant-modal-footer .ant-btn+.ant-btn:not(.ant-dropdown-trigger){margin-bottom:0;margin-left:8px}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;padding-bottom:0;text-align:left;vertical-align:middle}@media (max-width: 767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{flex:1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{display:table;clear:both;content:""}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:#ffffffd9;font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:#ffffffd9;font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#a61d24}.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon,.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon{color:#d89614}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#177ddc}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#49aa19}.ant-modal-wrap-rtl{direction:rtl}.ant-modal-wrap-rtl .ant-modal-close{right:initial;left:0}.ant-modal-wrap-rtl .ant-modal-footer{text-align:left}.ant-modal-wrap-rtl .ant-modal-footer .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon{float:right;margin-right:0;margin-left:16px}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-right:38px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-btns{float:left}.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl.ant-modal-centered .ant-modal{text-align:right}.ant-modal .ant-picker-clear,.ant-modal .ant-slider-handle,.ant-modal .ant-anchor-wrapper,.ant-modal .ant-collapse-content,.ant-modal .ant-timeline-item-head,.ant-modal .ant-card{background-color:#1f1f1f}.ant-modal .ant-transfer-list-header{background:#1f1f1f;border-bottom:1px solid #3a3a3a}.ant-modal .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#ffffff14}.ant-modal tr.ant-table-expanded-row>td,.ant-modal tr.ant-table-expanded-row:hover>td{background:#272727}.ant-modal .ant-table.ant-table-small thead>tr>th{background-color:#1f1f1f;border-bottom:1px solid #3a3a3a}.ant-modal .ant-table{background-color:#1f1f1f}.ant-modal .ant-table .ant-table-row-expand-icon{border:1px solid #3a3a3a}.ant-modal .ant-table tfoot>tr>th,.ant-modal .ant-table tfoot>tr>td{border-bottom:1px solid #3a3a3a}.ant-modal .ant-table thead>tr>th{background-color:#272727;border-bottom:1px solid #3a3a3a}.ant-modal .ant-table tbody>tr>td{border-bottom:1px solid #3a3a3a}.ant-modal .ant-table tbody>tr>td.ant-table-cell-fix-left,.ant-modal .ant-table tbody>tr>td.ant-table-cell-fix-right{background-color:#1f1f1f}.ant-modal .ant-table tbody>tr.ant-table-row:hover>td{background:#303030}.ant-modal .ant-table.ant-table-bordered .ant-table-title{border:1px solid #3a3a3a}.ant-modal .ant-table.ant-table-bordered thead>tr>th,.ant-modal .ant-table.ant-table-bordered tbody>tr>td,.ant-modal .ant-table.ant-table-bordered tfoot>tr>th,.ant-modal .ant-table.ant-table-bordered tfoot>tr>td{border-right:1px solid #3a3a3a}.ant-modal .ant-table.ant-table-bordered .ant-table-cell-fix-right-first:after{border-right:1px solid #3a3a3a}.ant-modal .ant-table.ant-table-bordered table thead>tr:not(:last-child)>th{border-bottom:1px solid #303030}.ant-modal .ant-table.ant-table-bordered .ant-table-container{border:1px solid #3a3a3a}.ant-modal .ant-table.ant-table-bordered .ant-table-expanded-row-fixed:after{border-right:1px solid #3a3a3a}.ant-modal .ant-table.ant-table-bordered .ant-table-footer{border:1px solid #3a3a3a}.ant-modal .ant-table .ant-table-filter-trigger-container-open{background-color:#525252}.ant-modal .ant-picker-calendar-full,.ant-modal .ant-picker-calendar-full .ant-picker-panel{background-color:#1f1f1f}.ant-modal .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{border-top:2px solid #3a3a3a}.ant-modal .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{background-color:#1f1f1f;border-bottom:1px solid #1f1f1f}.ant-modal .ant-badge-count{box-shadow:0 0 0 1px #1f1f1f}.ant-modal .ant-tree-show-line .ant-tree-switcher{background:#1f1f1f}/*!*****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/notification/style/index.less ***! + \\*****************************************************************************************************************************************************************************************************************************************************************/.ant-notification .ant-picker-clear,.ant-notification .ant-slider-handle,.ant-notification .ant-anchor-wrapper,.ant-notification .ant-collapse-content,.ant-notification .ant-timeline-item-head,.ant-notification .ant-card{background-color:#1f1f1f}.ant-notification .ant-transfer-list-header{background:#1f1f1f;border-bottom:1px solid #3a3a3a}.ant-notification .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#ffffff14}.ant-notification tr.ant-table-expanded-row>td,.ant-notification tr.ant-table-expanded-row:hover>td{background:#272727}.ant-notification .ant-table.ant-table-small thead>tr>th{background-color:#1f1f1f;border-bottom:1px solid #3a3a3a}.ant-notification .ant-table{background-color:#1f1f1f}.ant-notification .ant-table .ant-table-row-expand-icon{border:1px solid #3a3a3a}.ant-notification .ant-table tfoot>tr>th,.ant-notification .ant-table tfoot>tr>td{border-bottom:1px solid #3a3a3a}.ant-notification .ant-table thead>tr>th{background-color:#272727;border-bottom:1px solid #3a3a3a}.ant-notification .ant-table tbody>tr>td{border-bottom:1px solid #3a3a3a}.ant-notification .ant-table tbody>tr>td.ant-table-cell-fix-left,.ant-notification .ant-table tbody>tr>td.ant-table-cell-fix-right{background-color:#1f1f1f}.ant-notification .ant-table tbody>tr.ant-table-row:hover>td{background:#303030}.ant-notification .ant-table.ant-table-bordered .ant-table-title{border:1px solid #3a3a3a}.ant-notification .ant-table.ant-table-bordered thead>tr>th,.ant-notification .ant-table.ant-table-bordered tbody>tr>td,.ant-notification .ant-table.ant-table-bordered tfoot>tr>th,.ant-notification .ant-table.ant-table-bordered tfoot>tr>td{border-right:1px solid #3a3a3a}.ant-notification .ant-table.ant-table-bordered .ant-table-cell-fix-right-first:after{border-right:1px solid #3a3a3a}.ant-notification .ant-table.ant-table-bordered table thead>tr:not(:last-child)>th{border-bottom:1px solid #303030}.ant-notification .ant-table.ant-table-bordered .ant-table-container{border:1px solid #3a3a3a}.ant-notification .ant-table.ant-table-bordered .ant-table-expanded-row-fixed:after{border-right:1px solid #3a3a3a}.ant-notification .ant-table.ant-table-bordered .ant-table-footer{border:1px solid #3a3a3a}.ant-notification .ant-table .ant-table-filter-trigger-container-open{background-color:#525252}.ant-notification .ant-picker-calendar-full,.ant-notification .ant-picker-calendar-full .ant-picker-panel{background-color:#1f1f1f}.ant-notification .ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{border-top:2px solid #3a3a3a}.ant-notification .ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{background-color:#1f1f1f;border-bottom:1px solid #1f1f1f}.ant-notification .ant-badge-count{box-shadow:0 0 0 1px #1f1f1f}.ant-notification .ant-tree-show-line .ant-tree-switcher{background:#1f1f1f}.ant-notification{box-sizing:border-box;margin:0 24px 0 0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;z-index:1010}.ant-notification-topLeft,.ant-notification-bottomLeft{margin-right:0;margin-left:24px}.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-hook-holder{position:relative}.ant-notification-notice{position:relative;width:384px;max-width:calc(100vw - 48px);margin-bottom:16px;margin-left:auto;padding:16px 24px;overflow:hidden;line-height:1.5715;word-wrap:break-word;background:#1f1f1f;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-notification-topLeft .ant-notification-notice,.ant-notification-bottomLeft .ant-notification-notice{margin-right:auto;margin-left:0}.ant-notification-notice-message{margin-bottom:8px;color:#ffffffd9;font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(264px - 100%);max-width:4px;background-color:transparent;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin:before{display:block;content:""}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#49aa19}.anticon.ant-notification-notice-icon-info{color:#177ddc}.anticon.ant-notification-notice-icon-warning{color:#d89614}.anticon.ant-notification-notice-icon-error{color:#a61d24}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:#ffffff73;outline:none}.ant-notification-notice-close:hover{color:#ffffffd9}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both}.ant-notification-fade-enter,.ant-notification-fade-appear{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;opacity:0;animation-play-state:paused}.ant-notification-fade-leave{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;animation-duration:.2s;animation-play-state:paused}.ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:NotificationFadeIn;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{animation-name:NotificationFadeOut;animation-play-state:running}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}.ant-notification-rtl{direction:rtl}.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message{padding-right:0;padding-left:24px}.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message,.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description{margin-right:48px;margin-left:0}.ant-notification-rtl .ant-notification-notice-icon{margin-right:4px;margin-left:0}.ant-notification-rtl .ant-notification-notice-close{right:auto;left:22px}.ant-notification-rtl .ant-notification-notice-btn{float:left}/*!****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/page-header/style/index.less ***! + \\****************************************************************************************************************************************************************************************************************************************************************/.ant-page-header{box-sizing:border-box;margin:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;padding:16px 24px;background-color:#141414}.ant-page-header-ghost{background-color:transparent}.ant-page-header.has-breadcrumb{padding-top:12px}.ant-page-header.has-footer{padding-bottom:0}.ant-page-header-back{margin-right:16px;font-size:16px;line-height:1}.ant-page-header-back-button{color:#177ddc;text-decoration:none;outline:none;transition:color .3s;color:inherit;cursor:pointer}.ant-page-header-back-button:focus,.ant-page-header-back-button:hover{color:#165996}.ant-page-header-back-button:active{color:#388ed3}.ant-page-header .ant-divider-vertical{height:14px;margin:0 12px;vertical-align:middle}.ant-breadcrumb+.ant-page-header-heading{margin-top:8px}.ant-page-header-heading{display:flex;justify-content:space-between}.ant-page-header-heading-left{display:flex;align-items:center;margin:4px 0;overflow:hidden}.ant-page-header-heading-title{margin-right:12px;margin-bottom:0;color:#ffffffd9;font-weight:600;font-size:20px;line-height:32px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading .ant-avatar{margin-right:12px}.ant-page-header-heading-sub-title{margin-right:12px;color:#ffffff73;font-size:14px;line-height:1.5715;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading-extra{margin:4px 0;white-space:nowrap}.ant-page-header-heading-extra>*{margin-left:12px;white-space:unset}.ant-page-header-heading-extra>*:first-child{margin-left:0}.ant-page-header-content{padding-top:12px}.ant-page-header-footer{margin-top:16px}.ant-page-header-footer .ant-tabs>.ant-tabs-nav{margin:0}.ant-page-header-footer .ant-tabs>.ant-tabs-nav:before{border:none}.ant-page-header-footer .ant-tabs .ant-tabs-tab{padding-top:8px;padding-bottom:8px;font-size:16px}.ant-page-header-compact .ant-page-header-heading{flex-wrap:wrap}.ant-page-header-rtl{direction:rtl}.ant-page-header-rtl .ant-page-header-back{float:right;margin-right:0;margin-left:16px}.ant-page-header-rtl .ant-page-header-heading-title,.ant-page-header-rtl .ant-page-header-heading .ant-avatar{margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-sub-title{float:right;margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-tags{float:right}.ant-page-header-rtl .ant-page-header-heading-extra{float:left}.ant-page-header-rtl .ant-page-header-heading-extra>*{margin-right:12px;margin-left:0}.ant-page-header-rtl .ant-page-header-heading-extra>*:first-child{margin-right:0}.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav{float:right}/*!************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/popover/style/index.less ***! + \\************************************************************************************************************************************************************************************************************************************************************/.ant-popover{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:0;left:0;z-index:1030;font-weight:400;white-space:normal;text-align:left;cursor:auto;-webkit-user-select:text;-moz-user-select:text;user-select:text}.ant-popover:after{position:absolute;background:rgba(255,255,255,.01);content:""}.ant-popover-hidden{display:none}.ant-popover-placement-top,.ant-popover-placement-topLeft,.ant-popover-placement-topRight{padding-bottom:10px}.ant-popover-placement-right,.ant-popover-placement-rightTop,.ant-popover-placement-rightBottom{padding-left:10px}.ant-popover-placement-bottom,.ant-popover-placement-bottomLeft,.ant-popover-placement-bottomRight{padding-top:10px}.ant-popover-placement-left,.ant-popover-placement-leftTop,.ant-popover-placement-leftBottom{padding-right:10px}.ant-popover-inner{background-color:#1f1f1f;background-clip:padding-box;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003;box-shadow:0 0 8px #00000073 \\ }@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ant-popover-inner{box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}}.ant-popover-title{min-width:177px;min-height:32px;margin:0;padding:5px 16px 4px;color:#ffffffd9;font-weight:500;border-bottom:1px solid #303030}.ant-popover-inner-content{padding:12px 16px;color:#ffffffd9}.ant-popover-message{position:relative;padding:4px 0 12px;color:#ffffffd9;font-size:14px}.ant-popover-message>.anticon{position:absolute;top:8.0005px;color:#d89614;font-size:14px}.ant-popover-message-title{padding-left:22px}.ant-popover-buttons{margin-bottom:4px;text-align:right}.ant-popover-buttons button{margin-left:8px}.ant-popover-arrow{position:absolute;display:block;width:8.48528137px;height:8.48528137px;overflow:hidden;background:transparent;pointer-events:none}.ant-popover-arrow-content{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:6px;height:6px;margin:auto;background-color:#1f1f1f;content:"";pointer-events:auto}.ant-popover-placement-top .ant-popover-arrow,.ant-popover-placement-topLeft .ant-popover-arrow,.ant-popover-placement-topRight .ant-popover-arrow{bottom:1.51471863px}.ant-popover-placement-top .ant-popover-arrow-content,.ant-popover-placement-topLeft .ant-popover-arrow-content,.ant-popover-placement-topRight .ant-popover-arrow-content{box-shadow:3px 3px 7px #00000012;transform:translateY(-4.24264069px) rotate(45deg)}.ant-popover-placement-top .ant-popover-arrow{left:50%;transform:translate(-50%)}.ant-popover-placement-topLeft .ant-popover-arrow{left:16px}.ant-popover-placement-topRight .ant-popover-arrow{right:16px}.ant-popover-placement-right .ant-popover-arrow,.ant-popover-placement-rightTop .ant-popover-arrow,.ant-popover-placement-rightBottom .ant-popover-arrow{left:1.51471863px}.ant-popover-placement-right .ant-popover-arrow-content,.ant-popover-placement-rightTop .ant-popover-arrow-content,.ant-popover-placement-rightBottom .ant-popover-arrow-content{box-shadow:-3px 3px 7px #00000012;transform:translate(4.24264069px) rotate(45deg)}.ant-popover-placement-right .ant-popover-arrow{top:50%;transform:translateY(-50%)}.ant-popover-placement-rightTop .ant-popover-arrow{top:12px}.ant-popover-placement-rightBottom .ant-popover-arrow{bottom:12px}.ant-popover-placement-bottom .ant-popover-arrow,.ant-popover-placement-bottomLeft .ant-popover-arrow,.ant-popover-placement-bottomRight .ant-popover-arrow{top:1.51471863px}.ant-popover-placement-bottom .ant-popover-arrow-content,.ant-popover-placement-bottomLeft .ant-popover-arrow-content,.ant-popover-placement-bottomRight .ant-popover-arrow-content{box-shadow:-2px -2px 5px #0000000f;transform:translateY(4.24264069px) rotate(45deg)}.ant-popover-placement-bottom .ant-popover-arrow{left:50%;transform:translate(-50%)}.ant-popover-placement-bottomLeft .ant-popover-arrow{left:16px}.ant-popover-placement-bottomRight .ant-popover-arrow{right:16px}.ant-popover-placement-left .ant-popover-arrow,.ant-popover-placement-leftTop .ant-popover-arrow,.ant-popover-placement-leftBottom .ant-popover-arrow{right:1.51471863px}.ant-popover-placement-left .ant-popover-arrow-content,.ant-popover-placement-leftTop .ant-popover-arrow-content,.ant-popover-placement-leftBottom .ant-popover-arrow-content{box-shadow:3px -3px 7px #00000012;transform:translate(-4.24264069px) rotate(45deg)}.ant-popover-placement-left .ant-popover-arrow{top:50%;transform:translateY(-50%)}.ant-popover-placement-leftTop .ant-popover-arrow{top:12px}.ant-popover-placement-leftBottom .ant-popover-arrow{bottom:12px}.ant-popover-pink .ant-popover-inner,.ant-popover-pink .ant-popover-arrow-content,.ant-popover-magenta .ant-popover-inner,.ant-popover-magenta .ant-popover-arrow-content{background-color:#cb2b83}.ant-popover-red .ant-popover-inner,.ant-popover-red .ant-popover-arrow-content{background-color:#d32029}.ant-popover-volcano .ant-popover-inner,.ant-popover-volcano .ant-popover-arrow-content{background-color:#d84a1b}.ant-popover-orange .ant-popover-inner,.ant-popover-orange .ant-popover-arrow-content{background-color:#d87a16}.ant-popover-yellow .ant-popover-inner,.ant-popover-yellow .ant-popover-arrow-content{background-color:#d8bd14}.ant-popover-gold .ant-popover-inner,.ant-popover-gold .ant-popover-arrow-content{background-color:#d89614}.ant-popover-cyan .ant-popover-inner,.ant-popover-cyan .ant-popover-arrow-content{background-color:#13a8a8}.ant-popover-lime .ant-popover-inner,.ant-popover-lime .ant-popover-arrow-content{background-color:#8bbb11}.ant-popover-green .ant-popover-inner,.ant-popover-green .ant-popover-arrow-content{background-color:#49aa19}.ant-popover-blue .ant-popover-inner,.ant-popover-blue .ant-popover-arrow-content{background-color:#177ddc}.ant-popover-geekblue .ant-popover-inner,.ant-popover-geekblue .ant-popover-arrow-content{background-color:#2b4acb}.ant-popover-purple .ant-popover-inner,.ant-popover-purple .ant-popover-arrow-content{background-color:#642ab5}.ant-popover-rtl{direction:rtl;text-align:right}.ant-popover-rtl .ant-popover-message-title{padding-right:22px;padding-left:16px}.ant-popover-rtl .ant-popover-buttons{text-align:left}.ant-popover-rtl .ant-popover-buttons button{margin-right:8px;margin-left:0}/*!***************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/popconfirm/style/index.less ***! + \\***************************************************************************************************************************************************************************************************************************************************************/.ant-popconfirm{z-index:1060}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/progress/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-progress{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-progress-line{position:relative;width:100%;font-size:14px}.ant-progress-steps{display:inline-block}.ant-progress-steps-outer{display:flex;flex-direction:row;align-items:center}.ant-progress-steps-item{flex-shrink:0;min-width:2px;margin-right:2px;background:rgba(255,255,255,.08);transition:all .3s}.ant-progress-steps-item-active{background:#177ddc}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px}.ant-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ant-progress-show-info .ant-progress-outer{margin-right:calc(-2em - 8px);padding-right:calc(2em + 8px)}.ant-progress-inner{position:relative;display:inline-block;width:100%;overflow:hidden;vertical-align:middle;background-color:#ffffff14;border-radius:100px}.ant-progress-circle-trail{stroke:#ffffff14}.ant-progress-circle-path{animation:ant-progress-appear .3s}.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#177ddc}.ant-progress-success-bg,.ant-progress-bg{position:relative;background-color:#177ddc;border-radius:100px;transition:all .4s cubic-bezier(.08,.82,.17,1) 0s}.ant-progress-success-bg{position:absolute;top:0;left:0;background-color:#49aa19}.ant-progress-text{display:inline-block;width:2em;margin-left:8px;color:#ffffffd9;font-size:1em;line-height:1;white-space:nowrap;text-align:left;vertical-align:middle;word-break:normal}.ant-progress-text .anticon{font-size:14px}.ant-progress-status-active .ant-progress-bg:before{position:absolute;top:0;right:0;bottom:0;left:0;background:#141414;border-radius:10px;opacity:0;animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;content:""}.ant-progress-status-exception .ant-progress-bg{background-color:#a61d24}.ant-progress-status-exception .ant-progress-text{color:#a61d24}.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#a61d24}.ant-progress-status-success .ant-progress-bg{background-color:#49aa19}.ant-progress-status-success .ant-progress-text{color:#49aa19}.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#49aa19}.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:transparent}.ant-progress-circle .ant-progress-text{position:absolute;top:50%;left:50%;width:100%;margin:0;padding:0;color:#ffffffd9;font-size:1em;line-height:1;white-space:normal;text-align:center;transform:translate(-50%,-50%)}.ant-progress-circle .ant-progress-text .anticon{font-size:1.16666667em}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#a61d24}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#49aa19}@keyframes ant-progress-active{0%{transform:translate(-100%) scaleX(0);opacity:.1}20%{transform:translate(-100%) scaleX(0);opacity:.5}to{transform:translate(0) scaleX(1);opacity:0}}.ant-progress-rtl{direction:rtl}.ant-progress-rtl.ant-progress-show-info .ant-progress-outer{margin-right:0;margin-left:calc(-2em - 8px);padding-right:0;padding-left:calc(2em + 8px)}.ant-progress-rtl .ant-progress-success-bg{right:0;left:auto}.ant-progress-rtl.ant-progress-line .ant-progress-text,.ant-progress-rtl.ant-progress-steps .ant-progress-text{margin-right:8px;margin-left:0;text-align:right}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/rate/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-rate{box-sizing:border-box;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";display:inline-block;margin:0;padding:0;color:#d8bd14;font-size:20px;line-height:unset;list-style:none;outline:none}.ant-rate-disabled .ant-rate-star{cursor:default}.ant-rate-disabled .ant-rate-star:hover{transform:scale(1)}.ant-rate-star{position:relative;display:inline-block;color:inherit;cursor:pointer}.ant-rate-star:not(:last-child){margin-right:8px}.ant-rate-star>div{transition:all .3s,outline 0s}.ant-rate-star>div:hover{transform:scale(1.1)}.ant-rate-star>div:focus{outline:0}.ant-rate-star>div:focus-visible{outline:1px dashed #d8bd14;transform:scale(1.1)}.ant-rate-star-first,.ant-rate-star-second{color:#ffffff1f;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-rate-star-first .anticon,.ant-rate-star-second .anticon{vertical-align:middle}.ant-rate-star-first{position:absolute;top:0;left:0;width:50%;height:100%;overflow:hidden;opacity:0}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-half .ant-rate-star-second{opacity:1}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-full .ant-rate-star-second{color:inherit}.ant-rate-text{display:inline-block;margin:0 8px;font-size:14px}.ant-rate-rtl{direction:rtl}.ant-rate-rtl .ant-rate-star:not(:last-child){margin-right:0;margin-left:8px}.ant-rate-rtl .ant-rate-star-first{right:0;left:auto}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/result/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-result{padding:48px 32px}.ant-result-success .ant-result-icon>.anticon{color:#49aa19}.ant-result-error .ant-result-icon>.anticon{color:#a61d24}.ant-result-info .ant-result-icon>.anticon{color:#177ddc}.ant-result-warning .ant-result-icon>.anticon{color:#d89614}.ant-result-image{width:250px;height:295px;margin:auto}.ant-result-icon{margin-bottom:24px;text-align:center}.ant-result-icon>.anticon{font-size:72px}.ant-result-title{color:#ffffffd9;font-size:24px;line-height:1.8;text-align:center}.ant-result-subtitle{color:#ffffff73;font-size:14px;line-height:1.6;text-align:center}.ant-result-extra{margin:24px 0 0;text-align:center}.ant-result-extra>*{margin-right:8px}.ant-result-extra>*:last-child{margin-right:0}.ant-result-content{margin-top:24px;padding:24px 40px;background-color:#ffffff0a}.ant-result-rtl{direction:rtl}.ant-result-rtl .ant-result-extra>*{margin-right:0;margin-left:8px}.ant-result-rtl .ant-result-extra>*:last-child{margin-left:0}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/skeleton/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-skeleton{display:table;width:100%}.ant-skeleton-header{display:table-cell;padding-right:16px;vertical-align:top}.ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-content{display:table-cell;width:100%;vertical-align:top}.ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;margin-top:16px;background:rgba(190,190,190,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:24px}.ant-skeleton-content .ant-skeleton-paragraph{padding:0}.ant-skeleton-content .ant-skeleton-paragraph>li{width:100%;height:16px;list-style:none;background:rgba(190,190,190,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%}.ant-skeleton-content .ant-skeleton-paragraph>li+li{margin-top:16px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-top:12px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:28px}.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph>li{border-radius:100px}.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li{background:linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(255,255,255,.16) 37%,rgba(190,190,190,.2) 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-button,.ant-skeleton.ant-skeleton-active .ant-skeleton-input,.ant-skeleton.ant-skeleton-active .ant-skeleton-image{background:linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(255,255,255,.16) 37%,rgba(190,190,190,.2) 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton.ant-skeleton-block,.ant-skeleton.ant-skeleton-block .ant-skeleton-button{width:100%}.ant-skeleton-element{display:inline-block;width:auto}.ant-skeleton-element .ant-skeleton-button{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);border-radius:2px;width:64px;min-width:64px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle{width:32px;min-width:32px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round{border-radius:32px}.ant-skeleton-element .ant-skeleton-button-lg{width:80px;min-width:80px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle{width:40px;min-width:40px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round{border-radius:40px}.ant-skeleton-element .ant-skeleton-button-sm{width:48px;min-width:48px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle{width:24px;min-width:24px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round{border-radius:24px}.ant-skeleton-element .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-input{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:100%;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-input-lg{width:100%;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-input-sm{width:100%;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-image{display:flex;align-items:center;justify-content:center;vertical-align:top;background:rgba(190,190,190,.2);width:96px;height:96px;line-height:96px}.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-image-path{fill:#bfbfbf}.ant-skeleton-element .ant-skeleton-image-svg{width:48px;height:48px;line-height:48px;max-width:192px;max-height:192px}.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle{border-radius:50%}@keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.ant-skeleton-rtl{direction:rtl}.ant-skeleton-rtl .ant-skeleton-header{padding-right:0;padding-left:16px}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li{animation-name:ant-skeleton-loading-rtl}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar{animation-name:ant-skeleton-loading-rtl}@keyframes ant-skeleton-loading-rtl{0%{background-position:0% 50%}to{background-position:100% 50%}}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/slider/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-slider{box-sizing:border-box;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;height:12px;margin:10px 6px;padding:4px 0;cursor:pointer;touch-action:none}.ant-slider-vertical{width:12px;height:100%;margin:6px 10px;padding:0 4px}.ant-slider-vertical .ant-slider-rail{width:4px;height:100%}.ant-slider-vertical .ant-slider-track{width:4px}.ant-slider-vertical .ant-slider-handle{margin-top:-6px;margin-left:-5px}.ant-slider-vertical .ant-slider-mark{top:0;left:12px;width:18px;height:100%}.ant-slider-vertical .ant-slider-mark-text{left:4px;white-space:nowrap}.ant-slider-vertical .ant-slider-step{width:4px;height:100%}.ant-slider-vertical .ant-slider-dot{top:auto;left:2px;margin-bottom:-4px}.ant-slider-tooltip .ant-tooltip-inner{min-width:unset}.ant-slider-rtl.ant-slider-vertical .ant-slider-handle{margin-right:-5px;margin-left:0}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark{right:12px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text{right:4px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-dot{right:2px;left:auto}.ant-slider-with-marks{margin-bottom:28px}.ant-slider-rail{position:absolute;width:100%;height:4px;background-color:#262626;border-radius:2px;transition:background-color .3s}.ant-slider-track{position:absolute;height:4px;background-color:#153450;border-radius:2px;transition:background-color .3s}.ant-slider-handle{position:absolute;width:14px;height:14px;margin-top:-5px;background-color:#141414;border:solid 2px #153450;border-radius:50%;box-shadow:0;cursor:pointer;transition:border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28)}.ant-slider-handle-dragging.ant-slider-handle-dragging.ant-slider-handle-dragging{border-color:#4697e3;box-shadow:0 0 0 5px #177ddc1f}.ant-slider-handle:focus{border-color:#4697e3;outline:none;box-shadow:0 0 0 5px #177ddc1f}.ant-slider-handle.ant-tooltip-open{border-color:#177ddc}.ant-slider:hover .ant-slider-rail{background-color:#434343}.ant-slider:hover .ant-slider-track{background-color:#16436e}.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open){border-color:#16436e}.ant-slider-mark{position:absolute;top:14px;left:0;width:100%;font-size:14px}.ant-slider-mark-text{position:absolute;display:inline-block;color:#ffffff73;text-align:center;word-break:keep-all;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-slider-mark-text-active{color:#ffffffd9}.ant-slider-step{position:absolute;width:100%;height:4px;background:transparent}.ant-slider-dot{position:absolute;top:-2px;width:8px;height:8px;margin-left:-4px;background-color:#141414;border:2px solid #303030;border-radius:50%;cursor:pointer}.ant-slider-dot:first-child{margin-left:-4px}.ant-slider-dot:last-child{margin-left:-4px}.ant-slider-dot-active{border-color:#16436e}.ant-slider-disabled{cursor:not-allowed}.ant-slider-disabled .ant-slider-rail{background-color:#262626!important}.ant-slider-disabled .ant-slider-track{background-color:#ffffff4d!important}.ant-slider-disabled .ant-slider-handle,.ant-slider-disabled .ant-slider-dot{background-color:#141414;border-color:#ffffff4d!important;box-shadow:none;cursor:not-allowed}.ant-slider-disabled .ant-slider-mark-text,.ant-slider-disabled .ant-slider-dot{cursor:not-allowed!important}.ant-slider-rtl{direction:rtl}.ant-slider-rtl .ant-slider-mark{right:0;left:auto}.ant-slider-rtl .ant-slider-dot,.ant-slider-rtl .ant-slider-dot:first-child{margin-right:-4px;margin-left:0}.ant-slider-rtl .ant-slider-dot:last-child{margin-right:-4px;margin-left:0}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/space/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-space{display:inline-flex}.ant-space-vertical{flex-direction:column}.ant-space-align-center{align-items:center}.ant-space-align-start{align-items:flex-start}.ant-space-align-end{align-items:flex-end}.ant-space-align-baseline{align-items:baseline}.ant-space-item:empty{display:none}.ant-space-rtl{direction:rtl}/*!**************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/statistic/style/index.less ***! + \\**************************************************************************************************************************************************************************************************************************************************************/.ant-statistic{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-statistic-title{margin-bottom:4px;color:#ffffff73;font-size:14px}.ant-statistic-content{color:#ffffffd9;font-size:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.ant-statistic-content-value{display:inline-block;direction:ltr}.ant-statistic-content-prefix,.ant-statistic-content-suffix{display:inline-block}.ant-statistic-content-prefix{margin-right:4px}.ant-statistic-content-suffix{margin-left:4px}.ant-statistic-rtl{direction:rtl}.ant-statistic-rtl .ant-statistic-content-prefix{margin-right:0;margin-left:4px}.ant-statistic-rtl .ant-statistic-content-suffix{margin-right:4px;margin-left:0}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/steps/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-steps{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:flex;width:100%;font-size:0;text-align:initial}.ant-steps-item{position:relative;display:inline-block;flex:1;overflow:hidden;vertical-align:top}.ant-steps-item-container{outline:none}.ant-steps-item:last-child{flex:none}.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-tail,.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-item-icon,.ant-steps-item-content{display:inline-block;vertical-align:top}.ant-steps-item-icon{width:32px;height:32px;margin:0 8px 0 0;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:32px;text-align:center;border:1px solid rgba(255,255,255,.3);border-radius:32px;transition:background-color .3s,border-color .3s}.ant-steps-item-icon .ant-steps-icon{position:relative;top:-.5px;color:#177ddc;line-height:1}.ant-steps-item-tail{position:absolute;top:12px;left:0;width:100%;padding:0 10px}.ant-steps-item-tail:after{display:inline-block;width:100%;height:1px;background:#303030;border-radius:1px;transition:background .3s;content:""}.ant-steps-item-title{position:relative;display:inline-block;padding-right:16px;color:#ffffffd9;font-size:16px;line-height:32px}.ant-steps-item-title:after{position:absolute;top:16px;left:100%;display:block;width:9999px;height:1px;background:#303030;content:""}.ant-steps-item-subtitle{display:inline;margin-left:8px;color:#ffffff73;font-weight:400;font-size:14px}.ant-steps-item-description{color:#ffffff73;font-size:14px}.ant-steps-item-wait .ant-steps-item-icon{background-color:transparent;border-color:#ffffff4d}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon{color:#ffffff4d}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:rgba(255,255,255,.3)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#ffffff73}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#303030}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#ffffff73}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#303030}.ant-steps-item-process .ant-steps-item-icon{background-color:transparent;border-color:#177ddc}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#177ddc}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#177ddc}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#ffffffd9}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#303030}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#ffffffd9}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#303030}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-icon{background:#177ddc}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-icon .ant-steps-icon{color:#fff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-title{font-weight:500}.ant-steps-item-finish .ant-steps-item-icon{background-color:transparent;border-color:#177ddc}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon{color:#177ddc}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#177ddc}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#ffffffd9}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#177ddc}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#ffffff73}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#177ddc}.ant-steps-item-error .ant-steps-item-icon{background-color:transparent;border-color:#a61d24}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon{color:#a61d24}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#a61d24}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#a61d24}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#303030}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#a61d24}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#303030}.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after{background:#a61d24}.ant-steps-item-disabled{cursor:not-allowed}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]{cursor:pointer}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-title,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-icon .ant-steps-icon{transition:color .3s}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-title,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-description{color:#177ddc}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon{border-color:#177ddc}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon .ant-steps-icon{color:#177ddc}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:16px;white-space:nowrap}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal}.ant-steps-item-custom>.ant-steps-item-container>.ant-steps-item-icon{height:auto;background:none;border:0}.ant-steps-item-custom>.ant-steps-item-container>.ant-steps-item-icon>.ant-steps-icon{top:0px;left:.5px;width:32px;height:32px;font-size:24px;line-height:32px}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#177ddc}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto;background:none}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:12px}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;margin:0 8px 0 0;font-size:12px;line-height:24px;text-align:center;border-radius:24px}.ant-steps-small .ant-steps-item-title{padding-right:12px;font-size:14px;line-height:24px}.ant-steps-small .ant-steps-item-title:after{top:12px}.ant-steps-small .ant-steps-item-description{color:#ffffff73;font-size:14px}.ant-steps-small .ant-steps-item-tail{top:8px}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:none;border:0;border-radius:0}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{font-size:24px;line-height:24px;transform:none}.ant-steps-vertical{display:flex;flex-direction:column}.ant-steps-vertical>.ant-steps-item{display:block;flex:1 0 auto;padding-left:0;overflow:visible}.ant-steps-vertical>.ant-steps-item .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-vertical>.ant-steps-item .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-vertical>.ant-steps-item .ant-steps-item-title{line-height:32px}.ant-steps-vertical>.ant-steps-item .ant-steps-item-description{padding-bottom:12px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-vertical>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}.ant-steps-label-vertical .ant-steps-item{overflow:visible}.ant-steps-label-vertical .ant-steps-item-tail{margin-left:58px;padding:3.5px 24px}.ant-steps-label-vertical .ant-steps-item-content{display:block;width:116px;margin-top:8px;text-align:center}.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-left:42px}.ant-steps-label-vertical .ant-steps-item-title{padding-right:0;padding-left:0}.ant-steps-label-vertical .ant-steps-item-title:after{display:none}.ant-steps-label-vertical .ant-steps-item-subtitle{display:block;margin-bottom:4px;margin-left:0;line-height:1.5715}.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-left:46px}.ant-steps-dot .ant-steps-item-title,.ant-steps-dot.ant-steps-small .ant-steps-item-title{line-height:1.5715}.ant-steps-dot .ant-steps-item-tail,.ant-steps-dot.ant-steps-small .ant-steps-item-tail{top:2px;width:100%;margin:0 0 0 70px;padding:0}.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{width:calc(100% - 20px);height:3px;margin-left:12px}.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{left:2px}.ant-steps-dot .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-icon{width:8px;height:8px;margin-left:67px;padding-right:0;line-height:8px;background:transparent;border:0}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;transition:all .3s}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{position:absolute;top:-12px;left:-26px;width:60px;height:32px;background:rgba(0,0,0,.001);content:""}.ant-steps-dot .ant-steps-item-content,.ant-steps-dot.ant-steps-small .ant-steps-item-content{width:140px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{position:relative;top:-1px;width:10px;height:10px;line-height:10px;background:none}.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:13px;margin-left:0;background:none}.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:6.5px;left:-9px;margin:0;padding:22px 0 4px}.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-content{width:inherit}.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon-dot{top:-1px;left:-1px}.ant-steps-navigation{padding-top:12px}.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-left:-12px}.ant-steps-navigation .ant-steps-item{overflow:visible;text-align:center}.ant-steps-navigation .ant-steps-item-container{display:inline-block;height:100%;margin-left:-16px;padding-bottom:12px;text-align:left;transition:opacity .3s}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content{max-width:auto}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{max-width:100%;padding-right:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title:after{display:none}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]{cursor:pointer}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]:hover{opacity:.85}.ant-steps-navigation .ant-steps-item:last-child{flex:1}.ant-steps-navigation .ant-steps-item:last-child:after{display:none}.ant-steps-navigation .ant-steps-item:after{position:absolute;top:50%;left:100%;display:inline-block;width:12px;height:12px;margin-top:-14px;margin-left:-2px;border:1px solid rgba(255,255,255,.2);border-bottom:none;border-left:none;transform:rotate(45deg);content:""}.ant-steps-navigation .ant-steps-item:before{position:absolute;bottom:0;left:50%;display:inline-block;width:0;height:2px;background-color:#177ddc;transition:width .3s,left .3s;transition-timing-function:ease-out;content:""}.ant-steps-navigation .ant-steps-item.ant-steps-item-active:before{left:0;width:100%}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item{margin-right:0!important}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item:before{display:none}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item.ant-steps-item-active:before{top:0;right:0;left:unset;display:block;width:3px;height:calc(100% - 24px)}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item:after{position:relative;top:-2px;left:50%;display:block;width:8px;height:8px;margin-bottom:8px;text-align:center;transform:rotate(135deg)}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}.ant-steps-navigation.ant-steps-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}.ant-steps-rtl{direction:rtl}.ant-steps.ant-steps-rtl .ant-steps-item-icon{margin-right:0;margin-left:8px}.ant-steps-rtl .ant-steps-item-tail{right:0;left:auto}.ant-steps-rtl .ant-steps-item-title{padding-right:0;padding-left:16px}.ant-steps-rtl .ant-steps-item-title:after{right:100%;left:auto}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:16px;padding-left:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-left:0}.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{right:.5px;left:auto}.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-right:-12px;margin-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container{margin-right:-16px;margin-left:0;text-align:right}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item:after{right:100%;left:auto;margin-right:-2px;margin-left:0;transform:rotate(225deg)}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:12px;padding-left:0}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-small .ant-steps-item-title{padding-right:0;padding-left:12px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item .ant-steps-item-icon{float:right;margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:16px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{right:12px;left:auto}.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail{margin:0 70px 0 0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{margin-right:12px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{right:2px;left:auto}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon{margin-right:67px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{float:right}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{right:-26px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:-9px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{right:0;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{right:-2px;left:auto}.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child.ant-steps-item-active{padding-right:4px}.ant-steps-with-progress .ant-steps-item{padding-top:4px}.ant-steps-with-progress .ant-steps-item .ant-steps-item-tail{top:4px!important}.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child{padding-bottom:4px;padding-left:4px}.ant-steps-with-progress .ant-steps-item-icon{position:relative}.ant-steps-with-progress .ant-steps-item-icon .ant-progress{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/switch/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-switch{margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;box-sizing:border-box;min-width:44px;height:22px;line-height:22px;vertical-align:middle;background-color:#ffffff4d;border:0;border-radius:100px;cursor:pointer;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-switch:focus{outline:0;box-shadow:0 0 0 2px #ffffff1a}.ant-switch-checked:focus{box-shadow:0 0 0 2px #111b26}.ant-switch:focus:hover{box-shadow:none}.ant-switch-checked{background-color:#177ddc}.ant-switch-loading,.ant-switch-disabled{cursor:not-allowed;opacity:.4}.ant-switch-loading *,.ant-switch-disabled *{box-shadow:none;cursor:not-allowed}.ant-switch-inner{display:block;margin:0 7px 0 25px;color:#fff;font-size:12px;transition:margin .2s}.ant-switch-checked .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-handle{position:absolute;top:2px;left:2px;width:18px;height:18px;transition:all .2s ease-in-out}.ant-switch-handle:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#fff;border-radius:9px;box-shadow:0 2px 4px #00230b33;transition:all .2s ease-in-out;content:""}.ant-switch-checked .ant-switch-handle{left:calc(100% - 20px)}.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle:before{right:-30%;left:0}.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle:before{right:0;left:-30%}.ant-switch-loading-icon.anticon{position:relative;top:2px;color:#000000a6;vertical-align:top}.ant-switch-checked .ant-switch-loading-icon{color:#177ddc}.ant-switch-small{min-width:28px;height:16px;line-height:16px}.ant-switch-small .ant-switch-inner{margin:0 5px 0 18px;font-size:12px}.ant-switch-small .ant-switch-handle{width:12px;height:12px}.ant-switch-small .ant-switch-loading-icon{top:1.5px;font-size:9px}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin:0 18px 0 5px}.ant-switch-small.ant-switch-checked .ant-switch-handle{left:calc(100% - 14px)}.ant-switch-rtl{direction:rtl}.ant-switch-rtl .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-rtl .ant-switch-handle{right:2px;left:auto}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle:before{right:0;left:-30%}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle:before{right:-30%;left:0}.ant-switch-rtl.ant-switch-checked .ant-switch-inner{margin:0 7px 0 25px}.ant-switch-rtl.ant-switch-checked .ant-switch-handle{right:calc(100% - 20px)}.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle{right:calc(100% - 14px)}/*!**********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/table/style/index.less ***! + \\**********************************************************************************************************************************************************************************************************************************************************/.ant-table.ant-table-middle{font-size:14px}.ant-table.ant-table-middle .ant-table-title,.ant-table.ant-table-middle .ant-table-footer,.ant-table.ant-table-middle .ant-table-thead>tr>th,.ant-table.ant-table-middle .ant-table-tbody>tr>td,.ant-table.ant-table-middle tfoot>tr>th,.ant-table.ant-table-middle tfoot>tr>td{padding:12px 8px}.ant-table.ant-table-middle .ant-table-filter-trigger{margin-right:-4px}.ant-table.ant-table-middle .ant-table-expanded-row-fixed{margin:-12px -8px}.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-12px -8px -12px 25px}.ant-table.ant-table-small{font-size:14px}.ant-table.ant-table-small .ant-table-title,.ant-table.ant-table-small .ant-table-footer,.ant-table.ant-table-small .ant-table-thead>tr>th,.ant-table.ant-table-small .ant-table-tbody>tr>td,.ant-table.ant-table-small tfoot>tr>th,.ant-table.ant-table-small tfoot>tr>td{padding:8px}.ant-table.ant-table-small .ant-table-filter-trigger{margin-right:-4px}.ant-table.ant-table-small .ant-table-expanded-row-fixed{margin:-8px}.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-8px -8px -8px 25px}.ant-table-small .ant-table-thead>tr>th{background-color:#1d1d1d}.ant-table-small .ant-table-selection-column{width:46px;min-width:46px}.ant-table.ant-table-bordered>.ant-table-title{border:1px solid #303030;border-bottom:0}.ant-table.ant-table-bordered>.ant-table-container{border-left:1px solid #303030}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>td{border-right:1px solid #303030}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr:not(:last-child)>th{border-bottom:1px solid #303030}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>th:before{background-color:transparent!important}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>.ant-table-cell-fix-right-first:after{border-right:1px solid #303030}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-16px -17px}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td>.ant-table-expanded-row-fixed:after{position:absolute;top:0;right:1px;bottom:0;border-right:1px solid #303030;content:""}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table{border-top:1px solid #303030}.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-expanded-row>td,.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-placeholder>td{border-right:0}.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-12px -9px}.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-8px -9px}.ant-table.ant-table-bordered>.ant-table-footer{border:1px solid #303030;border-top:0}.ant-table-cell .ant-table-container:first-child{border-top:0}.ant-table-cell-scrollbar{box-shadow:0 1px 0 1px #1d1d1d}.ant-table-resize-handle{position:absolute;top:0;height:100%!important;bottom:0;left:auto!important;right:-8px;cursor:col-resize;touch-action:none;-webkit-user-select:auto;-moz-user-select:auto;user-select:auto;width:16px;z-index:1}.ant-table-resize-handle-line{display:block;width:1px;margin-left:7px;height:100%!important;background-color:#177ddc;opacity:0}.ant-table-resize-handle:hover .ant-table-resize-handle-line{opacity:1}.ant-table-resize-handle.dragging{overflow:hidden}.ant-table-resize-handle.dragging .ant-table-resize-handle-line{opacity:1}.ant-table-resize-handle.dragging:before{position:absolute;top:0;bottom:0;width:100%;content:" ";width:200vw;transform:translate(-50%);opacity:0}.ant-table-wrapper{clear:both;max-width:100%}.ant-table-wrapper:before{display:table;content:""}.ant-table-wrapper:after{display:table;clear:both;content:""}.ant-table{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;font-size:14px;background:#141414;border-radius:2px}.ant-table table{width:100%;text-align:left;border-radius:2px 2px 0 0;border-collapse:separate;border-spacing:0}.ant-table-thead>tr>th,.ant-table-tbody>tr>td,.ant-table tfoot>tr>th,.ant-table tfoot>tr>td{position:relative;padding:16px;overflow-wrap:break-word}.ant-table-cell-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first{overflow:visible}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content{display:block;overflow:hidden;text-overflow:ellipsis}.ant-table-cell-ellipsis .ant-table-column-title{overflow:hidden;text-overflow:ellipsis;word-break:keep-all}.ant-table-title{padding:16px}.ant-table-footer{padding:16px;color:#ffffffd9;background:rgba(255,255,255,.04)}.ant-table-thead>tr>th{position:relative;color:#ffffffd9;font-weight:500;text-align:left;background:#1d1d1d;border-bottom:1px solid #303030;transition:background .3s ease}.ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-thead>tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan]):before{position:absolute;top:50%;right:0;width:1px;height:1.6em;background-color:#ffffff14;transform:translateY(-50%);transition:background-color .3s;content:""}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #303030;transition:background .3s}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table{margin:-16px -16px -16px 33px}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td{border-bottom:0}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child{border-radius:0}.ant-table-tbody>tr.ant-table-row:hover>td,.ant-table-tbody>tr>td.ant-table-cell-row-hover{background:#262626}.ant-table-tbody>tr.ant-table-row-selected>td{background:#111b26;border-color:#00000008}.ant-table-tbody>tr.ant-table-row-selected:hover>td{background:#0e161f}.ant-table-summary{position:relative;z-index:2;background:#141414}div.ant-table-summary{box-shadow:0 -1px #303030}.ant-table-summary>tr>th,.ant-table-summary>tr>td{border-bottom:1px solid #303030}.ant-table-pagination.ant-pagination{margin:16px 0}.ant-table-pagination{display:flex;flex-wrap:wrap;row-gap:8px}.ant-table-pagination>*{flex:none}.ant-table-pagination-left{justify-content:flex-start}.ant-table-pagination-center{justify-content:center}.ant-table-pagination-right{justify-content:flex-end}.ant-table-thead th.ant-table-column-has-sorters{cursor:pointer;transition:all .3s}.ant-table-thead th.ant-table-column-has-sorters:hover{background:#303030}.ant-table-thead th.ant-table-column-has-sorters:hover:before{background-color:transparent!important}.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover{background:#222}.ant-table-thead th.ant-table-column-sort{background:#262626}.ant-table-thead th.ant-table-column-sort:before{background-color:transparent!important}td.ant-table-column-sort{background:rgba(255,255,255,.01)}.ant-table-column-title{position:relative;z-index:1;flex:1}.ant-table-column-sorters{display:flex;flex:auto;align-items:center;justify-content:space-between}.ant-table-column-sorters:after{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;content:""}.ant-table-column-sorter{margin-left:4px;color:#bfbfbf;font-size:0;transition:color .3s}.ant-table-column-sorter-inner{display:inline-flex;flex-direction:column;align-items:center}.ant-table-column-sorter-up,.ant-table-column-sorter-down{font-size:11px}.ant-table-column-sorter-up.active,.ant-table-column-sorter-down.active{color:#177ddc}.ant-table-column-sorter-up+.ant-table-column-sorter-down{margin-top:-.3em}.ant-table-column-sorters:hover .ant-table-column-sorter{color:#a6a6a6}.ant-table-filter-column{display:flex;justify-content:space-between}.ant-table-filter-trigger{position:relative;display:flex;align-items:center;margin:-4px -8px -4px 4px;padding:0 4px;color:#bfbfbf;font-size:12px;border-radius:2px;cursor:pointer;transition:all .3s}.ant-table-filter-trigger:hover{color:#ffffff73;background:#434343}.ant-table-filter-trigger.active{color:#177ddc}.ant-table-filter-dropdown{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";min-width:120px;background-color:#1f1f1f;border-radius:2px;box-shadow:0 3px 6px -4px #0000007a,0 6px 16px #00000052,0 9px 28px 8px #0003}.ant-table-filter-dropdown .ant-dropdown-menu{max-height:264px;overflow-x:hidden;border:0;box-shadow:none}.ant-table-filter-dropdown .ant-dropdown-menu:empty:after{display:block;padding:8px 0;color:#ffffff4d;font-size:12px;text-align:center;content:"Not Found"}.ant-table-filter-dropdown-tree{padding:8px 8px 0}.ant-table-filter-dropdown-tree .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background-color:#ffffff14}.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper,.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper:hover{background-color:#11263c}.ant-table-filter-dropdown-search{padding:8px;border-bottom:1px #303030 solid}.ant-table-filter-dropdown-search-input input{min-width:140px}.ant-table-filter-dropdown-search-input .anticon{color:#ffffff4d}.ant-table-filter-dropdown-checkall{width:100%;margin-bottom:4px;margin-left:4px}.ant-table-filter-dropdown-submenu>ul{max-height:calc(100vh - 130px);overflow-x:hidden;overflow-y:auto}.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-left:8px}.ant-table-filter-dropdown-btns{display:flex;justify-content:space-between;padding:7px 8px;overflow:hidden;background-color:#1f1f1f;border-top:1px solid #303030}.ant-table-selection-col{width:32px}.ant-table-bordered .ant-table-selection-col{width:50px}table tr th.ant-table-selection-column,table tr td.ant-table-selection-column{padding-right:8px;padding-left:8px;text-align:center}table tr th.ant-table-selection-column .ant-radio-wrapper,table tr td.ant-table-selection-column .ant-radio-wrapper{margin-right:0}table tr th.ant-table-selection-column.ant-table-cell-fix-left{z-index:3}table tr th.ant-table-selection-column:after{background-color:transparent!important}.ant-table-selection{position:relative;display:inline-flex;flex-direction:column}.ant-table-selection-extra{position:absolute;top:0;z-index:1;cursor:pointer;transition:all .3s;-webkit-margin-start:100%;margin-inline-start:100%;-webkit-padding-start:4px;padding-inline-start:4px}.ant-table-selection-extra .anticon{color:#bfbfbf;font-size:10px}.ant-table-selection-extra .anticon:hover{color:#a6a6a6}.ant-table-expand-icon-col{width:48px}.ant-table-row-expand-icon-cell{text-align:center}.ant-table-row-indent{float:left;height:1px}.ant-table-row-expand-icon{color:#177ddc;text-decoration:none;cursor:pointer;transition:color .3s;position:relative;display:inline-flex;float:left;box-sizing:border-box;width:17px;height:17px;padding:0;color:inherit;line-height:17px;background:transparent;border:1px solid #303030;border-radius:2px;outline:none;transform:scale(.94117647);transition:all .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:#165996}.ant-table-row-expand-icon:active{color:#388ed3}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover,.ant-table-row-expand-icon:active{border-color:currentcolor}.ant-table-row-expand-icon:before,.ant-table-row-expand-icon:after{position:absolute;background:currentcolor;transition:transform .3s ease-out;content:""}.ant-table-row-expand-icon:before{top:7px;right:3px;left:3px;height:1px}.ant-table-row-expand-icon:after{top:3px;bottom:3px;left:7px;width:1px;transform:rotate(90deg)}.ant-table-row-expand-icon-collapsed:before{transform:rotate(-180deg)}.ant-table-row-expand-icon-collapsed:after{transform:rotate(0)}.ant-table-row-expand-icon-spaced{background:transparent;border:0;visibility:hidden}.ant-table-row-expand-icon-spaced:before,.ant-table-row-expand-icon-spaced:after{display:none;content:none}.ant-table-row-indent+.ant-table-row-expand-icon{margin-top:2.5005px;margin-right:8px}tr.ant-table-expanded-row>td,tr.ant-table-expanded-row:hover>td{background:#1d1d1d}tr.ant-table-expanded-row .ant-descriptions-view{display:flex}tr.ant-table-expanded-row .ant-descriptions-view table{flex:auto;width:auto}.ant-table .ant-table-expanded-row-fixed{position:relative;margin:-16px;padding:16px}.ant-table-tbody>tr.ant-table-placeholder{text-align:center}.ant-table-empty .ant-table-tbody>tr.ant-table-placeholder{color:#ffffff4d}.ant-table-tbody>tr.ant-table-placeholder:hover>td{background:#141414}.ant-table-cell-fix-left,.ant-table-cell-fix-right{position:sticky!important;z-index:2;background:#141414}.ant-table-cell-fix-left-first:after,.ant-table-cell-fix-left-last:after{position:absolute;top:0;right:0;bottom:-1px;width:30px;transform:translate(100%);transition:box-shadow .3s;content:"";pointer-events:none}.ant-table-cell-fix-right-first:after,.ant-table-cell-fix-right-last:after{position:absolute;top:0;bottom:-1px;left:0;width:30px;transform:translate(-100%);transition:box-shadow .3s;content:"";pointer-events:none}.ant-table .ant-table-container:before,.ant-table .ant-table-container:after{position:absolute;top:0;bottom:0;z-index:2;width:30px;transition:box-shadow .3s;content:"";pointer-events:none}.ant-table .ant-table-container:before{left:0}.ant-table .ant-table-container:after{right:0}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container{position:relative}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container:before{box-shadow:inset 10px 0 8px -8px #00000073}.ant-table-ping-left .ant-table-cell-fix-left-first:after,.ant-table-ping-left .ant-table-cell-fix-left-last:after{box-shadow:inset 10px 0 8px -8px #00000073}.ant-table-ping-left .ant-table-cell-fix-left-last:before{background-color:transparent!important}.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container{position:relative}.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container:after{box-shadow:inset -10px 0 8px -8px #00000073}.ant-table-ping-right .ant-table-cell-fix-right-first:after,.ant-table-ping-right .ant-table-cell-fix-right-last:after{box-shadow:inset -10px 0 8px -8px #00000073}.ant-table-sticky-holder{position:sticky;z-index:3;background:#141414}.ant-table-sticky-scroll{position:sticky;bottom:0;z-index:3;display:flex;align-items:center;background:#fcfcfc;border-top:1px solid #303030;opacity:.6}.ant-table-sticky-scroll:hover{transform-origin:center bottom}.ant-table-sticky-scroll-bar{height:8px;background-color:#00000059;border-radius:4px}.ant-table-sticky-scroll-bar:hover,.ant-table-sticky-scroll-bar-active{background-color:#000c}@media all and (-ms-high-contrast: none){.ant-table-ping-left .ant-table-cell-fix-left-last:after{box-shadow:none!important}.ant-table-ping-right .ant-table-cell-fix-right-first:after{box-shadow:none!important}}.ant-table-title{border-radius:2px 2px 0 0}.ant-table-title+.ant-table-container{border-top-left-radius:0;border-top-right-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:first-child{border-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:last-child{border-radius:0}.ant-table-container{border-top-left-radius:2px;border-top-right-radius:2px}.ant-table-container table>thead>tr:first-child th:first-child{border-top-left-radius:2px}.ant-table-container table>thead>tr:first-child th:last-child{border-top-right-radius:2px}.ant-table-footer{border-radius:0 0 2px 2px}.ant-table-wrapper-rtl,.ant-table-rtl{direction:rtl}.ant-table-wrapper-rtl .ant-table table{text-align:right}.ant-table-wrapper-rtl .ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-wrapper-rtl .ant-table-thead>tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan]):before{right:auto;left:0}.ant-table-wrapper-rtl .ant-table-thead>tr>th{text-align:right}.ant-table-tbody>tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl{margin:-16px 33px -16px -16px}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left{justify-content:flex-end}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right{justify-content:flex-start}.ant-table-wrapper-rtl .ant-table-column-sorter{margin-right:4px;margin-left:0}.ant-table-wrapper-rtl .ant-table-filter-column-title{padding:16px 16px 16px 2.3em}.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title{padding:0 0 0 2.3em}.ant-table-wrapper-rtl .ant-table-filter-trigger{margin:-4px 4px -4px -8px}.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-right:8px;padding-left:0}.ant-table-wrapper-rtl .ant-table-selection{text-align:center}.ant-table-wrapper-rtl .ant-table-row-indent,.ant-table-wrapper-rtl .ant-table-row-expand-icon{float:right}.ant-table-wrapper-rtl .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:0;margin-left:8px}.ant-table-wrapper-rtl .ant-table-row-expand-icon:after{transform:rotate(-90deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed:before{transform:rotate(180deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed:after{transform:rotate(0)}/*!*********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tree/style/index.less ***! + \\*********************************************************************************************************************************************************************************************************************************************************/.ant-tree.ant-tree-directory .ant-tree-treenode{position:relative}.ant-tree.ant-tree-directory .ant-tree-treenode:before{position:absolute;top:0;right:0;bottom:4px;left:0;transition:background-color .3s;content:"";pointer-events:none}.ant-tree.ant-tree-directory .ant-tree-treenode:hover:before{background:rgba(255,255,255,.08)}.ant-tree.ant-tree-directory .ant-tree-treenode>*{z-index:1}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher{transition:color .3s}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper{border-radius:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected{color:#fff;background:transparent}.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover:before,.ant-tree.ant-tree-directory .ant-tree-treenode-selected:before{background:#177ddc}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher{color:#fff}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper{color:#fff;background:transparent}.ant-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner,.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner{border-color:#177ddc}.ant-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #177ddc;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-tree-checkbox:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox:after{visibility:visible}.ant-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #434343;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-tree-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#177ddc;border-color:#177ddc}.ant-tree-checkbox-disabled{cursor:not-allowed}.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:#ffffff4d;animation-name:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:#ffffff14;border-color:#434343!important}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{border-color:#ffffff14;border-collapse:separate;animation-name:none}.ant-tree-checkbox-disabled+span{color:#ffffff4d;cursor:not-allowed}.ant-tree-checkbox-disabled:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled:after{visibility:hidden}.ant-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-left:8px}.ant-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-tree-checkbox-group-item{margin-right:8px}.ant-tree-checkbox-group-item:last-child{margin-right:0}.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:0}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner{background-color:transparent;border-color:#434343}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#177ddc;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{background-color:#ffffff4d;border-color:#ffffff4d}.ant-tree{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background:transparent;border-radius:2px;transition:background-color .3s}.ant-tree-focused:not(:hover):not(.ant-tree-active-focused){background:#111b26}.ant-tree-list-holder-inner{align-items:flex-start}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner{align-items:stretch}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper{flex:auto}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging{position:relative}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging:after{position:absolute;top:0;right:0;bottom:4px;left:0;border:1px solid #177ddc;opacity:0;animation:ant-tree-node-fx-do-not-use .3s;animation-play-state:running;animation-fill-mode:forwards;content:"";pointer-events:none}.ant-tree .ant-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:none}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper{color:#ffffff4d;cursor:not-allowed}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper{background:rgba(255,255,255,.08)}.ant-tree .ant-tree-treenode:not(.ant-tree .ant-tree-treenode-disabled).filter-node .ant-tree-title{color:inherit;font-weight:500}.ant-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree-indent-unit{display:inline-block;width:24px}.ant-tree-draggable-icon{width:24px;line-height:24px;text-align:center;opacity:.2;transition:opacity .3s}.ant-tree-treenode:hover .ant-tree-draggable-icon{opacity:.45}.ant-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree-switcher .ant-tree-switcher-icon,.ant-tree-switcher .ant-select-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:baseline}.ant-tree-switcher .ant-tree-switcher-icon svg,.ant-tree-switcher .ant-select-tree-switcher-icon svg{transition:transform .3s}.ant-tree-switcher-noop{cursor:default}.ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-tree-switcher-loading-icon{color:#177ddc}.ant-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%}.ant-tree-switcher-leaf-line:before{position:absolute;top:0;right:12px;bottom:-4px;margin-left:-1px;border-right:1px solid #d9d9d9;content:" "}.ant-tree-switcher-leaf-line:after{position:absolute;width:10px;height:14px;border-bottom:1px solid #d9d9d9;content:" "}.ant-tree-checkbox{top:initial;margin:4px 8px 0 0}.ant-tree .ant-tree-node-content-wrapper{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:2px;cursor:pointer;transition:all .3s,border 0s,line-height 0s,box-shadow 0s}.ant-tree .ant-tree-node-content-wrapper:hover{background-color:#ffffff14}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:#11263c}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty{display:none}.ant-tree-unselectable .ant-tree-node-content-wrapper:hover{background-color:transparent}.ant-tree-node-content-wrapper{line-height:24px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree-node-content-wrapper .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#177ddc;border-radius:1px;pointer-events:none}.ant-tree-node-content-wrapper .ant-tree-drop-indicator:after{position:absolute;top:-3px;left:-6px;width:8px;height:8px;background-color:transparent;border:2px solid #177ddc;border-radius:50%;content:""}.ant-tree .ant-tree-treenode.drop-container>[draggable]{box-shadow:0 0 0 2px #177ddc}.ant-tree-show-line .ant-tree-indent-unit{position:relative;height:100%}.ant-tree-show-line .ant-tree-indent-unit:before{position:absolute;top:0;right:12px;bottom:-4px;border-right:1px solid #434343;content:""}.ant-tree-show-line .ant-tree-indent-unit-end:before{display:none}.ant-tree-show-line .ant-tree-switcher{background:#141414}.ant-tree-show-line .ant-tree-switcher-line-icon{vertical-align:-.15em}.ant-tree .ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:14px!important}.ant-tree-rtl{direction:rtl}.ant-tree-rtl .ant-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator:after{right:-6px;left:unset}.ant-tree .ant-tree-treenode-rtl{direction:rtl}.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit:before{right:auto;left:-13px;border-right:none;border-left:1px solid #434343}.ant-tree-rtl.ant-tree-checkbox,.ant-tree-select-dropdown-rtl .ant-select-tree-checkbox{margin:4px 0 0 8px}/*!****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/time-picker/style/index.less ***! + \\****************************************************************************************************************************************************************************************************************************************************************//*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/timeline/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-timeline{box-sizing:border-box;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";margin:0;padding:0;list-style:none}.ant-timeline-item{position:relative;margin:0;padding-bottom:20px;font-size:14px;list-style:none}.ant-timeline-item-tail{position:absolute;top:10px;left:4px;height:calc(100% - 10px);border-left:2px solid #303030}.ant-timeline-item-pending .ant-timeline-item-head{font-size:12px;background-color:transparent}.ant-timeline-item-pending .ant-timeline-item-tail{display:none}.ant-timeline-item-head{position:absolute;width:10px;height:10px;background-color:#141414;border:2px solid transparent;border-radius:100px}.ant-timeline-item-head-blue{color:#177ddc;border-color:#177ddc}.ant-timeline-item-head-red{color:#a61d24;border-color:#a61d24}.ant-timeline-item-head-green{color:#49aa19;border-color:#49aa19}.ant-timeline-item-head-gray{color:#ffffff4d;border-color:#ffffff4d}.ant-timeline-item-head-custom{position:absolute;top:5.5px;left:5px;width:auto;height:auto;margin-top:0;padding:3px 1px;line-height:1;text-align:center;border:0;border-radius:0;transform:translate(-50%,-50%)}.ant-timeline-item-content{position:relative;top:-7.001px;margin:0 0 0 26px;word-break:break-word}.ant-timeline-item-last>.ant-timeline-item-tail{display:none}.ant-timeline-item-last>.ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-tail,.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{left:50%}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head{margin-left:-4px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{margin-left:1px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content{left:calc(50% - 4px);width:calc(50% - 14px);text-align:left}.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:right}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom{left:calc(100% - 6px)}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(100% - 18px)}.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail{display:block;height:calc(100% - 14px);border-left:2px dotted #303030}.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail{display:none}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{top:15px;display:block;height:calc(100% - 15px);border-left:2px dotted #303030}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-label .ant-timeline-item-label{position:absolute;top:-7.001px;width:calc(50% - 12px);text-align:right}.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{left:calc(50% + 14px);width:calc(50% - 14px);text-align:left}.ant-timeline-rtl{direction:rtl}.ant-timeline-rtl .ant-timeline-item-tail{right:4px;left:auto;border-right:2px solid #303030;border-left:none}.ant-timeline-rtl .ant-timeline-item-head-custom{right:5px;left:auto;transform:translate(50%,-50%)}.ant-timeline-rtl .ant-timeline-item-content{margin:0 18px 0 0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{right:50%;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head{margin-right:-4px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{margin-right:1px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content{right:calc(50% - 4px);left:auto;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom{right:0;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:100%;margin-right:18px;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{border-right:2px dotted #303030;border-left:none}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{right:calc(50% + 14px);text-align:right}/*!*************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/transfer/style/index.less ***! + \\*************************************************************************************************************************************************************************************************************************************************************/.ant-transfer-customize-list .ant-transfer-list{flex:1 1 50%;width:auto;height:auto;min-height:200px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-selection-column{width:40px;min-width:40px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th{background:#1d1d1d}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:1px solid #303030}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body{margin:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0 4px}.ant-transfer-customize-list .ant-input[disabled]{background-color:transparent}.ant-transfer{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:flex;align-items:stretch}.ant-transfer-disabled .ant-transfer-list{background:rgba(255,255,255,.08)}.ant-transfer-list{display:flex;flex-direction:column;width:180px;height:200px;border:1px solid #434343;border-radius:2px}.ant-transfer-list-with-pagination{width:250px;height:auto}.ant-transfer-list-search .anticon-search{color:#ffffff4d}.ant-transfer-list-header{display:flex;flex:none;align-items:center;height:40px;padding:8px 12px 9px;color:#ffffffd9;background:#141414;border-bottom:1px solid #303030;border-radius:2px 2px 0 0}.ant-transfer-list-header>*:not(:last-child){margin-right:4px}.ant-transfer-list-header>*{flex:none}.ant-transfer-list-header-title{flex:auto;overflow:hidden;white-space:nowrap;text-align:right;text-overflow:ellipsis}.ant-transfer-list-header-dropdown{font-size:10px;transform:translateY(10%);cursor:pointer}.ant-transfer-list-header-dropdown[disabled]{cursor:not-allowed}.ant-transfer-list-body{display:flex;flex:auto;flex-direction:column;overflow:hidden;font-size:14px}.ant-transfer-list-body-search-wrapper{position:relative;flex:none;padding:12px}.ant-transfer-list-content{flex:auto;margin:0;padding:0;overflow:auto;list-style:none}.ant-transfer-list-content-item{display:flex;align-items:center;min-height:32px;padding:6px 12px;line-height:20px;transition:all .3s}.ant-transfer-list-content-item>*:not(:last-child){margin-right:8px}.ant-transfer-list-content-item>*{flex:none}.ant-transfer-list-content-item-text{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-transfer-list-content-item-remove{color:#177ddc;text-decoration:none;outline:none;cursor:pointer;transition:color .3s;position:relative;color:#434343}.ant-transfer-list-content-item-remove:focus,.ant-transfer-list-content-item-remove:hover{color:#165996}.ant-transfer-list-content-item-remove:active{color:#388ed3}.ant-transfer-list-content-item-remove:after{position:absolute;top:-6px;right:-50%;bottom:-6px;left:-50%;content:""}.ant-transfer-list-content-item-remove:hover{color:#165996}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#262626;cursor:pointer}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover{background-color:#0e161f}.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background:transparent;cursor:default}.ant-transfer-list-content-item-checked{background-color:#111b26}.ant-transfer-list-content-item-disabled{color:#ffffff4d;cursor:not-allowed}.ant-transfer-list-pagination{padding:8px 0;text-align:right;border-top:1px solid #303030}.ant-transfer-list-body-not-found{flex:none;width:100%;margin:auto 0;color:#ffffff4d;text-align:center}.ant-transfer-list-footer{border-top:1px solid #303030}.ant-transfer-operation{display:flex;flex:none;flex-direction:column;align-self:center;margin:0 8px;vertical-align:middle}.ant-transfer-operation .ant-btn{display:block}.ant-transfer-operation .ant-btn:first-child{margin-bottom:4px}.ant-transfer-operation .ant-btn .anticon{font-size:12px}.ant-transfer .ant-empty-image{max-height:-2px}.ant-transfer-rtl{direction:rtl}.ant-transfer-rtl .ant-transfer-list-search{padding-right:8px;padding-left:24px}.ant-transfer-rtl .ant-transfer-list-search-action{right:auto;left:12px}.ant-transfer-rtl .ant-transfer-list-header>*:not(:last-child){margin-right:0;margin-left:4px}.ant-transfer-rtl .ant-transfer-list-header{right:0;left:auto}.ant-transfer-rtl .ant-transfer-list-header-title{text-align:left}.ant-transfer-rtl .ant-transfer-list-content-item>*:not(:last-child){margin-right:0;margin-left:8px}.ant-transfer-rtl .ant-transfer-list-pagination{text-align:left}.ant-transfer-rtl .ant-transfer-list-footer{right:0;left:auto}/*!****************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tree-select/style/index.less ***! + \\****************************************************************************************************************************************************************************************************************************************************************/@keyframes ant-tree-node-fx-do-not-use{0%{opacity:0}to{opacity:1}}@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-select-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox-input:focus+.ant-select-tree-checkbox-inner{border-color:#177ddc}.ant-select-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #177ddc;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-select-tree-checkbox:hover:after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox:after{visibility:visible}.ant-select-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:transparent;border:1px solid #434343;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-select-tree-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-select-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#177ddc;border-color:#177ddc}.ant-select-tree-checkbox-disabled{cursor:not-allowed}.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{border-color:#ffffff4d;animation-name:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner{background-color:#ffffff14;border-color:#434343!important}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{border-color:#ffffff14;border-collapse:separate;animation-name:none}.ant-select-tree-checkbox-disabled+span{color:#ffffff4d;cursor:not-allowed}.ant-select-tree-checkbox-disabled:hover:after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled:after{visibility:hidden}.ant-select-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-select-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-select-tree-checkbox-wrapper+.ant-select-tree-checkbox-wrapper{margin-left:8px}.ant-select-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-select-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-select-tree-checkbox-group-item{margin-right:8px}.ant-select-tree-checkbox-group-item:last-child{margin-right:0}.ant-select-tree-checkbox-group-item+.ant-select-tree-checkbox-group-item{margin-left:0}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:transparent;border-color:#434343}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#177ddc;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{background-color:#ffffff4d;border-color:#ffffff4d}.ant-tree-select-dropdown{padding:8px 4px}.ant-tree-select-dropdown-rtl{direction:rtl}.ant-tree-select-dropdown .ant-select-tree{border-radius:0}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner{align-items:stretch}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background:transparent;border-radius:2px;transition:background-color .3s}.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused){background:#111b26}.ant-select-tree-list-holder-inner{align-items:flex-start}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner{align-items:stretch}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging{position:relative}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging:after{position:absolute;top:0;right:0;bottom:4px;left:0;border:1px solid #177ddc;opacity:0;animation:ant-tree-node-fx-do-not-use .3s;animation-play-state:running;animation-fill-mode:forwards;content:"";pointer-events:none}.ant-select-tree .ant-select-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:none}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper{color:#ffffff4d;cursor:not-allowed}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover{background:transparent}.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper{background:rgba(255,255,255,.08)}.ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree .ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title{color:inherit;font-weight:500}.ant-select-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-tree-indent-unit{display:inline-block;width:24px}.ant-select-tree-draggable-icon{width:24px;line-height:24px;text-align:center;opacity:.2;transition:opacity .3s}.ant-select-tree-treenode:hover .ant-select-tree-draggable-icon{opacity:.45}.ant-select-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-tree-switcher .ant-tree-switcher-icon,.ant-select-tree-switcher .ant-select-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:baseline}.ant-select-tree-switcher .ant-tree-switcher-icon svg,.ant-select-tree-switcher .ant-select-tree-switcher-icon svg{transition:transform .3s}.ant-select-tree-switcher-noop{cursor:default}.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-select-tree-switcher-loading-icon{color:#177ddc}.ant-select-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%}.ant-select-tree-switcher-leaf-line:before{position:absolute;top:0;right:12px;bottom:-4px;margin-left:-1px;border-right:1px solid #d9d9d9;content:" "}.ant-select-tree-switcher-leaf-line:after{position:absolute;width:10px;height:14px;border-bottom:1px solid #d9d9d9;content:" "}.ant-select-tree-checkbox{top:initial;margin:4px 8px 0 0}.ant-select-tree .ant-select-tree-node-content-wrapper{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:2px;cursor:pointer;transition:all .3s,border 0s,line-height 0s,box-shadow 0s}.ant-select-tree .ant-select-tree-node-content-wrapper:hover{background-color:#ffffff14}.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:#11263c}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty{display:none}.ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover{background-color:transparent}.ant-select-tree-node-content-wrapper{line-height:24px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#177ddc;border-radius:1px;pointer-events:none}.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator:after{position:absolute;top:-3px;left:-6px;width:8px;height:8px;background-color:transparent;border:2px solid #177ddc;border-radius:50%;content:""}.ant-select-tree .ant-select-tree-treenode.drop-container>[draggable]{box-shadow:0 0 0 2px #177ddc}.ant-select-tree-show-line .ant-select-tree-indent-unit{position:relative;height:100%}.ant-select-tree-show-line .ant-select-tree-indent-unit:before{position:absolute;top:0;right:12px;bottom:-4px;border-right:1px solid #434343;content:""}.ant-select-tree-show-line .ant-select-tree-indent-unit-end:before{display:none}.ant-select-tree-show-line .ant-select-tree-switcher{background:#141414}.ant-select-tree-show-line .ant-select-tree-switcher-line-icon{vertical-align:-.15em}.ant-select-tree .ant-select-tree-treenode-leaf-last .ant-select-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:14px!important}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon{transform:scaleY(-1)}/*!***************************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/typography/style/index.less ***! + \\***************************************************************************************************************************************************************************************************************************************************************/.ant-typography{color:#ffffffd9;overflow-wrap:break-word}.ant-typography.ant-typography-secondary{color:#ffffff73}.ant-typography.ant-typography-success{color:#49aa19}.ant-typography.ant-typography-warning{color:#d89614}.ant-typography.ant-typography-danger{color:#a61d24}a.ant-typography.ant-typography-danger:active,a.ant-typography.ant-typography-danger:focus,a.ant-typography.ant-typography-danger:hover{color:#b33b3d}.ant-typography.ant-typography-disabled{color:#ffffff4d;cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none}div.ant-typography,.ant-typography p{margin-bottom:1em}h1.ant-typography,.ant-typography h1{margin-bottom:.5em;color:#ffffffd9;font-weight:600;font-size:38px;line-height:1.23}h2.ant-typography,.ant-typography h2{margin-bottom:.5em;color:#ffffffd9;font-weight:600;font-size:30px;line-height:1.35}h3.ant-typography,.ant-typography h3{margin-bottom:.5em;color:#ffffffd9;font-weight:600;font-size:24px;line-height:1.35}h4.ant-typography,.ant-typography h4{margin-bottom:.5em;color:#ffffffd9;font-weight:600;font-size:20px;line-height:1.4}h5.ant-typography,.ant-typography h5{margin-bottom:.5em;color:#ffffffd9;font-weight:600;font-size:16px;line-height:1.5}.ant-typography+h1.ant-typography,.ant-typography+h2.ant-typography,.ant-typography+h3.ant-typography,.ant-typography+h4.ant-typography,.ant-typography+h5.ant-typography{margin-top:1.2em}.ant-typography div+h1,.ant-typography ul+h1,.ant-typography li+h1,.ant-typography p+h1,.ant-typography h1+h1,.ant-typography h2+h1,.ant-typography h3+h1,.ant-typography h4+h1,.ant-typography h5+h1,.ant-typography div+h2,.ant-typography ul+h2,.ant-typography li+h2,.ant-typography p+h2,.ant-typography h1+h2,.ant-typography h2+h2,.ant-typography h3+h2,.ant-typography h4+h2,.ant-typography h5+h2,.ant-typography div+h3,.ant-typography ul+h3,.ant-typography li+h3,.ant-typography p+h3,.ant-typography h1+h3,.ant-typography h2+h3,.ant-typography h3+h3,.ant-typography h4+h3,.ant-typography h5+h3,.ant-typography div+h4,.ant-typography ul+h4,.ant-typography li+h4,.ant-typography p+h4,.ant-typography h1+h4,.ant-typography h2+h4,.ant-typography h3+h4,.ant-typography h4+h4,.ant-typography h5+h4,.ant-typography div+h5,.ant-typography ul+h5,.ant-typography li+h5,.ant-typography p+h5,.ant-typography h1+h5,.ant-typography h2+h5,.ant-typography h3+h5,.ant-typography h4+h5,.ant-typography h5+h5{margin-top:1.2em}a.ant-typography-ellipsis,span.ant-typography-ellipsis{display:inline-block;max-width:100%}a.ant-typography,.ant-typography a{color:#177ddc;outline:none;cursor:pointer;transition:color .3s;text-decoration:none}a.ant-typography:focus,.ant-typography a:focus,a.ant-typography:hover,.ant-typography a:hover{color:#165996}a.ant-typography:active,.ant-typography a:active{color:#388ed3}a.ant-typography:active,.ant-typography a:active,a.ant-typography:hover,.ant-typography a:hover{text-decoration:none}a.ant-typography[disabled],.ant-typography a[disabled],a.ant-typography.ant-typography-disabled,.ant-typography a.ant-typography-disabled{color:#ffffff4d;cursor:not-allowed}a.ant-typography[disabled]:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:active,a.ant-typography[disabled]:hover,.ant-typography a[disabled]:hover,a.ant-typography.ant-typography-disabled:hover,.ant-typography a.ant-typography-disabled:hover{color:#ffffff4d}a.ant-typography[disabled]:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:active{pointer-events:none}.ant-typography code{margin:0 .2em;padding:.2em .4em .1em;font-size:85%;background:rgba(150,150,150,.1);border:1px solid rgba(100,100,100,.2);border-radius:3px}.ant-typography kbd{margin:0 .2em;padding:.15em .4em .1em;font-size:90%;background:rgba(150,150,150,.06);border:1px solid rgba(100,100,100,.2);border-bottom-width:2px;border-radius:3px}.ant-typography mark{padding:0;background-color:#594214}.ant-typography u,.ant-typography ins{text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.ant-typography s,.ant-typography del{text-decoration:line-through}.ant-typography strong{font-weight:600}.ant-typography-expand,.ant-typography-edit,.ant-typography-copy{color:#177ddc;text-decoration:none;outline:none;cursor:pointer;transition:color .3s;margin-left:4px}.ant-typography-expand:focus,.ant-typography-edit:focus,.ant-typography-copy:focus,.ant-typography-expand:hover,.ant-typography-edit:hover,.ant-typography-copy:hover{color:#165996}.ant-typography-expand:active,.ant-typography-edit:active,.ant-typography-copy:active{color:#388ed3}.ant-typography-copy-success,.ant-typography-copy-success:hover,.ant-typography-copy-success:focus{color:#49aa19}.ant-typography-edit-content{position:relative}div.ant-typography-edit-content{left:-12px;margin-top:-5px;margin-bottom:calc(1em - 5px)}.ant-typography-edit-content-confirm{position:absolute;right:10px;bottom:8px;color:#ffffff73;pointer-events:none}.ant-typography-edit-content textarea{-moz-transition:none}.ant-typography ul,.ant-typography ol{margin:0 0 1em;padding:0}.ant-typography ul li,.ant-typography ol li{margin:0 0 0 20px;padding:0 0 0 4px}.ant-typography ul{list-style-type:circle}.ant-typography ul ul{list-style-type:disc}.ant-typography ol{list-style-type:decimal}.ant-typography pre,.ant-typography blockquote{margin:1em 0}.ant-typography pre{padding:.4em .6em;white-space:pre-wrap;word-wrap:break-word;background:rgba(150,150,150,.1);border:1px solid rgba(100,100,100,.2);border-radius:3px}.ant-typography pre code{display:inline;margin:0;padding:0;font-size:inherit;font-family:inherit;background:transparent;border:0}.ant-typography blockquote{padding:0 0 0 .6em;border-left:4px solid rgba(100,100,100,.2);opacity:.85}.ant-typography-single-line{white-space:nowrap}.ant-typography-ellipsis-single-line{overflow:hidden;text-overflow:ellipsis}a.ant-typography-ellipsis-single-line,span.ant-typography-ellipsis-single-line{vertical-align:bottom}.ant-typography-ellipsis-multiple-line{display:-webkit-box;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical}.ant-typography-rtl{direction:rtl}.ant-typography-rtl .ant-typography-expand,.ant-typography-rtl .ant-typography-edit,.ant-typography-rtl .ant-typography-copy{margin-right:4px;margin-left:0}.ant-typography-rtl .ant-typography-expand{float:left}div.ant-typography-edit-content.ant-typography-rtl{right:-12px;left:auto}.ant-typography-rtl .ant-typography-edit-content-confirm{right:auto;left:10px}.ant-typography-rtl.ant-typography ul li,.ant-typography-rtl.ant-typography ol li{margin:0 20px 0 0;padding:0 4px 0 0}/*!***********************************************************************************************************************************************************************************************************************************************************!*\\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/upload/style/index.less ***! + \\***********************************************************************************************************************************************************************************************************************************************************/.ant-upload{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";outline:0}.ant-upload p{margin:0}.ant-upload-btn{display:block;width:100%;outline:none}.ant-upload input[type=file]{cursor:pointer}.ant-upload.ant-upload-select{display:inline-block}.ant-upload.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-select-picture-card{width:104px;height:104px;margin-right:8px;margin-bottom:8px;text-align:center;vertical-align:top;background-color:#ffffff0a;border:1px dashed #434343;border-radius:2px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-select-picture-card>.ant-upload{display:flex;align-items:center;justify-content:center;height:100%;text-align:center}.ant-upload.ant-upload-select-picture-card:hover{border-color:#177ddc}.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover{border-color:#434343}.ant-upload.ant-upload-drag{position:relative;width:100%;height:100%;text-align:center;background:rgba(255,255,255,.04);border:1px dashed #434343;border-radius:2px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-drag .ant-upload{padding:16px 0}.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled){border-color:#388ed3}.ant-upload.ant-upload-drag.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-drag .ant-upload-btn{display:table;height:100%}.ant-upload.ant-upload-drag .ant-upload-drag-container{display:table-cell;vertical-align:middle}.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover{border-color:#165996}.ant-upload.ant-upload-drag p.ant-upload-drag-icon{margin-bottom:20px}.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon{color:#165996;font-size:48px}.ant-upload.ant-upload-drag p.ant-upload-text{margin:0 0 4px;color:#ffffffd9;font-size:16px}.ant-upload.ant-upload-drag p.ant-upload-hint{color:#ffffff73;font-size:14px}.ant-upload.ant-upload-drag .anticon-plus{color:#ffffff4d;font-size:30px;transition:all .3s}.ant-upload.ant-upload-drag .anticon-plus:hover,.ant-upload.ant-upload-drag:hover .anticon-plus{color:#ffffff73}.ant-upload-picture-card-wrapper{display:inline-block;width:100%}.ant-upload-picture-card-wrapper:before{display:table;content:""}.ant-upload-picture-card-wrapper:after{display:table;clear:both;content:""}.ant-upload-list{box-sizing:border-box;margin:0;padding:0;color:#ffffffd9;font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";line-height:1.5715}.ant-upload-list:before{display:table;content:""}.ant-upload-list:after{display:table;clear:both;content:""}.ant-upload-list-item{position:relative;height:22.001px;margin-top:8px;font-size:14px}.ant-upload-list-item-name{display:inline-block;width:100%;padding-left:22px;overflow:hidden;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-upload-list-item-card-actions{position:absolute;right:0}.ant-upload-list-item-card-actions-btn{opacity:0}.ant-upload-list-item-card-actions-btn.ant-btn-sm{height:20px;line-height:1}.ant-upload-list-item-card-actions.picture{top:22px;line-height:0}.ant-upload-list-item-card-actions-btn:focus,.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-card-actions .anticon{color:#ffffff73}.ant-upload-list-item-info{height:100%;padding:0 4px;transition:background-color .3s}.ant-upload-list-item-info>span{display:block;width:100%;height:100%}.ant-upload-list-item-info .anticon-loading .anticon,.ant-upload-list-item-info .ant-upload-text-icon .anticon{position:absolute;top:5px;color:#ffffff73;font-size:14px}.ant-upload-list-item .anticon-close{position:absolute;top:6px;right:4px;color:#ffffff73;font-size:10px;line-height:0;cursor:pointer;opacity:0;transition:all .3s}.ant-upload-list-item .anticon-close:hover{color:#ffffffd9}.ant-upload-list-item:hover .ant-upload-list-item-info{background-color:#ffffff14}.ant-upload-list-item:hover .anticon-close,.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-error,.ant-upload-list-item-error .ant-upload-text-icon>.anticon,.ant-upload-list-item-error .ant-upload-list-item-name{color:#a61d24}.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{color:#a61d24}.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-progress{position:absolute;bottom:-12px;width:100%;padding-left:26px;font-size:14px;line-height:0}.ant-upload-list-picture .ant-upload-list-item,.ant-upload-list-picture-card .ant-upload-list-item{position:relative;height:66px;padding:8px;border:1px solid #434343;border-radius:2px}.ant-upload-list-picture .ant-upload-list-item:hover,.ant-upload-list-picture-card .ant-upload-list-item:hover{background:transparent}.ant-upload-list-picture .ant-upload-list-item-error,.ant-upload-list-picture-card .ant-upload-list-item-error{border-color:#a61d24}.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info,.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info{background:transparent}.ant-upload-list-picture .ant-upload-list-item-uploading,.ant-upload-list-picture-card .ant-upload-list-item-uploading{border-style:dashed}.ant-upload-list-picture .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail{width:48px;height:48px;line-height:60px;text-align:center;opacity:.8}.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon{font-size:26px}.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#e6f7ff"],.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#e6f7ff"]{fill:#2a1215}.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#1890ff"],.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#1890ff"]{fill:#a61d24}.ant-upload-list-picture .ant-upload-list-item-icon,.ant-upload-list-picture-card .ant-upload-list-item-icon{position:absolute;top:50%;left:50%;font-size:26px;transform:translate(-50%,-50%)}.ant-upload-list-picture .ant-upload-list-item-icon .anticon,.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon{font-size:26px}.ant-upload-list-picture .ant-upload-list-item-image,.ant-upload-list-picture-card .ant-upload-list-item-image{max-width:100%}.ant-upload-list-picture .ant-upload-list-item-thumbnail img,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{display:block;width:48px;height:48px;overflow:hidden}.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-picture-card .ant-upload-list-item-name{display:inline-block;box-sizing:border-box;max-width:100%;margin:0 0 0 8px;padding-right:8px;padding-left:48px;overflow:hidden;line-height:44px;white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name{margin-bottom:12px}.ant-upload-list-picture .ant-upload-list-item-progress,.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:14px;width:calc(100% - 24px);margin-top:0;padding-left:56px}.ant-upload-list-picture .anticon-close,.ant-upload-list-picture-card .anticon-close{position:absolute;top:8px;right:8px;line-height:1;opacity:1}.ant-upload-list-picture-card-container{display:inline-block;width:104px;height:104px;margin:0 8px 8px 0;vertical-align:top}.ant-upload-list-picture-card.ant-upload-list:after{display:none}.ant-upload-list-picture-card .ant-upload-list-item{height:100%;margin:0}.ant-upload-list-picture-card .ant-upload-list-item-info{position:relative;height:100%;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-info:before{position:absolute;z-index:1;width:100%;height:100%;background-color:#00000080;opacity:0;transition:all .3s;content:" "}.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info:before{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-actions{position:absolute;top:50%;left:50%;z-index:10;white-space:nowrap;transform:translate(-50%,-50%);opacity:0;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete{z-index:10;width:16px;margin:0 4px;color:#ffffffd9;font-size:16px;cursor:pointer;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover{color:#fff}.ant-upload-list-picture-card .ant-upload-list-item-info:hover+.ant-upload-list-item-actions,.ant-upload-list-picture-card .ant-upload-list-item-actions:hover{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{position:static;display:block;width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.ant-upload-list-picture-card .ant-upload-list-item-name{display:none;margin:8px 0 0;padding:0;line-height:1.5715;text-align:center}.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{position:absolute;bottom:10px;display:block}.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item{background-color:#ffffff0a}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info{height:auto}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info:before,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete{display:none}.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:32px;width:calc(100% - 14px);padding-left:0}.ant-upload-list-text-container,.ant-upload-list-picture-container{transition:opacity .3s,height .3s}.ant-upload-list-text-container:before,.ant-upload-list-picture-container:before{display:table;width:0;height:0;content:""}.ant-upload-list-text-container .ant-upload-span,.ant-upload-list-picture-container .ant-upload-span{display:block;flex:auto}.ant-upload-list-text .ant-upload-span,.ant-upload-list-picture .ant-upload-span{display:flex;align-items:center}.ant-upload-list-text .ant-upload-span>*,.ant-upload-list-picture .ant-upload-span>*{flex:none}.ant-upload-list-text .ant-upload-list-item-name,.ant-upload-list-picture .ant-upload-list-item-name{flex:auto;margin:0;padding:0 8px}.ant-upload-list-text .ant-upload-list-item-card-actions,.ant-upload-list-picture .ant-upload-list-item-card-actions,.ant-upload-list-text .ant-upload-text-icon .anticon{position:static}.ant-upload-list .ant-upload-animate-inline-appear,.ant-upload-list .ant-upload-animate-inline-enter,.ant-upload-list .ant-upload-animate-inline-leave{animation-duration:.3s;animation-fill-mode:cubic-bezier(.78,.14,.15,.86)}.ant-upload-list .ant-upload-animate-inline-appear,.ant-upload-list .ant-upload-animate-inline-enter{animation-name:uploadAnimateInlineIn}.ant-upload-list .ant-upload-animate-inline-leave{animation-name:uploadAnimateInlineOut}@keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}.ant-upload-rtl{direction:rtl}.ant-upload-rtl.ant-upload.ant-upload-select-picture-card{margin-right:auto;margin-left:8px}.ant-upload-list-rtl{direction:rtl}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1{padding-right:22px;padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2{padding-right:22px;padding-left:28px}.ant-upload-list-rtl .ant-upload-list-item-name{padding-right:22px;padding-left:0}.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1{padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-card-actions{right:auto;left:0}.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-info{padding:0 4px 0 12px}.ant-upload-list-rtl .ant-upload-list-item .anticon-close{right:auto;left:4px}.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-progress{padding-right:26px;padding-left:0}.ant-upload-list-picture .ant-upload-list-item-info,.ant-upload-list-picture-card .ant-upload-list-item-info{padding:0}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail{right:8px;left:auto}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name{margin:0 8px 0 0;padding-right:48px;padding-left:8px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1{padding-right:48px;padding-left:18px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2{padding-right:48px;padding-left:36px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress{padding-right:0;padding-left:0}.ant-upload-list-rtl.ant-upload-list-picture .anticon-close,.ant-upload-list-rtl.ant-upload-list-picture-card .anticon-close{right:auto;left:8px}.ant-upload-list-rtl .ant-upload-list-picture-card-container{margin:0 0 8px 8px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{margin:8px 0 0;padding:0} +`;export{t as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/batchDownload-08be3fc5.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/batchDownload-08be3fc5.css new file mode 100644 index 0000000000000000000000000000000000000000..12e35668b27ef200160a12fb989c2795df351850 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/batchDownload-08be3fc5.css @@ -0,0 +1 @@ +.container[data-v-aab31da2]{background:var(--zp-secondary-background);height:100%;overflow:auto;display:flex;flex-direction:column}.container .actions-panel[data-v-aab31da2]{padding:8px;background-color:var(--zp-primary-background)}.container .file-list[data-v-aab31da2]{flex:1;list-style:none;padding:8px;height:var(--pane-max-height);width:100%}.container .file-list .hint[data-v-aab31da2]{text-align:center;font-size:2em;padding:30vh 128px 0} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/batchDownload-58c3c778.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/batchDownload-58c3c778.js new file mode 100644 index 0000000000000000000000000000000000000000..21ff20455042eb04e767be41e292feeb32250523 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/batchDownload-58c3c778.js @@ -0,0 +1 @@ +import{d as v,c2 as C,bO as I,o as i,y as _,p as f,c,n as r,x as h,v as d,r as e,m as F,L as x,c3 as z,c4 as B,V as $,X as R}from"./index-cc731081.js";import{u as S,b as V,k as E,F as A,g as L}from"./FileItem-8394fb78.js";import"./db-66d20dea.js";import"./shortcut-911a6445.js";const T={class:"actions-panel actions"},N={key:0,class:"file-list"},U={class:"hint"},H=v({__name:"batchDownload",props:{tabIdx:{},paneIdx:{},id:{}},setup(O){const{stackViewEl:w}=S().toRefs(),{itemSize:p,gridItems:k,cellWidth:b}=V(),l=E(),{selectdFiles:n}=C(l),u=I(),y=async t=>{const s=z(t);s&&l.addFiles(s.nodes)},D=async()=>{u.pushAction(async()=>{const t=await B.value.post("/zip",{paths:n.value.map(o=>o.fullpath)},{responseType:"blob"}),s=window.URL.createObjectURL(new Blob([t.data])),a=document.createElement("a");a.href=s,a.setAttribute("download",`iib_${new Date().toLocaleString()}.zip`),document.body.appendChild(a),a.click()})},g=t=>{n.value.splice(t,1)};return(t,s)=>{const a=$;return i(),_("div",{class:"container",ref_key:"stackViewEl",ref:w,onDrop:y},[f("div",T,[c(a,{onClick:s[0]||(s[0]=o=>e(l).selectdFiles=[])},{default:r(()=>[h(d(t.$t("clear")),1)]),_:1}),c(a,{onClick:D,type:"primary",loading:!e(u).isIdle},{default:r(()=>[h(d(t.$t("zipDownload")),1)]),_:1},8,["loading"])]),e(n).length?(i(),F(e(L),{key:1,ref:"scroller",class:"file-list",items:e(n).slice(),"item-size":e(p).first,"key-field":"fullpath","item-secondary-size":e(p).second,gridItems:e(k)},{default:r(({item:o,index:m})=>[c(A,{idx:m,file:o,"cell-width":e(b),"enable-close-icon":"",onCloseIconClick:j=>g(m),"full-screen-preview-image-url":e(x)(o),"enable-right-click-menu":!1},null,8,["idx","file","cell-width","onCloseIconClick","full-screen-preview-image-url"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):(i(),_("div",N,[f("p",U,d(t.$t("batchDownloaDDragAndDropHint")),1)]))],544)}}});const G=R(H,[["__scopeId","data-v-aab31da2"]]);export{G as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/db-66d20dea.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/db-66d20dea.js new file mode 100644 index 0000000000000000000000000000000000000000..fa7cd28c797810a3d999f43699ee6ba8eaab0868 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/db-66d20dea.js @@ -0,0 +1 @@ +import{c4 as t}from"./index-cc731081.js";const n=async()=>(await t.value.get("/db/basic_info")).data,c=async()=>(await t.value.get("/db/expired_dirs")).data,d=async()=>{await t.value.post("/db/update_image_data",{},{timeout:1/0})},g=async(a,s)=>(await t.value.post("/db/match_images_by_tags",{...a,cursor:s})).data,u=async a=>(await t.value.post("/db/add_custom_tag",a)).data,p=async a=>(await t.value.post("/db/toggle_custom_tag_to_img",a)).data,i=async a=>{await t.value.post("/db/remove_custom_tag",a)},m=async(a,s)=>(await t.value.get("/db/search_by_substr",{params:{substr:a,cursor:s}})).data,e="/db/extra_paths",_=async a=>{await t.value.post(e,a)},b=async a=>{await t.value.delete(e,{data:a})},y=async a=>(await t.value.post("/db/get_image_tags",{paths:a})).data;export{_ as a,n as b,c,u as d,i as e,m as f,g,y as h,b as r,p as t,d as u}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/emptyStartup-94a685e9.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/emptyStartup-94a685e9.js new file mode 100644 index 0000000000000000000000000000000000000000..d86a1fbed76283417a467707119e08149eb6aa6a --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/emptyStartup-94a685e9.js @@ -0,0 +1 @@ +import{Y as ge,Z as _e,d as ue,u as be,$ as D,g as N,a0 as ye,h as x,c as m,a1 as ke,a2 as we,a3 as Ce,a4 as Oe,a5 as xe,a6 as $e,a as te,a7 as Ie,P as I,a8 as Se,a9 as Pe,aa as ze,ab as Ae,ac as Ee,ad as Me,ae as De,af as Te,ag as de,ah as Fe,R as Q,ai as f,aj as Le,U as Ne,ak as He,al as X,am as V,k as je,an as Be,ao as ne,o as p,y as h,p as n,v as i,r as c,C as _,m as H,n as S,q as w,ap as ae,x as M,z as j,A as B,aq as se,ar as Ve,as as Re,V as qe,at as Ge,au as Ue,X as We}from"./index-cc731081.js";import{a as Qe,r as Xe}from"./db-66d20dea.js";var Ye={success:Se,info:Pe,error:ze,warning:Ae},Ze={success:Ee,info:Me,error:De,warning:Te},Je=_e("success","info","warning","error"),Ke=function(){return{type:I.oneOf(Je),closable:{type:Boolean,default:void 0},closeText:I.any,message:I.any,description:I.any,afterClose:Function,showIcon:{type:Boolean,default:void 0},prefixCls:String,banner:{type:Boolean,default:void 0},icon:I.any,closeIcon:I.any,onClose:Function}},et=ue({compatConfig:{MODE:3},name:"AAlert",inheritAttrs:!1,props:Ke(),setup:function(t,e){var l=e.slots,r=e.emit,b=e.attrs,P=e.expose,z=be("alert",t),q=z.prefixCls,G=z.direction,C=D(!1),a=D(!1),u=D(),$=function(d){d.preventDefault();var s=u.value;s.style.height="".concat(s.offsetHeight,"px"),s.style.height="".concat(s.offsetHeight,"px"),C.value=!0,r("close",d)},g=function(){var d;C.value=!1,a.value=!0,(d=t.afterClose)===null||d===void 0||d.call(t)};P({animationEnd:g});var O=D({});return function(){var y,d,s=t.banner,k=t.closeIcon,J=k===void 0?(y=l.closeIcon)===null||y===void 0?void 0:y.call(l):k,U=t.closable,A=t.type,E=t.showIcon,W=N(l,t,"closeText"),T=N(l,t,"description"),K=N(l,t,"message"),F=N(l,t,"icon");E=s&&E===void 0?!0:E,A=s&&A===void 0?"warning":A||"info";var pe=(T?Ze:Ye)[A]||null;W&&(U=!0);var v=q.value,me=ye(v,(d={},x(d,"".concat(v,"-").concat(A),!0),x(d,"".concat(v,"-closing"),C.value),x(d,"".concat(v,"-with-description"),!!T),x(d,"".concat(v,"-no-icon"),!E),x(d,"".concat(v,"-banner"),!!s),x(d,"".concat(v,"-closable"),U),x(d,"".concat(v,"-rtl"),G.value==="rtl"),d)),ve=U?m("button",{type:"button",onClick:$,class:"".concat(v,"-close-icon"),tabindex:0},[W?m("span",{class:"".concat(v,"-close-text")},[W]):J===void 0?m(ke,null,null):J]):null,he=F&&(we(F)?Ce(F,{class:"".concat(v,"-icon")}):m("span",{class:"".concat(v,"-icon")},[F]))||m(pe,{class:"".concat(v,"-icon")},null),fe=Oe("".concat(v,"-motion"),{appear:!1,css:!0,onAfterLeave:g,onBeforeLeave:function(L){L.style.maxHeight="".concat(L.offsetHeight,"px")},onLeave:function(L){L.style.maxHeight="0px"}});return a.value?null:m(Ie,fe,{default:function(){return[xe(m("div",te(te({role:"alert"},b),{},{style:[b.style,O.value],class:[b.class,me],"data-show":!C.value,ref:u}),[E?he:null,m("div",{class:"".concat(v,"-content")},[K?m("div",{class:"".concat(v,"-message")},[K]):null,T?m("div",{class:"".concat(v,"-description")},[T]):null]),ve]),[[$e,!C.value]])]}})}}});const tt=ge(et);var nt={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M688 312v-48c0-4.4-3.6-8-8-8H296c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8zm-392 88c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8H296zm376 116c-119.3 0-216 96.7-216 216s96.7 216 216 216 216-96.7 216-216-96.7-216-216-216zm107.5 323.5C750.8 868.2 712.6 884 672 884s-78.8-15.8-107.5-44.5C535.8 810.8 520 772.6 520 732s15.8-78.8 44.5-107.5C593.2 595.8 631.4 580 672 580s78.8 15.8 107.5 44.5C808.2 653.2 824 691.4 824 732s-15.8 78.8-44.5 107.5zM761 656h-44.3c-2.6 0-5 1.2-6.5 3.3l-63.5 87.8-23.1-31.9a7.92 7.92 0 00-6.5-3.3H573c-6.5 0-10.3 7.4-6.5 12.7l73.8 102.1c3.2 4.4 9.7 4.4 12.9 0l114.2-158c3.9-5.3.1-12.7-6.4-12.7zM440 852H208V148h560v344c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V108c0-17.7-14.3-32-32-32H168c-17.7 0-32 14.3-32 32v784c0 17.7 14.3 32 32 32h272c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z"}}]},name:"file-done",theme:"outlined"};const at=nt;function oe(o){for(var t=1;t{let t;if({}.TAURI_ARCH){const e=await Fe({directory:!0});if(typeof e=="string")t=e;else return}else t=await new Promise(e=>{const l=D("");Q.confirm({title:f("inputTargetFolderPath"),content:()=>Le(Ne,{value:l.value,"onUpdate:value":r=>l.value=r}),async onOk(){const r=l.value;(await He([r]))[r]?e(l.value):X.error(f("pathDoesNotExist"))}})});Q.confirm({content:f("confirmToAddToExtraPath"),async onOk(){await Qe({type:o,path:t}),X.success(f("addCompleted")),V.emit("searchIndexExpired"),V.emit("updateGlobalSetting")}})},re=(o,t)=>{Q.confirm({content:f("confirmDelete"),closable:!0,async onOk(){await Xe({type:t,path:o}),X.success(f("removeCompleted")),V.emit("searchIndexExpired"),V.emit("updateGlobalSetting")}})},R=o=>(Ge("data-v-7cef9bff"),o=o(),Ue(),o),rt={class:"container"},ut={class:"header"},dt={key:0,style:{"margin-left":"16px","font-size":"1.5em"}},pt=R(()=>n("div",{"flex-placeholder":""},null,-1)),mt=R(()=>n("a",{href:"https://github.com/zanllp/sd-webui-infinite-image-browsing",target:"_blank",class:"last-record"},"Github",-1)),vt={href:"https://github.com/zanllp/sd-webui-infinite-image-browsing/blob/main/.env.example",target:"_blank",class:"last-record"},ht={href:"https://github.com/zanllp/sd-webui-infinite-image-browsing/wiki/Change-log",target:"_blank",class:"last-record"},ft={href:"https://github.com/zanllp/sd-webui-infinite-image-browsing/issues/90",target:"_blank",class:"last-record"},gt={class:"access-mode-message"},_t=R(()=>n("div",{"flex-placeholder":""},null,-1)),bt={class:"access-mode-message"},yt=R(()=>n("div",{"flex-placeholder":""},null,-1)),kt={class:"content"},wt={key:0,class:"feature-item"},Ct={class:"text line-clamp-1"},Ot=["onClick"],xt={class:"text line-clamp-2"},$t={key:1,class:"feature-item"},It={class:"text line-clamp-1"},St=["onClick"],Pt={class:"text line-clamp-2"},zt={class:"feature-item"},At=["onClick"],Et={class:"text line-clamp-1"},Mt={class:"text line-clamp-1"},Dt={class:"text line-clamp-1"},Tt={class:"text line-clamp-1"},Ft={key:2,class:"feature-item recent"},Lt={class:"title"},Nt=["onClick"],Ht={class:"text line-clamp-1"},jt=ue({__name:"emptyStartup",props:{tabIdx:{},paneIdx:{}},setup(o){const t=o,e=je(),l=Be(),r={local:f("local"),"tag-search":f("imgSearch"),"fuzzy-search":f("fuzzy-search"),"global-setting":f("globalSettings"),"batch-download":f("batchDownload")+" / "+f("archive")},b=(a,u,$=!1)=>{let g;switch(a){case"tag-search-matched-image-grid":case"img-sli":return;case"global-setting":case"tag-search":case"batch-download":case"fuzzy-search":case"empty":g={type:a,name:r[a],key:Date.now()+se()};break;case"local":g={type:a,name:r[a],key:Date.now()+se(),path:u,walkModePath:$?u:void 0}}const O=e.tabList[t.tabIdx];O.panes.splice(t.paneIdx,1,g),O.key=g.key},P=ne(()=>{var a;return(a=e.tabListHistoryRecord)==null?void 0:a[1]}),z=ne(()=>e.quickMovePaths.filter(({key:a,type:u})=>a==="outdir_txt2img_samples"||a==="outdir_img2img_samples"||a==="outdir_txt2img_grids"||a==="outdir_img2img_grids"||u==="walk")),q=window.parent!==window,G=()=>window.parent.open("/infinite_image_browsing"+(window.parent.location.href.includes("theme=dark")?"?__theme=dark":"")),C=()=>{Ve(P.value),e.tabList=Re(P.value.tabs)};return(a,u)=>{var O,y,d;const $=tt,g=qe;return p(),h("div",rt,[n("div",ut,[n("h1",null,i(a.$t("welcome")),1),(O=c(e).conf)!=null&&O.enable_access_control&&c(e).dontShowAgain?(p(),h("div",dt,[m(c(ie),{title:"Access Control mode",style:{"vertical-align":"text-bottom"}})])):_("",!0),pt,mt,n("a",vt,i(a.$t("privacyAndSecurity")),1),n("a",ht,i(a.$t("changlog")),1),n("a",ft,i(a.$t("faq")),1)]),(y=c(e).conf)!=null&&y.enable_access_control&&!c(e).dontShowAgain?(p(),H($,{key:0,"show-icon":""},{message:S(()=>[n("div",gt,[n("div",null,i(a.$t("accessControlModeTips")),1),_t,n("a",{onClick:u[0]||(u[0]=w(s=>c(e).dontShowAgain=!0,["prevent"]))},i(a.$t("dontShowAgain")),1)])]),icon:S(()=>[m(c(ie))]),_:1})):_("",!0),c(e).dontShowAgainNewImgOpts?_("",!0):(p(),H($,{key:1,"show-icon":""},{message:S(()=>[n("div",bt,[n("div",null,i(a.$t("majorUpdateCustomCellSizeTips")),1),yt,n("a",{onClick:u[1]||(u[1]=w(s=>c(e).dontShowAgainNewImgOpts=!0,["prevent"]))},i(a.$t("dontShowAgain")),1)])]),_:1})),n("div",kt,[z.value.length?(p(),h("div",wt,[n("h2",null,i(a.$t("walkMode")),1),n("ul",null,[n("li",{onClick:u[2]||(u[2]=s=>c(ce)("walk")),class:"item",style:{"text-align":""}},[n("span",Ct,[m(c(ae)),M(" "+i(a.$t("add")),1)])]),(p(!0),h(j,null,B(z.value,s=>(p(),h("li",{key:s.key,class:"item rem",onClick:w(k=>b("local",s.dir,!0),["prevent"])},[n("span",xt,i(s.zh),1),s.can_delete?(p(),H(g,{key:0,type:"link",onClick:w(k=>c(re)(s.dir,"walk"),["stop"])},{default:S(()=>[M(i(a.$t("remove")),1)]),_:2},1032,["onClick"])):_("",!0)],8,Ot))),128))])])):_("",!0),c(e).quickMovePaths.length?(p(),h("div",$t,[n("h2",null,i(a.$t("launchFromQuickMove")),1),n("ul",null,[n("li",{onClick:u[3]||(u[3]=s=>c(ce)("scanned")),class:"item",style:{"text-align":""}},[n("span",It,[m(c(ae)),M(" "+i(a.$t("add")),1)])]),(p(!0),h(j,null,B(c(e).quickMovePaths.filter(s=>s.type!=="walk"),s=>(p(),h("li",{key:s.key,class:"item rem",onClick:w(k=>b("local",s.dir),["prevent"])},[n("span",Pt,i(s.zh),1),s.can_delete&&s.type=="scanned"?(p(),H(g,{key:0,type:"link",onClick:w(k=>c(re)(s.dir,"scanned"),["stop"])},{default:S(()=>[M(i(a.$t("remove")),1)]),_:2},1032,["onClick"])):_("",!0)],8,St))),128))])])):_("",!0),n("div",zt,[n("h2",null,i(a.$t("launch")),1),n("ul",null,[(p(!0),h(j,null,B(Object.keys(r),s=>(p(),h("li",{key:s,class:"item",onClick:w(k=>b(s),["prevent"])},[n("span",Et,i(r[s]),1)],8,At))),128)),n("li",{class:"item",onClick:u[4]||(u[4]=s=>c(l).opened=!0)},[n("span",Mt,i(a.$t("imgCompare")),1)]),q?(p(),h("li",{key:0,class:"item",onClick:G},[n("span",Dt,i(a.$t("openInNewWindow")),1)])):_("",!0),(d=P.value)!=null&&d.tabs.length?(p(),h("li",{key:1,class:"item",onClick:C},[n("span",Tt,i(a.$t("restoreLastRecord")),1)])):_("",!0)])]),c(e).recent.length?(p(),h("div",Ft,[n("div",Lt,[n("h2",null,i(a.$t("recent")),1),m(g,{onClick:u[5]||(u[5]=s=>c(e).recent=[]),type:"link"},{default:S(()=>[M(i(a.$t("clear")),1)]),_:1})]),n("ul",null,[(p(!0),h(j,null,B(c(e).recent,s=>(p(),h("li",{key:s.key,class:"item",onClick:w(k=>b("local",s.path),["prevent"])},[m(c(ot),{class:"icon"}),n("span",Ht,i(s.path),1)],8,Nt))),128))])])):_("",!0)])])}}});const Rt=We(jt,[["__scopeId","data-v-7cef9bff"]]);export{Rt as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/emptyStartup-feba1fd7.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/emptyStartup-feba1fd7.css new file mode 100644 index 0000000000000000000000000000000000000000..7200aff6ffe7020804ab51facbe4e14d9c125ddd --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/emptyStartup-feba1fd7.css @@ -0,0 +1 @@ +.ant-alert{box-sizing:border-box;margin:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:flex;align-items:center;padding:8px 15px;word-wrap:break-word;border-radius:2px}.ant-alert-content{flex:1;min-width:0}.ant-alert-icon{margin-right:8px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#f6ffed;border:1px solid #b7eb8f}.ant-alert-success .ant-alert-icon{color:#52c41a}.ant-alert-info{background-color:#fff1e6;border:1px solid #f7ae83}.ant-alert-info .ant-alert-icon{color:#d03f0a}.ant-alert-warning{background-color:#fffbe6;border:1px solid #ffe58f}.ant-alert-warning .ant-alert-icon{color:#faad14}.ant-alert-error{background-color:#fff2f0;border:1px solid #ffccc7}.ant-alert-error .ant-alert-icon{color:#ff4d4f}.ant-alert-error .ant-alert-description>pre{margin:0;padding:0}.ant-alert-action{margin-left:8px}.ant-alert-close-icon{margin-left:8px;padding:0;overflow:hidden;font-size:12px;line-height:12px;background-color:transparent;border:none;outline:none;cursor:pointer}.ant-alert-close-icon .anticon-close{color:#00000073;transition:color .3s}.ant-alert-close-icon .anticon-close:hover{color:#000000bf}.ant-alert-close-text{color:#00000073;transition:color .3s}.ant-alert-close-text:hover{color:#000000bf}.ant-alert-with-description{align-items:flex-start;padding:15px 15px 15px 24px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{margin-right:15px;font-size:24px}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:#000000d9;font-size:16px}.ant-alert-message{color:#000000d9}.ant-alert-with-description .ant-alert-description{display:block}.ant-alert.ant-alert-motion-leave{overflow:hidden;opacity:1;transition:max-height .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),padding-top .3s cubic-bezier(.78,.14,.15,.86),padding-bottom .3s cubic-bezier(.78,.14,.15,.86),margin-bottom .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert.ant-alert-motion-leave-active{max-height:0;margin-bottom:0!important;padding-top:0;padding-bottom:0;opacity:0}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}.ant-alert.ant-alert-rtl{direction:rtl}.ant-alert-rtl .ant-alert-icon{margin-right:auto;margin-left:8px}.ant-alert-rtl .ant-alert-action,.ant-alert-rtl .ant-alert-close-icon{margin-right:8px;margin-left:auto}.ant-alert-rtl.ant-alert-with-description{padding-right:24px;padding-left:15px}.ant-alert-rtl.ant-alert-with-description .ant-alert-icon{margin-right:auto;margin-left:15px}.access-mode-message[data-v-7cef9bff]{display:flex;flex-direction:row;align-items:center}.access-mode-message a[data-v-7cef9bff]{margin-left:16px}.container[data-v-7cef9bff]{padding:20px;background-color:var(--zp-secondary-background);height:100%;overflow:auto}.header[data-v-7cef9bff]{display:flex;justify-content:space-between;align-items:center}.header h1[data-v-7cef9bff]{font-size:28px;font-weight:700;color:var(--zp-primary);margin:0}.last-record[data-v-7cef9bff]{margin-left:16px;font-size:14px;color:var(--zp-secondary)}.last-record a[data-v-7cef9bff]{text-decoration:none;color:var(--zp-secondary)}.last-record a[data-v-7cef9bff]:hover{color:var(--zp-primary)}.content[data-v-7cef9bff]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));grid-gap:20px;margin-top:16px}.feature-item[data-v-7cef9bff]{background-color:var(--zp-primary-background);border-radius:8px;box-shadow:0 1px 2px #0000001a;padding:20px}.feature-item ul[data-v-7cef9bff]{list-style:none;padding:4px;max-height:70vh;overflow-y:auto}.feature-item.recent .title[data-v-7cef9bff]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.feature-item.recent .title h2[data-v-7cef9bff]{margin:0}.feature-item .item[data-v-7cef9bff]{margin-bottom:10px;padding:4px 8px;display:flex;align-items:center}.feature-item .item.rem[data-v-7cef9bff]{display:flex;align-items:center;justify-content:space-between}.feature-item .item[data-v-7cef9bff]:hover{background:var(--zp-secondary-background);border-radius:4px;color:var(--primary-color);cursor:pointer}.feature-item .icon[data-v-7cef9bff]{margin-right:8px}.feature-item h2[data-v-7cef9bff]{margin-top:0;margin-bottom:20px;font-size:20px;font-weight:700;color:var(--zp-primary)}.text[data-v-7cef9bff]{flex:1;font-size:16px;word-break:break-all} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/fullScreenContextMenu-73df97d0.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/fullScreenContextMenu-73df97d0.css new file mode 100644 index 0000000000000000000000000000000000000000..2a4229ee8c49e1bb5dfe58d3371326425c53dda5 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/fullScreenContextMenu-73df97d0.css @@ -0,0 +1 @@ +.ant-spin{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;display:none;color:#d03f0a;text-align:center;vertical-align:middle;opacity:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #fff}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none \ ;width:100%;height:100%;background:#fff;opacity:0;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;opacity:.5;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:#00000073}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#d03f0a;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.ant-spin-dot-item:nth-child(1){top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;animation-delay:1.2s}.ant-spin-dot-spin{transform:rotate(45deg);animation:antRotate 1.2s infinite linear}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ant-spin-blur{background:#fff;opacity:.5}}@keyframes antSpinMove{to{opacity:1}}@keyframes antRotate{to{transform:rotate(405deg)}}.ant-spin-rtl{direction:rtl}.ant-spin-rtl .ant-spin-dot-spin{transform:rotate(-45deg);animation-name:antRotateRtl}@keyframes antRotateRtl{to{transform:rotate(-405deg)}}.full-screen-menu[data-v-3ba1b3cd]{position:fixed;z-index:99999;background:var(--zp-primary-background);padding:8px 16px;box-shadow:0 0 4px var(--zp-secondary);border-radius:4px}.full-screen-menu .tags-container[data-v-3ba1b3cd]{margin:4px 0}.full-screen-menu .tags-container .tag[data-v-3ba1b3cd]{margin-right:4px;padding:2px 16px;border-radius:4px;display:inline-block;cursor:pointer;font-weight:700;transition:.5s all ease;border:2px solid var(--tag-color);color:var(--tag-color);background:var(--zp-primary-background);user-select:none}.full-screen-menu .tags-container .tag.selected[data-v-3ba1b3cd]{background:var(--tag-color);color:#fff}.full-screen-menu .container[data-v-3ba1b3cd]{height:100%;display:flex;overflow:hidden;flex-direction:column}.full-screen-menu .gen-info[data-v-3ba1b3cd]{flex:1;word-break:break-all;white-space:pre-line;overflow:auto;z-index:1;padding-top:4px;position:relative}.full-screen-menu .gen-info .info-tags .info-tag[data-v-3ba1b3cd]{display:inline-block;overflow:hidden;border-radius:4px;margin-right:8px;border:2px solid var(--zp-primary)}.full-screen-menu .gen-info .info-tags .name[data-v-3ba1b3cd]{background-color:var(--zp-primary);color:var(--zp-primary-background);padding:4px}.full-screen-menu .gen-info .info-tags .value[data-v-3ba1b3cd]{padding:4px}.full-screen-menu.unset-size[data-v-3ba1b3cd]{width:unset!important;height:unset!important}.full-screen-menu .mouse-sensor[data-v-3ba1b3cd]{position:absolute;bottom:0;right:0;transform:rotate(90deg);cursor:se-resize;z-index:1;background:var(--zp-primary-background);border-radius:2px}.full-screen-menu .mouse-sensor>*[data-v-3ba1b3cd]{font-size:18px;padding:4px}.full-screen-menu .action-bar[data-v-3ba1b3cd]{display:flex;align-items:center;user-select:none;gap:4px}.full-screen-menu .action-bar .icon[data-v-3ba1b3cd]{font-size:1.5em;padding:2px 4px;border-radius:4px}.full-screen-menu .action-bar .icon[data-v-3ba1b3cd]:hover{background:var(--zp-secondary-variant-background)}.full-screen-menu .action-bar>*[data-v-3ba1b3cd]{flex-wrap:wrap} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/fullScreenContextMenu-d94d841d.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/fullScreenContextMenu-d94d841d.js new file mode 100644 index 0000000000000000000000000000000000000000..8a2a24f595ef18de1ed4abdaa6793d8147aa4533 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/fullScreenContextMenu-d94d841d.js @@ -0,0 +1,2 @@ +import{d as fe,bq as he,aI as ye,bW as be,ax as we,aC as X,bX as Oe,bY as K,e as R,c as o,_ as _e,h as C,a as ee,bz as Ee,P as te,ag as j,aw as Le,aM as $e,l as ve,k as Se,$ as T,ao as U,bO as xe,bZ as Pe,b_ as Ce,ai as A,o as h,y as b,p as N,r as u,m as I,n as p,L as ne,b$ as Me,C as M,z as B,x as y,v as g,t as ie,A as V,N as ae,B as ke,q as De,V as re,W as ze,c0 as Ae,M as Ne,X as je}from"./index-cc731081.js";import{i as Te,j as We,_ as Ie,D as Be}from"./FileItem-8394fb78.js";import"./shortcut-911a6445.js";var Fe=["class","style"],Ue=function(){return{prefixCls:String,spinning:{type:Boolean,default:void 0},size:String,wrapperClassName:String,tip:te.any,delay:Number,indicator:te.any}},F=null;function Ve(t,e){return!!t&&!!e&&!isNaN(Number(e))}function kt(t){var e=t.indicator;F=typeof e=="function"?e:function(){return o(e,null,null)}}const Dt=fe({compatConfig:{MODE:3},name:"ASpin",inheritAttrs:!1,props:he(Ue(),{size:"default",spinning:!0,wrapperClassName:""}),setup:function(){return{originalUpdateSpinning:null,configProvider:ye("configProvider",be)}},data:function(){var e=this.spinning,i=this.delay,n=Ve(e,i);return{sSpinning:e&&!n}},created:function(){this.originalUpdateSpinning=this.updateSpinning,this.debouncifyUpdateSpinning(this.$props)},mounted:function(){this.updateSpinning()},updated:function(){var e=this;we(function(){e.debouncifyUpdateSpinning(),e.updateSpinning()})},beforeUnmount:function(){this.cancelExistingSpin()},methods:{debouncifyUpdateSpinning:function(e){var i=e||this.$props,n=i.delay;n&&(this.cancelExistingSpin(),this.updateSpinning=X(this.originalUpdateSpinning,n))},updateSpinning:function(){var e=this.spinning,i=this.sSpinning;i!==e&&(this.sSpinning=e)},cancelExistingSpin:function(){var e=this.updateSpinning;e&&e.cancel&&e.cancel()},renderIndicator:function(e){var i="".concat(e,"-dot"),n=Oe(this,"indicator");return n===null?null:(Array.isArray(n)&&(n=n.length===1?n[0]:n),K(n)?R(n,{class:i}):F&&K(F())?R(F(),{class:i}):o("span",{class:"".concat(i," ").concat(e,"-dot-spin")},[o("i",{class:"".concat(e,"-dot-item")},null),o("i",{class:"".concat(e,"-dot-item")},null),o("i",{class:"".concat(e,"-dot-item")},null),o("i",{class:"".concat(e,"-dot-item")},null)]))}},render:function(){var e,i,n,l=this.$props,w=l.size,_=l.prefixCls,$=l.tip,S=$===void 0?(e=(i=this.$slots).tip)===null||e===void 0?void 0:e.call(i):$,E=l.wrapperClassName,x=this.$attrs,P=x.class,k=x.style,O=_e(x,Fe),s=this.configProvider,D=s.getPrefixCls,L=s.direction,m=D("spin",_),r=this.sSpinning,a=(n={},C(n,m,!0),C(n,"".concat(m,"-sm"),w==="small"),C(n,"".concat(m,"-lg"),w==="large"),C(n,"".concat(m,"-spinning"),r),C(n,"".concat(m,"-show-text"),!!S),C(n,"".concat(m,"-rtl"),L==="rtl"),C(n,P,!!P),n),f=o("div",ee(ee({},O),{},{style:k,class:a}),[this.renderIndicator(m),S?o("div",{class:"".concat(m,"-text")},[S]):null]),c=Ee(this);if(c&&c.length){var d,z=(d={},C(d,"".concat(m,"-container"),!0),C(d,"".concat(m,"-blur"),r),d);return o("div",{class:["".concat(m,"-nested-loading"),E]},[r&&o("div",{key:"loading"},[f]),o("div",{class:z,key:"container"},[c])])}return f}});var Xe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M855 160.1l-189.2 23.5c-6.6.8-9.3 8.8-4.7 13.5l54.7 54.7-153.5 153.5a8.03 8.03 0 000 11.3l45.1 45.1c3.1 3.1 8.2 3.1 11.3 0l153.6-153.6 54.7 54.7a7.94 7.94 0 0013.5-4.7L863.9 169a7.9 7.9 0 00-8.9-8.9zM416.6 562.3a8.03 8.03 0 00-11.3 0L251.8 715.9l-54.7-54.7a7.94 7.94 0 00-13.5 4.7L160.1 855c-.6 5.2 3.7 9.5 8.9 8.9l189.2-23.5c6.6-.8 9.3-8.8 4.7-13.5l-54.7-54.7 153.6-153.6c3.1-3.1 3.1-8.2 0-11.3l-45.2-45z"}}]},name:"arrows-alt",theme:"outlined"};const Ye=Xe;function le(t){for(var e=1;e{a.stopPropagation(),a.preventDefault(),!(!t.value||!e.value)&&(w=a instanceof MouseEvent?a.clientX:a.touches[0].clientX,_=a instanceof MouseEvent?a.clientY:a.touches[0].clientY,$=t.value.offsetWidth,S=t.value.offsetHeight,l.x=e.value.offsetLeft,l.y=e.value.offsetTop,document.documentElement.addEventListener("mousemove",O),document.documentElement.addEventListener("touchmove",O),document.documentElement.addEventListener("mouseup",s),document.documentElement.addEventListener("touchend",s))},O=a=>{if(!t.value||!e.value)return;let f=$+((a instanceof MouseEvent?a.clientX:a.touches[0].clientX)-w),c=S+((a instanceof MouseEvent?a.clientY:a.touches[0].clientY)-_),d=l.x+((a instanceof MouseEvent?a.clientX:a.touches[0].clientX)-w),z=l.y+((a instanceof MouseEvent?a.clientY:a.touches[0].clientY)-_);d+e.value.offsetWidth>window.innerWidth&&(d=window.innerWidth-e.value.offsetWidth),t.value.offsetLeft+f>window.innerWidth&&(f=window.innerWidth-t.value.offsetLeft),z+e.value.offsetHeight>window.innerHeight&&(z=window.innerHeight-e.value.offsetHeight),t.value.offsetTop+c>window.innerHeight&&(c=window.innerHeight-t.value.offsetTop),t.value.style.width=`${f}px`,t.value.style.height=`${c}px`,e.value.style.left=`${d}px`,e.value.style.top=`${z}px`,n!=null&&n.onResize&&n.onResize(f,c)},s=()=>{document.documentElement.removeEventListener("mousemove",O),document.documentElement.removeEventListener("touchmove",O),document.documentElement.removeEventListener("mouseup",s),document.documentElement.removeEventListener("touchend",s)},D=a=>{a.stopPropagation(),a.preventDefault(),!(!t.value||!i.value)&&(P=!0,E=t.value.offsetLeft,x=t.value.offsetTop,w=a instanceof MouseEvent?a.clientX:a.touches[0].clientX,_=a instanceof MouseEvent?a.clientY:a.touches[0].clientY,document.documentElement.addEventListener("mousemove",L),document.documentElement.addEventListener("touchmove",L),document.documentElement.addEventListener("mouseup",m),document.documentElement.addEventListener("touchend",m))},L=a=>{if(!t.value||!i.value||!P)return;const f=E+((a instanceof MouseEvent?a.clientX:a.touches[0].clientX)-w),c=x+((a instanceof MouseEvent?a.clientY:a.touches[0].clientY)-_);f<0?t.value.style.left="0px":f+t.value.offsetWidth>window.innerWidth?t.value.style.left=`${window.innerWidth-t.value.offsetWidth}px`:t.value.style.left=`${f}px`,c<0?t.value.style.top="0px":c+t.value.offsetHeight>window.innerHeight?t.value.style.top=`${window.innerHeight-t.value.offsetHeight}px`:t.value.style.top=`${c}px`,n!=null&&n.onDrag&&n.onDrag(f,c)},m=()=>{P=!1,document.documentElement.removeEventListener("mousemove",L),document.documentElement.removeEventListener("touchmove",L),document.documentElement.removeEventListener("mouseup",m),document.documentElement.removeEventListener("touchend",m)},r=()=>{if(!t.value||!e.value)return;let a=t.value.offsetLeft,f=t.value.offsetTop,c=t.value.offsetWidth,d=t.value.offsetHeight;a+c>window.innerWidth&&(a=window.innerWidth-c,a<0&&(a=0,c=window.innerWidth)),f+d>window.innerHeight&&(f=window.innerHeight-d,f<0&&(f=0,d=window.innerHeight)),t.value.style.left=`${a}px`,t.value.style.top=`${f}px`,t.value.style.width=`${c}px`,t.value.style.height=`${d}px`};return Le(()=>{!t.value||!n||(typeof n.width=="number"&&(t.value.style.width=`${n.width}px`),typeof n.height=="number"&&(t.value.style.height=`${n.height}px`),typeof n.left=="number"&&(t.value.style.left=`${n.left}px`),typeof n.top=="number"&&(t.value.style.top=`${n.top}px`),r(),window.addEventListener("resize",r))}),$e(()=>{document.documentElement.removeEventListener("mousemove",O),document.documentElement.removeEventListener("touchmove",O),document.documentElement.removeEventListener("mouseup",s),document.documentElement.removeEventListener("touchend",s),document.documentElement.removeEventListener("mousemove",L),document.documentElement.removeEventListener("touchmove",L),document.documentElement.removeEventListener("mouseup",m),document.documentElement.removeEventListener("touchend",m),window.removeEventListener("resize",r)}),ve(()=>[t.value,e.value,i.value],([a,f,c])=>{a&&f&&(f.addEventListener("mousedown",k),f.addEventListener("touchstart",k)),a&&c&&(c.addEventListener("mousedown",D),c.addEventListener("touchstart",D))}),{handleResizeMouseDown:k,handleDragMouseDown:D}}const vt={class:"container"},pt={class:"action-bar"},mt=["title"],gt=["title"],ht={key:0,class:"icon",style:{cursor:"pointer"}},yt={key:0,"flex-placeholder":""},bt={key:1,class:"action-bar"},wt={key:0,class:"gen-info"},Ot={class:"info-tags"},_t={class:"name"},Et={class:"value"},Lt={key:0,class:"tags-container"},$t=["onClick"],St=["title"],xt=fe({__name:"fullScreenContextMenu",props:{file:{},idx:{}},emits:["contextMenuClick"],setup(t,{emit:e}){const i=t,n=Se(),l=Te(),w=T(),_=U(()=>l.tagMap.get(i.file.fullpath)??[]),$=T(""),S=xe(),E=T(""),x=U(()=>E.value.split(` +`));ve(()=>{var r;return(r=i==null?void 0:i.file)==null?void 0:r.fullpath},async r=>{r&&(S.tasks.forEach(a=>a.cancel()),S.pushAction(()=>Pe(r)).res.then(a=>{E.value=a}))},{immediate:!0});const P=T(),k=T(),O={left:100,top:100,width:512,height:384,expanded:!0},s=Ce("fullScreenContextMenu.vue-drag",O);s.value&&(s.value.left<0||s.value.top<0)&&(s.value={...O}),ft(w,P,k,{...s.value,onDrag:X(function(r,a){s.value={...s.value,left:r,top:a}},300),onResize:X(function(r,a){s.value={...s.value,width:r,height:a}},300)});function D(r){return r.parentNode}We("load",r=>{const a=r.target;a.className==="ant-image-preview-img"&&($.value=`${a.naturalWidth} x ${a.naturalHeight}`)},{capture:!0});const L=U(()=>{const r=[{name:A("fileName"),val:i.file.name},{name:A("fileSize"),val:i.file.size}];return $.value&&r.push({name:A("resolution"),val:$.value}),r}),m=()=>ie(x.value[0]??"");return(r,a)=>{var J;const f=Be,c=re,d=ze,z=Ae,pe=Ne,me=re;return h(),b("div",{ref_key:"el",ref:w,class:ae(["full-screen-menu",{"unset-size":!u(s).expanded}]),onWheelCapture:a[5]||(a[5]=De(()=>{},["stop"]))},[N("div",vt,[N("div",pt,[N("div",{ref_key:"dragHandle",ref:k,class:"icon",style:{cursor:"grab"},title:u(A)("dragToMovePanel")},[o(u(Je))],8,mt),N("div",{class:"icon",style:{cursor:"pointer"},onClick:a[0]||(a[0]=v=>u(s).expanded=!u(s).expanded),title:u(A)("clickToToggleMaximizeMinimize")},[u(s).expanded?(h(),I(u(tt),{key:0})):(h(),I(u(rt),{key:1}))],8,gt),o(f,{"get-popup-container":D},{overlay:p(()=>[o(Ie,{file:r.file,idx:r.idx,"selected-tag":_.value,"disable-delete":u(ne)(r.file)===u(n).fullscreenPreviewInitialUrl,onContextMenuClick:a[1]||(a[1]=(v,W,ge)=>e("contextMenuClick",v,W,ge))},null,8,["file","idx","selected-tag","disable-delete"])]),default:p(()=>[u(s).expanded?M("",!0):(h(),b("div",ht,[o(u(Me))]))]),_:1}),u(s).expanded?(h(),b("div",yt)):M("",!0),u(s).expanded?(h(),b("div",bt,[o(f,{trigger:["hover"],"get-popup-container":D},{overlay:p(()=>[o(pe,{onClick:a[2]||(a[2]=v=>e("contextMenuClick",v,r.file,r.idx))},{default:p(()=>{var v;return[((v=u(n).conf)==null?void 0:v.launch_mode)!=="server"?(h(),b(B,{key:0},[o(d,{key:"send2txt2img"},{default:p(()=>[y(g(r.$t("sendToTxt2img")),1)]),_:1}),o(d,{key:"send2img2img"},{default:p(()=>[y(g(r.$t("sendToImg2img")),1)]),_:1}),o(d,{key:"send2inpaint"},{default:p(()=>[y(g(r.$t("sendToInpaint")),1)]),_:1}),o(d,{key:"send2extras"},{default:p(()=>[y(g(r.$t("sendToExtraFeatures")),1)]),_:1}),o(z,{key:"sendToThirdPartyExtension",title:r.$t("sendToThirdPartyExtension")},{default:p(()=>[o(d,{key:"send2controlnet-txt2img"},{default:p(()=>[y("ControlNet - "+g(r.$t("t2i")),1)]),_:1}),o(d,{key:"send2controlnet-img2img"},{default:p(()=>[y("ControlNet - "+g(r.$t("i2i")),1)]),_:1}),o(d,{key:"send2outpaint"},{default:p(()=>[y("openOutpaint")]),_:1})]),_:1},8,["title"])],64)):M("",!0),o(d,{key:"send2BatchDownload"},{default:p(()=>[y(g(r.$t("sendToBatchDownload")),1)]),_:1}),o(d,{key:"send2savedDir"},{default:p(()=>[y(g(r.$t("send2savedDir")),1)]),_:1}),o(d,{key:"deleteFiles",disabled:u(ne)(r.file)===u(n).fullscreenPreviewInitialUrl},{default:p(()=>[y(g(r.$t("deleteSelected")),1)]),_:1},8,["disabled"]),o(d,{key:"previewInNewWindow"},{default:p(()=>[y(g(r.$t("previewInNewWindow")),1)]),_:1}),o(d,{key:"copyPreviewUrl"},{default:p(()=>[y(g(r.$t("copySourceFilePreviewLink")),1)]),_:1})]}),_:1})]),default:p(()=>[o(c,null,{default:p(()=>[y(g(u(A)("openContextMenu")),1)]),_:1})]),_:1}),o(me,{onClick:a[3]||(a[3]=v=>e("contextMenuClick",{key:"download"},i.file,i.idx))},{default:p(()=>[y(g(r.$t("download")),1)]),_:1}),E.value?(h(),I(c,{key:0,onClick:a[4]||(a[4]=v=>u(ie)(E.value))},{default:p(()=>[y(g(r.$t("copyPrompt")),1)]),_:1})):M("",!0),E.value?(h(),I(c,{key:1,onClick:m},{default:p(()=>[y(g(r.$t("copyPositivePrompt")),1)]),_:1})):M("",!0)])):M("",!0)]),u(s).expanded?(h(),b("div",wt,[N("div",Ot,[(h(!0),b(B,null,V(L.value,v=>(h(),b("span",{class:"info-tag",key:v.name},[N("span",_t,g(v.name),1),N("span",Et,g(v.val),1)]))),128))]),(J=u(n).conf)!=null&&J.all_custom_tags?(h(),b("div",Lt,[(h(!0),b(B,null,V(u(n).conf.all_custom_tags,v=>(h(),b("div",{class:ae(["tag",{selected:_.value.some(W=>W.id===v.id)}]),onClick:W=>e("contextMenuClick",{key:`toggle-tag-${v.id}`},r.file,r.idx),key:v.id,style:ke({"--tag-color":u(l).getColor(v.name)})},g(v.name),15,$t))),128))])):M("",!0),(h(!0),b(B,null,V(x.value,v=>(h(),b("p",{key:v,class:"gen-info-frag"},g(v),1))),128))])):M("",!0)]),u(s).expanded?(h(),b("div",{key:0,class:"mouse-sensor",ref_key:"resizeHandle",ref:P,title:u(A)("dragToResizePanel")},[o(u(qe))],8,St)):M("",!0)],34)}}});const Nt=je(xt,[["__scopeId","data-v-3ba1b3cd"]]);export{zt as L,At as R,Dt as S,Nt as f,kt as s}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/globalSetting-40971f83.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/globalSetting-40971f83.css new file mode 100644 index 0000000000000000000000000000000000000000..ed69d63ad6db470f4f0a12b92ba77b24126e9880 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/globalSetting-40971f83.css @@ -0,0 +1 @@ +@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#d03f0a}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #d03f0a;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#d03f0a;border-color:#d03f0a}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#d03f0a;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}.ant-switch{margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;box-sizing:border-box;min-width:44px;height:22px;line-height:22px;vertical-align:middle;background-color:#00000040;border:0;border-radius:100px;cursor:pointer;transition:all .2s;user-select:none}.ant-switch:focus{outline:0;box-shadow:0 0 0 2px #0000001a}.ant-switch-checked:focus{box-shadow:0 0 0 2px #fff1e6}.ant-switch:focus:hover{box-shadow:none}.ant-switch-checked{background-color:#d03f0a}.ant-switch-loading,.ant-switch-disabled{cursor:not-allowed;opacity:.4}.ant-switch-loading *,.ant-switch-disabled *{box-shadow:none;cursor:not-allowed}.ant-switch-inner{display:block;margin:0 7px 0 25px;color:#fff;font-size:12px;transition:margin .2s}.ant-switch-checked .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-handle{position:absolute;top:2px;left:2px;width:18px;height:18px;transition:all .2s ease-in-out}.ant-switch-handle:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#fff;border-radius:9px;box-shadow:0 2px 4px #00230b33;transition:all .2s ease-in-out;content:""}.ant-switch-checked .ant-switch-handle{left:calc(100% - 20px)}.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle:before{right:-30%;left:0}.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle:before{right:0;left:-30%}.ant-switch-loading-icon.anticon{position:relative;top:2px;color:#000000a6;vertical-align:top}.ant-switch-checked .ant-switch-loading-icon{color:#d03f0a}.ant-switch-small{min-width:28px;height:16px;line-height:16px}.ant-switch-small .ant-switch-inner{margin:0 5px 0 18px;font-size:12px}.ant-switch-small .ant-switch-handle{width:12px;height:12px}.ant-switch-small .ant-switch-loading-icon{top:1.5px;font-size:9px}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin:0 18px 0 5px}.ant-switch-small.ant-switch-checked .ant-switch-handle{left:calc(100% - 14px)}.ant-switch-rtl{direction:rtl}.ant-switch-rtl .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-rtl .ant-switch-handle{right:2px;left:auto}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle:before{right:0;left:-30%}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle:before{right:-30%;left:0}.ant-switch-rtl.ant-switch-checked .ant-switch-inner{margin:0 7px 0 25px}.ant-switch-rtl.ant-switch-checked .ant-switch-handle{right:calc(100% - 20px)}.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle{right:calc(100% - 14px)}.panel[data-v-a56cd1af]{padding:8px;margin:16px;border-radius:8px;background:var(--zp-primary-background);overflow:auto;height:calc(100% - 32px)}.panel[data-v-a56cd1af]>:not(:first-child){margin-left:16px}.lang-select-wrap[data-v-a56cd1af]{width:128px;display:inline-block;padding-right:16px}h2[data-v-a56cd1af]{margin:64px 0 16px;font-weight:700}.row[data-v-a56cd1af]{margin-top:16px;padding:0 16px}.col[data-v-a56cd1af]{display:flex}.clear-btn[data-v-a56cd1af]{margin-left:16px} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/globalSetting-5b1ac0d1.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/globalSetting-5b1ac0d1.js new file mode 100644 index 0000000000000000000000000000000000000000..75f47c4b11b24e4adccd3f17f0fbbc62c0091ed7 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/globalSetting-5b1ac0d1.js @@ -0,0 +1 @@ +import{Y as te,Z as le,d as O,j as ae,av as oe,w as E,$ as U,ao as R,l as q,u as ue,aw as de,ax as ie,h as $,c as l,a as P,ay as se,az as ce,g as z,aA as re,P as c,aB as G,k as X,aC as he,o as C,y as F,n as s,r as n,ai as k,m as V,C as B,p as g,z as M,v as b,S as W,aD as fe,I as me,x as I,A as j,q as D,E as ve,aE as ge,aF as pe,aG as _e,aH as be,V as Ce,U as ke,X as we}from"./index-cc731081.js";import{N as H,_ as Y,F as ye}from"./numInput-4a49c95e.js";import{g as Se,C as $e}from"./shortcut-911a6445.js";/* empty css *//* empty css */var Te=le("small","default"),xe=function(){return{id:String,prefixCls:String,size:c.oneOf(Te),disabled:{type:Boolean,default:void 0},checkedChildren:c.any,unCheckedChildren:c.any,tabindex:c.oneOfType([c.string,c.number]),autofocus:{type:Boolean,default:void 0},loading:{type:Boolean,default:void 0},checked:c.oneOfType([c.string,c.number,c.looseBool]),checkedValue:c.oneOfType([c.string,c.number,c.looseBool]).def(!0),unCheckedValue:c.oneOfType([c.string,c.number,c.looseBool]).def(!1),onChange:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onMouseup:{type:Function},"onUpdate:checked":{type:Function},onBlur:Function,onFocus:Function}},Ie=O({compatConfig:{MODE:3},name:"ASwitch",__ANT_SWITCH:!0,inheritAttrs:!1,props:xe(),slots:["checkedChildren","unCheckedChildren"],setup:function(e,d){var p=d.attrs,y=d.slots,r=d.expose,h=d.emit,a=ae();oe(function(){E(!("defaultChecked"in p),"Switch","'defaultChecked' is deprecated, please use 'v-model:checked'"),E(!("value"in p),"Switch","`value` is not validate prop, do you mean `checked`?")});var t=U(e.checked!==void 0?e.checked:p.defaultChecked),_=R(function(){return t.value===e.checkedValue});q(function(){return e.checked},function(){t.value=e.checked});var m=ue("switch",e),f=m.prefixCls,N=m.direction,T=m.size,S=U(),x=function(){var o;(o=S.value)===null||o===void 0||o.focus()},u=function(){var o;(o=S.value)===null||o===void 0||o.blur()};r({focus:x,blur:u}),de(function(){ie(function(){e.autofocus&&!e.disabled&&S.value.focus()})});var v=function(o,w){e.disabled||(h("update:checked",o),h("change",o,w),a.onFieldChange())},A=function(o){h("blur",o)},J=function(o){x();var w=_.value?e.unCheckedValue:e.checkedValue;v(w,o),h("click",w,o)},Q=function(o){o.keyCode===G.LEFT?v(e.unCheckedValue,o):o.keyCode===G.RIGHT&&v(e.checkedValue,o),h("keydown",o)},ee=function(o){var w;(w=S.value)===null||w===void 0||w.blur(),h("mouseup",o)},ne=R(function(){var i;return i={},$(i,"".concat(f.value,"-small"),T.value==="small"),$(i,"".concat(f.value,"-loading"),e.loading),$(i,"".concat(f.value,"-checked"),_.value),$(i,"".concat(f.value,"-disabled"),e.disabled),$(i,f.value,!0),$(i,"".concat(f.value,"-rtl"),N.value==="rtl"),i});return function(){var i;return l(re,{insertExtraNode:!0},{default:function(){return[l("button",P(P(P({},se(e,["prefixCls","checkedChildren","unCheckedChildren","checked","autofocus","checkedValue","unCheckedValue","id","onChange","onUpdate:checked"])),p),{},{id:(i=e.id)!==null&&i!==void 0?i:a.id.value,onKeydown:Q,onClick:J,onBlur:A,onMouseup:ee,type:"button",role:"switch","aria-checked":t.value,disabled:e.disabled||e.loading,class:[p.class,ne.value],ref:S}),[l("div",{class:"".concat(f.value,"-handle")},[e.loading?l(ce,{class:"".concat(f.value,"-loading-icon")},null):null]),l("span",{class:"".concat(f.value,"-inner")},[_.value?z(y,e,"checkedChildren"):z(y,e,"unCheckedChildren")])])]}})}}});const Z=te(Ie);const L="/infinite_image_browsing/fe-static/assets/sample-55dcafc6.webp",Fe=["width","height","src"],Ve=O({__name:"ImageSetting",setup(K){function e(y,r){return new Promise(h=>{const a=new Image;a.onload=()=>{const t=document.createElement("canvas");t.width=a.width*r,t.height=a.height*r,t.getContext("2d").drawImage(a,0,0,t.width,t.height),h(t.toDataURL())},a.src=y})}const d=X(),p=U("");return q(()=>[d.enableThumbnail,d.gridThumbnailResolution],he(async()=>{d.enableThumbnail&&(p.value=await e(L,d.gridThumbnailResolution/1024))},300),{immediate:!0,deep:!0}),(y,r)=>{const h=Y,a=Z;return C(),F(M,null,[l(h,{label:n(k)("defaultGridCellWidth")},{default:s(()=>[l(H,{min:64,max:1024,step:32,modelValue:n(d).defaultGridCellWidth,"onUpdate:modelValue":r[0]||(r[0]=t=>n(d).defaultGridCellWidth=t)},null,8,["modelValue"])]),_:1},8,["label"]),l(h,{label:n(k)("useThumbnailPreview")},{default:s(()=>[l(a,{checked:n(d).enableThumbnail,"onUpdate:checked":r[1]||(r[1]=t=>n(d).enableThumbnail=t)},null,8,["checked"])]),_:1},8,["label"]),n(d).enableThumbnail?(C(),V(h,{key:0,label:n(k)("thumbnailResolution")},{default:s(()=>[l(H,{modelValue:n(d).gridThumbnailResolution,"onUpdate:modelValue":r[2]||(r[2]=t=>n(d).gridThumbnailResolution=t),min:256,max:1024,step:64},null,8,["modelValue"])]),_:1},8,["label"])):B("",!0),l(h,{label:n(k)("livePreview")},{default:s(()=>[g("div",null,[g("img",{width:n(d).defaultGridCellWidth,height:n(d).defaultGridCellWidth,src:n(d).enableThumbnail?p.value:n(L)},null,8,Fe)])]),_:1},8,["label"])],64)}}}),Be={class:"panel"},Me={style:{"margin-top":"0"}},Ue={class:"lang-select-wrap"},Ke={class:"col"},Ne={class:"col"},Ae={class:"col"},Pe={class:"col"},De=O({__name:"globalSetting",setup(K){const e=X(),d=U(!1),p=async()=>{window.location.reload()},y=[{value:"en",text:"English"},{value:"zhHans",text:"简体中文"},{value:"zhHant",text:"繁體中文"},{value:"de",text:"Deutsch"}],r=(a,t)=>{const _=Se(a);_&&(e.shortcut[t]=_)},h=async()=>{await ge("shutdown_api_server_command"),await pe.removeFile(_e),await be()};return(a,t)=>{const _=Z,m=Y,f=Ce,N=$e,T=ke,S=ye;return C(),F("div",Be,[B("",!0),l(S,null,{default:s(()=>{var x;return[g("h2",Me,b(n(k)("ImageBrowsingSettings")),1),l(Ve),g("h2",null,b(n(k)("other")),1),l(m,{label:a.$t("onlyFoldersAndImages")},{default:s(()=>[l(_,{checked:n(e).onlyFoldersAndImages,"onUpdate:checked":t[0]||(t[0]=u=>n(e).onlyFoldersAndImages=u)},null,8,["checked"])]),_:1},8,["label"]),l(m,{label:a.$t("defaultSortingMethod")},{default:s(()=>[l(n(W),{value:n(e).defaultSortingMethod,"onUpdate:value":t[1]||(t[1]=u=>n(e).defaultSortingMethod=u),conv:n(fe),options:n(me)},null,8,["value","conv","options"])]),_:1},8,["label"]),l(m,{label:a.$t("longPressOpenContextMenu")},{default:s(()=>[l(_,{checked:n(e).longPressOpenContextMenu,"onUpdate:checked":t[2]||(t[2]=u=>n(e).longPressOpenContextMenu=u)},null,8,["checked"])]),_:1},8,["label"]),l(m,{label:a.$t("lang")},{default:s(()=>[g("div",Ue,[l(n(W),{options:y,value:n(e).lang,"onUpdate:value":t[3]||(t[3]=u=>n(e).lang=u),onChange:t[4]||(t[4]=u=>d.value=!0)},null,8,["value"])]),d.value?(C(),V(f,{key:0,type:"primary",onClick:p,ghost:""},{default:s(()=>[I(b(n(k)("langChangeReload")),1)]),_:1})):B("",!0)]),_:1},8,["label"]),(C(!0),F(M,null,j(n(e).ignoredConfirmActions,(u,v)=>(C(),V(m,{label:a.$t(v+"SkipConfirm"),key:v},{default:s(()=>[l(N,{checked:n(e).ignoredConfirmActions[v],"onUpdate:checked":A=>n(e).ignoredConfirmActions[v]=A},null,8,["checked","onUpdate:checked"])]),_:2},1032,["label"]))),128)),g("h2",null,b(n(k)("shortcutKey")),1),l(m,{label:a.$t("download")},{default:s(()=>[g("div",Ke,[l(T,{value:n(e).shortcut.download,onKeydown:t[5]||(t[5]=D(u=>r(u,"download"),["stop","prevent"])),placeholder:a.$t("shortcutKeyDescription")},null,8,["value","placeholder"]),l(f,{onClick:t[6]||(t[6]=u=>n(e).shortcut.download=""),class:"clear-btn"},{default:s(()=>[I(b(a.$t("clear")),1)]),_:1})])]),_:1},8,["label"]),l(m,{label:a.$t("deleteSelected")},{default:s(()=>[g("div",Ne,[l(T,{value:n(e).shortcut.delete,onKeydown:t[7]||(t[7]=D(u=>r(u,"delete"),["stop","prevent"])),placeholder:a.$t("shortcutKeyDescription")},null,8,["value","placeholder"]),l(f,{onClick:t[8]||(t[8]=u=>n(e).shortcut.delete=""),class:"clear-btn"},{default:s(()=>[I(b(a.$t("clear")),1)]),_:1})])]),_:1},8,["label"]),(C(!0),F(M,null,j(((x=n(e).conf)==null?void 0:x.all_custom_tags)??[],u=>(C(),V(m,{label:a.$t("toggleTagSelection",{tag:u.name}),key:u.id},{default:s(()=>[g("div",Ae,[l(T,{value:n(e).shortcut[`toggle_tag_${u.name}`],onKeydown:D(v=>r(v,`toggle_tag_${u.name}`),["stop","prevent"]),placeholder:a.$t("shortcutKeyDescription")},null,8,["value","onKeydown","placeholder"]),l(f,{onClick:v=>n(e).shortcut[`toggle_tag_${u.name}`]="",class:"clear-btn"},{default:s(()=>[I(b(a.$t("clear")),1)]),_:2},1032,["onClick"])])]),_:2},1032,["label"]))),128)),n(ve)?(C(),F(M,{key:0},[g("h2",null,b(n(k)("clientSpecificSettings")),1),l(m,null,{default:s(()=>[g("div",Pe,[l(f,{onClick:h,class:"clear-btn"},{default:s(()=>[I(b(a.$t("initiateSoftwareStartupConfig")),1)]),_:1})])]),_:1})],64)):B("",!0)]}),_:1})])}}});const We=we(De,[["__scopeId","data-v-a56cd1af"]]);export{We as default}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/hook-7e629e37.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/hook-7e629e37.js new file mode 100644 index 0000000000000000000000000000000000000000..ad46d88bf8ed3016a5b626a58a9710f4f3e3fe43 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/hook-7e629e37.js @@ -0,0 +1 @@ +import{bn as A,$ as g,bU as q,bV as x,ar as k,ao as D,bO as z,bd as G}from"./index-cc731081.js";import{u as N,b as O,f as Q,c as U,d as j,e as H,h as L}from"./FileItem-8394fb78.js";let T=0;const V=()=>++T,W=(r,l,{dataUpdateStrategy:c="replace"}={})=>{const s=A([""]),u=g(!1),t=g(),a=g(!1);let f=g(-1);const v=new Set,b=e=>{var n;c==="replace"?t.value=e:c==="merge"&&(k((Array.isArray(t.value)||typeof t.value>"u")&&Array.isArray(e),"数据更新策略为合并时仅可用于值为数组的情况"),t.value=[...(n=t==null?void 0:t.value)!==null&&n!==void 0?n:[],...e])},d=e=>x(void 0,void 0,void 0,function*(){if(a.value||u.value&&typeof e>"u")return!1;a.value=!0;const n=V();f.value=n;try{let o;if(typeof e=="number"){if(o=s[e],typeof o!="string")return!1}else o=s[s.length-1];const p=yield r(o);if(v.has(n))return v.delete(n),!1;b(l(p));const i=p.cursor;if((e===s.length-1||typeof e!="number")&&(u.value=!i.has_next,i.has_next)){const I=i.next_cursor||i.next;k(typeof I=="string"),s.push(I)}}finally{f.value===n&&(a.value=!1)}return!0}),h=()=>{v.add(f.value),a.value=!1},w=(e=!1)=>x(void 0,void 0,void 0,function*(){const{refetch:n,force:o}=typeof e=="object"?e:{refetch:e};o&&h(),k(!a.value),s.splice(0,s.length,""),a.value=!1,t.value=void 0,u.value=!1,n&&(yield d())}),m=()=>({next:()=>x(void 0,void 0,void 0,function*(){if(a.value)throw new Error("不允许同时迭代");return{done:!(yield d()),value:t.value}})});return q({abort:h,load:u,next:d,res:t,loading:a,cursorStack:s,reset:w,[Symbol.asyncIterator]:m,iter:{[Symbol.asyncIterator]:m}})},J=r=>A(W(r,l=>l.files,{dataUpdateStrategy:"merge"})),K=r=>{const l=A(new Set),c=D(()=>(r.res??[]).filter(y=>!l.has(y.fullpath))),s=z(),{stackViewEl:u,multiSelectedIdxs:t,stack:a,scroller:f}=N({images:c}).toRefs(),{itemSize:v,gridItems:b,cellWidth:d,onScroll:h}=O({fetchNext:()=>r.next()}),{showMenuIdx:w}=Q(),{onFileDragStart:m,onFileDragEnd:e}=U(),{showGenInfo:n,imageGenInfo:o,q:p,onContextMenuClick:i,onFileItemClick:I}=j({openNext:G}),{previewIdx:C,previewing:F,onPreviewVisibleChange:_,previewImgMove:E,canPreview:M}=H(),P=async(y,S,R)=>{a.value=[{curr:"",files:c.value}],await i(y,S,R)};return L("removeFiles",async({paths:y})=>{y.forEach(S=>l.add(S))}),{images:c,scroller:f,queue:s,iter:r,onContextMenuClickU:P,stackViewEl:u,previewIdx:C,previewing:F,onPreviewVisibleChange:_,previewImgMove:E,canPreview:M,itemSize:v,gridItems:b,showGenInfo:n,imageGenInfo:o,q:p,onContextMenuClick:i,onFileItemClick:I,showMenuIdx:w,multiSelectedIdxs:t,onFileDragStart:m,onFileDragEnd:e,cellWidth:d,onScroll:h}};export{J as c,K as u}; diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/index-04bf0fce.css b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/index-04bf0fce.css new file mode 100644 index 0000000000000000000000000000000000000000..37e0e0db8812a7e3163497e78ae42ef657ca933a --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/index-04bf0fce.css @@ -0,0 +1 @@ +[class^=ant-]::-ms-clear,[class*=ant-]::-ms-clear,[class^=ant-] input::-ms-clear,[class*=ant-] input::-ms-clear,[class^=ant-] input::-ms-reveal,[class*=ant-] input::-ms-reveal{display:none}html,body{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}@-ms-viewport{width:device-width}body{margin:0;color:#000000d9;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#fff;font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:#000000d9;font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[title],abbr[data-original-title]{text-decoration:underline;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=text],input[type=password],input[type=number],textarea{-webkit-appearance:none}ol,ul,dl{margin-top:0;margin-bottom:1em}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#d03f0a;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#de632f}a:active{color:#ab2800}a:active,a:hover{text-decoration:none;outline:0}a:focus{text-decoration:none;outline:0}a[disabled]{color:#00000040;cursor:not-allowed}pre,code,kbd,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}a,area,button,[role=button],input:not([type="range"]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:#00000073;text-align:left;caption-side:bottom}input,button,select,optgroup,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::selection{color:#fff;background:#d03f0a}.clearfix:before{display:table;content:""}.clearfix:after{display:table;clear:both;content:""}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon>.anticon{line-height:0;vertical-align:0}.anticon[tabindex]{cursor:pointer}.anticon-spin:before{display:inline-block;animation:loadingCircle 1s infinite linear}.anticon-spin{display:inline-block;animation:loadingCircle 1s infinite linear}.ant-fade-enter,.ant-fade-appear,.ant-fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-fade-enter.ant-fade-enter-active,.ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.ant-fade-enter,.ant-fade-appear{opacity:0;animation-timing-function:linear}.ant-fade-leave{animation-timing-function:linear}.fade-enter,.fade-appear,.fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-enter.fade-enter-active,.fade-appear.fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.fade-leave.fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.fade-enter,.fade-appear{opacity:0;animation-timing-function:linear}.fade-leave{animation-timing-function:linear}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.ant-move-up-enter,.ant-move-up-appear,.ant-move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-up-enter.ant-move-up-enter-active,.ant-move-up-appear.ant-move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.ant-move-up-leave.ant-move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.ant-move-up-enter,.ant-move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-up-enter,.move-up-appear,.move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-enter.move-up-enter-active,.move-up-appear.move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.move-up-leave.move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.move-up-enter,.move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-down-enter,.ant-move-down-appear,.ant-move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-down-enter.ant-move-down-enter-active,.ant-move-down-appear.ant-move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.ant-move-down-leave.ant-move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.ant-move-down-enter,.ant-move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-enter,.move-down-appear,.move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-enter.move-down-enter-active,.move-down-appear.move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.move-down-leave.move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.move-down-enter,.move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-left-enter,.ant-move-left-appear,.ant-move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-left-enter.ant-move-left-enter-active,.ant-move-left-appear.ant-move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.ant-move-left-leave.ant-move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.ant-move-left-enter,.ant-move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-enter,.move-left-appear,.move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-enter.move-left-enter-active,.move-left-appear.move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.move-left-leave.move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.move-left-enter,.move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-right-enter,.ant-move-right-appear,.ant-move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-right-enter.ant-move-right-enter-active,.ant-move-right-appear.ant-move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.ant-move-right-leave.ant-move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.ant-move-right-enter,.ant-move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-enter,.move-right-appear,.move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-enter.move-right-enter-active,.move-right-appear.move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.move-right-leave.move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.move-right-enter,.move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@keyframes antMoveDownIn{0%{transform:translateY(100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveDownOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveLeftIn{0%{transform:translate(-100%);transform-origin:0 0;opacity:0}to{transform:translate(0);transform-origin:0 0;opacity:1}}@keyframes antMoveLeftOut{0%{transform:translate(0);transform-origin:0 0;opacity:1}to{transform:translate(-100%);transform-origin:0 0;opacity:0}}@keyframes antMoveRightIn{0%{transform:translate(100%);transform-origin:0 0;opacity:0}to{transform:translate(0);transform-origin:0 0;opacity:1}}@keyframes antMoveRightOut{0%{transform:translate(0);transform-origin:0 0;opacity:1}to{transform:translate(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveUpIn{0%{transform:translateY(-100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveUpOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(-100%);transform-origin:0 0;opacity:0}}@keyframes loadingCircle{to{transform:rotate(360deg)}}[ant-click-animating=true],[ant-click-animating-without-extra-node=true]{position:relative}html{--antd-wave-shadow-color: #d03f0a;--scroll-bar: 0}[ant-click-animating-without-extra-node=true]:after,.ant-click-animating-node{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;box-shadow:0 0 #d03f0a;box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation-fill-mode:forwards;content:"";pointer-events:none}@keyframes waveEffect{to{box-shadow:0 0 #d03f0a;box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes fadeEffect{to{opacity:0}}.slide-up-enter,.slide-up-appear,.slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-enter.slide-up-enter-active,.slide-up-appear.slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.slide-up-leave.slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.slide-up-enter,.slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-enter,.slide-down-appear,.slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-enter.slide-down-enter-active,.slide-down-appear.slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.slide-down-leave.slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.slide-down-enter,.slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-enter,.slide-left-appear,.slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-enter.slide-left-enter-active,.slide-left-appear.slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.slide-left-leave.slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.slide-left-enter,.slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-enter,.slide-right-appear,.slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-enter.slide-right-enter-active,.slide-right-appear.slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.slide-right-leave.slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.slide-right-enter,.slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-up-enter,.ant-slide-up-appear,.ant-slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.ant-slide-up-enter,.ant-slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-down-enter,.ant-slide-down-appear,.ant-slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.ant-slide-down-enter,.ant-slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-left-enter,.ant-slide-left-appear,.ant-slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-left-enter.ant-slide-left-enter-active,.ant-slide-left-appear.ant-slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.ant-slide-left-leave.ant-slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.ant-slide-left-enter,.ant-slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-right-enter,.ant-slide-right-appear,.ant-slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-right-enter.ant-slide-right-enter-active,.ant-slide-right-appear.ant-slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.ant-slide-right-leave.ant-slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.ant-slide-right-enter,.ant-slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes antSlideUpIn{0%{transform:scaleY(.8);transform-origin:0% 0%;opacity:0}to{transform:scaleY(1);transform-origin:0% 0%;opacity:1}}@keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0% 0%;opacity:1}to{transform:scaleY(.8);transform-origin:0% 0%;opacity:0}}@keyframes antSlideDownIn{0%{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}to{transform:scaleY(1);transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1}to{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}}@keyframes antSlideLeftIn{0%{transform:scaleX(.8);transform-origin:0% 0%;opacity:0}to{transform:scaleX(1);transform-origin:0% 0%;opacity:1}}@keyframes antSlideLeftOut{0%{transform:scaleX(1);transform-origin:0% 0%;opacity:1}to{transform:scaleX(.8);transform-origin:0% 0%;opacity:0}}@keyframes antSlideRightIn{0%{transform:scaleX(.8);transform-origin:100% 0%;opacity:0}to{transform:scaleX(1);transform-origin:100% 0%;opacity:1}}@keyframes antSlideRightOut{0%{transform:scaleX(1);transform-origin:100% 0%;opacity:1}to{transform:scaleX(.8);transform-origin:100% 0%;opacity:0}}.ant-zoom-enter,.ant-zoom-appear,.ant-zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-enter.ant-zoom-enter-active,.ant-zoom-appear.ant-zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.ant-zoom-leave.ant-zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.ant-zoom-enter,.ant-zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-enter-prepare,.ant-zoom-appear-prepare{transform:none}.ant-zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-enter,.zoom-appear,.zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-enter.zoom-enter-active,.zoom-appear.zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.zoom-leave.zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.zoom-enter,.zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-enter-prepare,.zoom-appear-prepare{transform:none}.zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-enter,.ant-zoom-big-appear,.ant-zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-big-enter.ant-zoom-big-enter-active,.ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.ant-zoom-big-enter,.ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-enter-prepare,.ant-zoom-big-appear-prepare{transform:none}.ant-zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-enter,.zoom-big-appear,.zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-enter.zoom-big-enter-active,.zoom-big-appear.zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-enter,.zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-enter-prepare,.zoom-big-appear-prepare{transform:none}.zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear,.ant-zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-fast-enter-prepare,.ant-zoom-big-fast-appear-prepare{transform:none}.ant-zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-enter,.zoom-big-fast-appear,.zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-fast-enter.zoom-big-fast-enter-active,.zoom-big-fast-appear.zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-fast-enter,.zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-enter-prepare,.zoom-big-fast-appear-prepare{transform:none}.zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-up-enter,.ant-zoom-up-appear,.ant-zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-up-enter.ant-zoom-up-enter-active,.ant-zoom-up-appear.ant-zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.ant-zoom-up-leave.ant-zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.ant-zoom-up-enter,.ant-zoom-up-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-up-enter-prepare,.ant-zoom-up-appear-prepare{transform:none}.ant-zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-enter,.zoom-up-appear,.zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-enter.zoom-up-enter-active,.zoom-up-appear.zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.zoom-up-enter,.zoom-up-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-enter-prepare,.zoom-up-appear-prepare{transform:none}.zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-down-enter,.ant-zoom-down-appear,.ant-zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-down-enter.ant-zoom-down-enter-active,.ant-zoom-down-appear.ant-zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.ant-zoom-down-leave.ant-zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.ant-zoom-down-enter,.ant-zoom-down-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-down-enter-prepare,.ant-zoom-down-appear-prepare{transform:none}.ant-zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-enter,.zoom-down-appear,.zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-enter.zoom-down-enter-active,.zoom-down-appear.zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.zoom-down-enter,.zoom-down-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-enter-prepare,.zoom-down-appear-prepare{transform:none}.zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-left-enter,.ant-zoom-left-appear,.ant-zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-left-enter.ant-zoom-left-enter-active,.ant-zoom-left-appear.ant-zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.ant-zoom-left-leave.ant-zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.ant-zoom-left-enter,.ant-zoom-left-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-left-enter-prepare,.ant-zoom-left-appear-prepare{transform:none}.ant-zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-enter,.zoom-left-appear,.zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-enter.zoom-left-enter-active,.zoom-left-appear.zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.zoom-left-enter,.zoom-left-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-enter-prepare,.zoom-left-appear-prepare{transform:none}.zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-right-enter,.ant-zoom-right-appear,.ant-zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-right-enter.ant-zoom-right-enter-active,.ant-zoom-right-appear.ant-zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.ant-zoom-right-leave.ant-zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.ant-zoom-right-enter,.ant-zoom-right-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-right-enter-prepare,.ant-zoom-right-appear-prepare{transform:none}.ant-zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-enter,.zoom-right-appear,.zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-enter.zoom-right-enter-active,.zoom-right-appear.zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.zoom-right-enter,.zoom-right-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-enter-prepare,.zoom-right-appear-prepare{transform:none}.zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@keyframes antZoomIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomOut{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}@keyframes antZoomBigIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomBigOut{0%{transform:scale(1)}to{transform:scale(.8);opacity:0}}@keyframes antZoomUpIn{0%{transform:scale(.8);transform-origin:50% 0%;opacity:0}to{transform:scale(1);transform-origin:50% 0%}}@keyframes antZoomUpOut{0%{transform:scale(1);transform-origin:50% 0%}to{transform:scale(.8);transform-origin:50% 0%;opacity:0}}@keyframes antZoomLeftIn{0%{transform:scale(.8);transform-origin:0% 50%;opacity:0}to{transform:scale(1);transform-origin:0% 50%}}@keyframes antZoomLeftOut{0%{transform:scale(1);transform-origin:0% 50%}to{transform:scale(.8);transform-origin:0% 50%;opacity:0}}@keyframes antZoomRightIn{0%{transform:scale(.8);transform-origin:100% 50%;opacity:0}to{transform:scale(1);transform-origin:100% 50%}}@keyframes antZoomRightOut{0%{transform:scale(1);transform-origin:100% 50%}to{transform:scale(.8);transform-origin:100% 50%;opacity:0}}@keyframes antZoomDownIn{0%{transform:scale(.8);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes antZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(.8);transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse-legacy-active{transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden;transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}.ant-skeleton{display:table;width:100%}.ant-skeleton-header{display:table-cell;padding-right:16px;vertical-align:top}.ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-content{display:table-cell;width:100%;vertical-align:top}.ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;margin-top:16px;background:rgba(190,190,190,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:24px}.ant-skeleton-content .ant-skeleton-paragraph{padding:0}.ant-skeleton-content .ant-skeleton-paragraph>li{width:100%;height:16px;list-style:none;background:rgba(190,190,190,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%}.ant-skeleton-content .ant-skeleton-paragraph>li+li{margin-top:16px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-top:12px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:28px}.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph>li{border-radius:100px}.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li{background:linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(129,129,129,.24) 37%,rgba(190,190,190,.2) 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-button,.ant-skeleton.ant-skeleton-active .ant-skeleton-input,.ant-skeleton.ant-skeleton-active .ant-skeleton-image{background:linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(129,129,129,.24) 37%,rgba(190,190,190,.2) 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton.ant-skeleton-block,.ant-skeleton.ant-skeleton-block .ant-skeleton-button{width:100%}.ant-skeleton-element{display:inline-block;width:auto}.ant-skeleton-element .ant-skeleton-button{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);border-radius:2px;width:64px;min-width:64px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle{width:32px;min-width:32px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round{border-radius:32px}.ant-skeleton-element .ant-skeleton-button-lg{width:80px;min-width:80px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle{width:40px;min-width:40px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round{border-radius:40px}.ant-skeleton-element .ant-skeleton-button-sm{width:48px;min-width:48px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle{width:24px;min-width:24px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round{border-radius:24px}.ant-skeleton-element .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-input{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:100%;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-input-lg{width:100%;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-input-sm{width:100%;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-image{display:flex;align-items:center;justify-content:center;vertical-align:top;background:rgba(190,190,190,.2);width:96px;height:96px;line-height:96px}.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-image-path{fill:#bfbfbf}.ant-skeleton-element .ant-skeleton-image-svg{width:48px;height:48px;line-height:48px;max-width:192px;max-height:192px}.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle{border-radius:50%}@keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.ant-skeleton-rtl{direction:rtl}.ant-skeleton-rtl .ant-skeleton-header{padding-right:0;padding-left:16px}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li{animation-name:ant-skeleton-loading-rtl}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar{animation-name:ant-skeleton-loading-rtl}@keyframes ant-skeleton-loading-rtl{0%{background-position:0% 50%}to{background-position:100% 50%}}.ant-input-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;display:inline-flex}.ant-input-affix-wrapper::-moz-placeholder{opacity:1}.ant-input-affix-wrapper::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-affix-wrapper:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-rtl .ant-input-affix-wrapper:hover{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-rtl .ant-input-affix-wrapper:focus,.ant-input-rtl .ant-input-affix-wrapper-focused{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-affix-wrapper[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-affix-wrapper-borderless,.ant-input-affix-wrapper-borderless:hover,.ant-input-affix-wrapper-borderless:focus,.ant-input-affix-wrapper-borderless-focused,.ant-input-affix-wrapper-borderless-disabled,.ant-input-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-affix-wrapper-sm{padding:0 7px}.ant-input-affix-wrapper-rtl{direction:rtl}.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:#40a9ff;border-right-width:1px!important;z-index:1}.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-right-width:0;border-left-width:1px!important}.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{z-index:0}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{z-index:1}.ant-input-affix-wrapper-disabled .ant-input[disabled]{background:transparent}.ant-input-affix-wrapper>input.ant-input{padding:0;border:none;outline:none}.ant-input-affix-wrapper>input.ant-input:focus{box-shadow:none!important}.ant-input-affix-wrapper:before{width:0;visibility:hidden;content:" "}.ant-input-prefix,.ant-input-suffix{display:flex;flex:none;align-items:center}.ant-input-show-count-suffix{color:#00000073}.ant-input-show-count-has-suffix{margin-right:2px}.ant-input-prefix{margin-right:4px}.ant-input-suffix{margin-left:4px}.anticon.ant-input-clear-icon{margin:0;color:#00000040;font-size:12px;vertical-align:-1px;cursor:pointer;transition:color .3s}.anticon.ant-input-clear-icon:hover{color:#00000073}.anticon.ant-input-clear-icon:active{color:#000000d9}.anticon.ant-input-clear-icon-hidden{visibility:hidden}.anticon.ant-input-clear-icon-has-suffix{margin:0 4px}.ant-input-affix-wrapper-textarea-with-clear-btn{padding:0!important;border:0!important}.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon{position:absolute;top:8px;right:8px;z-index:1}.ant-input{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input::-moz-placeholder{opacity:1}.ant-input::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-rtl .ant-input:hover{border-right-width:0;border-left-width:1px!important}.ant-input:focus,.ant-input-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-rtl .ant-input:focus,.ant-input-rtl .ant-input-focused{border-right-width:0;border-left-width:1px!important}.ant-input-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-borderless,.ant-input-borderless:hover,.ant-input-borderless:focus,.ant-input-borderless-focused,.ant-input-borderless-disabled,.ant-input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-lg{padding:6.5px 11px;font-size:16px}.ant-input-sm{padding:0 7px}.ant-input-rtl{direction:rtl}.ant-input-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus{z-index:1;border-right-width:1px}.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-search-with-button .ant-input-group .ant-input:hover{z-index:0}.ant-input-group-addon{position:relative;padding:0 11px;color:#000000d9;font-weight:400;font-size:14px;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-group-addon .ant-select-open .ant-select-selector,.ant-input-group-addon .ant-select-focused .ant-select-selector{color:#1890ff}.ant-input-group-addon .ant-cascader-picker{margin:-9px -12px;background-color:transparent}.ant-input-group-addon .ant-cascader-picker .ant-cascader-input{text-align:left;border:0;box-shadow:none}.ant-input-group>.ant-input:first-child,.ant-input-group-addon:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input:first-child .ant-select .ant-select-selector,.ant-input-group-addon:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group>.ant-input:last-child,.ant-input-group-addon:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input:last-child .ant-select .ant-select-selector,.ant-input-group-addon:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:0 7px}.ant-input-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group .ant-input-affix-wrapper:not(:first-child),.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group.ant-input-group-compact{display:block}.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{display:table;clear:both;content:""}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-input-affix-wrapper{display:inline-flex}.ant-input-group.ant-input-group-compact>.ant-picker-range{display:inline-flex}.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select-focused{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-arrow{z-index:1}.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-right-width:1px;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-left:-1px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:2px 0 0 2px}.ant-input-group>.ant-input-rtl:first-child,.ant-input-group-rtl .ant-input-group-addon:first-child{border-radius:0 2px 2px 0}.ant-input-group-rtl .ant-input-group-addon:first-child{border-right:1px solid #d9d9d9;border-left:0}.ant-input-group-rtl .ant-input-group-addon:last-child{border-right:0;border-left:1px solid #d9d9d9}.ant-input-group-rtl.ant-input-group>.ant-input:last-child,.ant-input-group-rtl.ant-input-group-addon:last-child{border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child){border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-right:0;margin-left:-1px;border-left-width:1px}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-left-width:1px;border-radius:2px 0 0 2px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl+.ant-input-group-wrapper-rtl{margin-right:-1px;margin-left:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:0 2px 2px 0}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-password-icon{color:#00000073;cursor:pointer;transition:all .3s}.ant-input-password-icon:hover{color:#000000d9}.ant-input[type=color]{height:32px}.ant-input[type=color].ant-input-lg{height:40px}.ant-input[type=color].ant-input-sm{height:24px;padding-top:3px;padding-bottom:3px}.ant-input-textarea-show-count>.ant-input{height:100%}.ant-input-textarea-show-count:after{float:right;color:#00000073;white-space:nowrap;content:attr(data-count);pointer-events:none}.ant-input-search .ant-input:hover,.ant-input-search .ant-input:focus{border-color:#40a9ff}.ant-input-search .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-left-color:#40a9ff}.ant-input-search .ant-input-affix-wrapper{border-radius:0}.ant-input-search .ant-input-lg{line-height:1.5713}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child{left:-1px;padding:0;border:0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button{padding-top:0;padding-bottom:0;border-radius:0 2px 2px 0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary){color:#00000073}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading:before{top:0;right:0;bottom:0;left:0}.ant-input-search-button{height:32px}.ant-input-search-button:hover,.ant-input-search-button:focus{z-index:1}.ant-input-search-large .ant-input-search-button{height:40px}.ant-input-search-small .ant-input-search-button{height:24px}.ant-input-group-wrapper-rtl,.ant-input-group-rtl{direction:rtl}.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl>input.ant-input{border:none;outline:none}.ant-input-affix-wrapper-rtl .ant-input-prefix{margin:0 0 0 4px}.ant-input-affix-wrapper-rtl .ant-input-suffix{margin:0 4px 0 0}.ant-input-textarea-rtl{direction:rtl}.ant-input-textarea-rtl.ant-input-textarea-show-count:after{text-align:left}.ant-input-affix-wrapper-rtl .ant-input-clear-icon-has-suffix{margin-right:0;margin-left:4px}.ant-input-affix-wrapper-rtl .ant-input-clear-icon{right:auto;left:8px}.ant-input-search-rtl{direction:rtl}.ant-input-search-rtl .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search-rtl .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-right-color:#40a9ff;border-left-color:#d9d9d9}.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper:hover,.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper-focused{border-right-color:#40a9ff}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon{right:-1px;left:auto}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon .ant-input-search-button{border-radius:2px 0 0 2px}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ant-input{height:32px}.ant-input-lg{height:40px}.ant-input-sm{height:24px}.ant-input-affix-wrapper>input.ant-input{height:auto}}.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:8px 0;font-size:14px}.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:16px 0;font-size:16px}.ant-tabs-card.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:6px 16px}.ant-tabs-card.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:7px 16px 6px}.ant-tabs-rtl{direction:rtl}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type{margin-left:0}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon{margin-right:0;margin-left:12px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove{margin-right:8px;margin-left:-4px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-nav{order:1}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-content-holder{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-nav{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-content-holder{order:1}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-right:2px;margin-left:0}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-add{margin-right:2px;margin-left:0}.ant-tabs-dropdown-rtl{direction:rtl}.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item{text-align:right}.ant-tabs-top,.ant-tabs-bottom{flex-direction:column}.ant-tabs-top>.ant-tabs-nav,.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-top>div>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{margin:0 0 16px}.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before{position:absolute;right:0;left:0;border-bottom:1px solid #f0f0f0;content:""}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar{height:2px}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:width .3s,left .3s,right .3s}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{top:0;bottom:0;width:30px}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{left:0;box-shadow:inset 10px 0 8px -8px #00000014}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;box-shadow:inset -10px 0 8px -8px #00000014}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before{opacity:1}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after{opacity:1}.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before{bottom:0}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar{bottom:0}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{order:1;margin-top:16px;margin-bottom:0}.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before{top:0}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar{top:0}.ant-tabs-bottom>.ant-tabs-content-holder,.ant-tabs-bottom>div>.ant-tabs-content-holder{order:0}.ant-tabs-left>.ant-tabs-nav,.ant-tabs-right>.ant-tabs-nav,.ant-tabs-left>div>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{flex-direction:column;min-width:50px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{padding:8px 24px;text-align:center}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin:16px 0 0}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap{flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;left:0;height:30px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{top:0;box-shadow:inset 0 10px 8px -8px #00000014}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{bottom:0;box-shadow:inset 0 -10px 8px -8px #00000014}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{width:2px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:height .3s,top .3s}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-operations{flex:1 0 auto;flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar{right:0}.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-left>div>.ant-tabs-content-holder{margin-left:-1px;border-left:1px solid #f0f0f0}.ant-tabs-left>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-left>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-left:24px}.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{order:1}.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{left:0}.ant-tabs-right>.ant-tabs-content-holder,.ant-tabs-right>div>.ant-tabs-content-holder{order:0;margin-right:-1px;border-right:1px solid #f0f0f0}.ant-tabs-right>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-right>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-right:24px}.ant-tabs-dropdown{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-tabs-dropdown-hidden{display:none}.ant-tabs-dropdown-menu{max-height:200px;margin:0;padding:4px 0;overflow-x:hidden;overflow-y:auto;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-tabs-dropdown-menu-item{display:flex;align-items:center;min-width:120px;margin:0;padding:5px 12px;overflow:hidden;color:#000000d9;font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-tabs-dropdown-menu-item>span{flex:1;white-space:nowrap}.ant-tabs-dropdown-menu-item-remove{flex:none;margin-left:12px;color:#00000073;font-size:12px;background:transparent;border:0;cursor:pointer}.ant-tabs-dropdown-menu-item-remove:hover{color:#de632f}.ant-tabs-dropdown-menu-item:hover{background:#f5f5f5}.ant-tabs-dropdown-menu-item-disabled,.ant-tabs-dropdown-menu-item-disabled:hover{color:#00000040;background:transparent;cursor:not-allowed}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab{margin:0;padding:8px 16px;background:#fafafa;border:1px solid #f0f0f0;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab-active{color:#d03f0a;background:#fff}.ant-tabs-card>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-ink-bar{visibility:hidden}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-left:2px}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 2px 0 0}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab-active{border-bottom-color:#fff}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 2px 2px}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab-active{border-top-color:#fff}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-top:2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 0 0 2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab-active{border-right-color:#fff}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 2px 2px 0}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab-active{border-left-color:#fff}.ant-tabs{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:flex;overflow:hidden}.ant-tabs>.ant-tabs-nav,.ant-tabs>div>.ant-tabs-nav{position:relative;display:flex;flex:none;align-items:center}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap{position:relative;display:inline-block;display:flex;flex:auto;align-self:stretch;overflow:hidden;white-space:nowrap;transform:translate(0)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{position:absolute;z-index:1;opacity:0;transition:opacity .3s;content:"";pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-list{position:relative;display:flex;transition:transform .3s}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations{display:flex;align-self:stretch}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations-hidden,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations-hidden{position:absolute;visibility:hidden;pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more{position:relative;padding:8px 16px;background:transparent;border:0}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more:after{position:absolute;right:0;bottom:0;left:0;height:5px;transform:translateY(100%);content:""}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add{min-width:40px;margin-left:2px;padding:0 8px;background:#fafafa;border:1px solid #f0f0f0;border-radius:2px 2px 0 0;outline:none;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:hover,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:hover{color:#de632f}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:focus,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:focus{color:#ab2800}.ant-tabs-extra-content{flex:none}.ant-tabs-centered>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*="ant-tabs-nav-wrap-ping"]),.ant-tabs-centered>div>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*="ant-tabs-nav-wrap-ping"]){justify-content:center}.ant-tabs-ink-bar{position:absolute;background:#d03f0a;pointer-events:none}.ant-tabs-tab{position:relative;display:inline-flex;align-items:center;padding:12px 0;font-size:14px;background:transparent;border:0;outline:none;cursor:pointer}.ant-tabs-tab-btn:focus,.ant-tabs-tab-remove:focus,.ant-tabs-tab-btn:active,.ant-tabs-tab-remove:active{color:#ab2800}.ant-tabs-tab-btn{outline:none;transition:all .3s}.ant-tabs-tab-remove{flex:none;margin-right:-4px;margin-left:8px;color:#00000073;font-size:12px;background:transparent;border:none;outline:none;cursor:pointer;transition:all .3s}.ant-tabs-tab-remove:hover{color:#000000d9}.ant-tabs-tab:hover{color:#de632f}.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#d03f0a;text-shadow:0 0 .25px currentcolor}.ant-tabs-tab.ant-tabs-tab-disabled{color:#00000040;cursor:not-allowed}.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active{color:#00000040}.ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-tab .anticon{margin-right:12px}.ant-tabs-tab+.ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-content{display:flex;width:100%}.ant-tabs-content-holder{flex:auto;min-width:0;min-height:0}.ant-tabs-content-animated{transition:margin .3s}.ant-tabs-tabpane{flex:none;width:100%;outline:none}.splitpanes{display:flex;width:100%;height:100%}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging *{user-select:none}.splitpanes__pane{width:100%;height:100%;overflow:hidden}.splitpanes--vertical .splitpanes__pane{transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes--vertical>.splitpanes__splitter{min-width:1px;cursor:col-resize}.splitpanes--horizontal>.splitpanes__splitter{min-height:1px;cursor:row-resize}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;box-sizing:border-box;position:relative;flex-shrink:0}.splitpanes.default-theme .splitpanes__splitter:before,.splitpanes.default-theme .splitpanes__splitter:after{content:"";position:absolute;top:50%;left:50%;background-color:#00000026;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:before,.splitpanes.default-theme .splitpanes__splitter:hover:after{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme.splitpanes--vertical>.splitpanes__splitter,.default-theme .splitpanes--vertical>.splitpanes__splitter{width:7px;border-left:1px solid #eee;margin-left:-1px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{transform:translateY(-50%);width:1px;height:30px}.default-theme.splitpanes--vertical>.splitpanes__splitter:before,.default-theme .splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter,.default-theme .splitpanes--horizontal>.splitpanes__splitter{height:7px;border-top:1px solid #eee;margin-top:-1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{transform:translate(-50%);width:30px;height:1px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:before,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.wrap[data-v-10c5aba4]{position:relative;height:100%;background:rgba(24,143,255,0);transition:all .3s ease}.wrap .trigger[data-v-10c5aba4]{position:absolute;top:0;bottom:0;right:0;width:10%;transition:all .3s ease;background:rgba(24,143,255,0)}.wrap .accept[data-v-10c5aba4],.wrap.accept[data-v-10c5aba4]{background:rgba(24,143,255,.1921568627);z-index:9999}.ant-drawer{position:fixed;z-index:1000;width:0%;height:100%;transition:width 0s ease .3s,height 0s ease .3s}.ant-drawer-content-wrapper{position:absolute;width:100%;height:100%;transition:transform .3s cubic-bezier(.23,1,.32,1),box-shadow .3s cubic-bezier(.23,1,.32,1)}.ant-drawer .ant-drawer-content{width:100%;height:100%}.ant-drawer-left,.ant-drawer-right{top:0;width:0%;height:100%}.ant-drawer-left .ant-drawer-content-wrapper,.ant-drawer-right .ant-drawer-content-wrapper{height:100%}.ant-drawer-left.ant-drawer-open,.ant-drawer-right.ant-drawer-open{width:100%;transition:transform .3s cubic-bezier(.23,1,.32,1)}.ant-drawer-left,.ant-drawer-left .ant-drawer-content-wrapper{left:0}.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:6px 0 16px -8px #00000014,9px 0 28px #0000000d,12px 0 48px 16px #00000008}.ant-drawer-right,.ant-drawer-right .ant-drawer-content-wrapper{right:0}.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:-6px 0 16px -8px #00000014,-9px 0 28px #0000000d,-12px 0 48px 16px #00000008}.ant-drawer-right.ant-drawer-open.no-mask{right:1px;transform:translate(1px)}.ant-drawer-top,.ant-drawer-bottom{left:0;width:100%;height:0%}.ant-drawer-top .ant-drawer-content-wrapper,.ant-drawer-bottom .ant-drawer-content-wrapper{width:100%}.ant-drawer-top.ant-drawer-open,.ant-drawer-bottom.ant-drawer-open{height:100%;transition:transform .3s cubic-bezier(.23,1,.32,1)}.ant-drawer-top{top:0}.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 6px 16px -8px #00000014,0 9px 28px #0000000d,0 12px 48px 16px #00000008}.ant-drawer-bottom,.ant-drawer-bottom .ant-drawer-content-wrapper{bottom:0}.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 -6px 16px -8px #00000014,0 -9px 28px #0000000d,0 -12px 48px 16px #00000008}.ant-drawer-bottom.ant-drawer-open.no-mask{bottom:1px;transform:translateY(1px)}.ant-drawer.ant-drawer-open .ant-drawer-mask{height:100%;opacity:1;transition:none;animation:antdDrawerFadeIn .3s cubic-bezier(.23,1,.32,1);pointer-events:auto}.ant-drawer-title{flex:1;margin:0;color:#000000d9;font-weight:500;font-size:16px;line-height:22px}.ant-drawer-content{position:relative;z-index:1;overflow:auto;background-color:#fff;background-clip:padding-box;border:0}.ant-drawer-close{display:inline-block;margin-right:12px;color:#00000073;font-weight:700;font-size:16px;font-style:normal;line-height:1;text-align:center;text-transform:none;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s;text-rendering:auto}.ant-drawer-close:focus,.ant-drawer-close:hover{color:#000000bf;text-decoration:none}.ant-drawer-header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:16px 24px;color:#000000d9;background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-drawer-header-title{display:flex;flex:1;align-items:center;justify-content:space-between}.ant-drawer-header-close-only{padding-bottom:0;border:none}.ant-drawer-wrapper-body{display:flex;flex-flow:column nowrap;width:100%;height:100%}.ant-drawer-body{flex-grow:1;padding:24px;overflow:auto;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-drawer-footer{flex-shrink:0;padding:10px 16px;border-top:1px solid #f0f0f0}.ant-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0;background-color:#00000073;opacity:0;transition:opacity .3s linear,height 0s ease .3s;pointer-events:none}.ant-drawer .ant-picker-clear{background:#fff}@keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}.ant-drawer-rtl{direction:rtl}.ant-drawer-rtl .ant-drawer-close{margin-right:0;margin-left:12px}.ant-btn{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;box-shadow:0 2px #00000004;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:2px;color:#000000d9;border-color:#d9d9d9;background:#fff}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;box-shadow:none}.ant-btn[disabled]{cursor:not-allowed}.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:6.4px 15px;font-size:16px;border-radius:2px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:2px}.ant-btn>a:only-child{color:currentcolor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:hover,.ant-btn:focus{color:#de632f;border-color:#de632f;background:#fff}.ant-btn:hover>a:only-child,.ant-btn:focus>a:only-child{color:currentcolor}.ant-btn:hover>a:only-child:after,.ant-btn:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:active{color:#ab2800;border-color:#ab2800;background:#fff}.ant-btn:active>a:only-child{color:currentcolor}.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn[disabled],.ant-btn[disabled]:hover,.ant-btn[disabled]:focus,.ant-btn[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn[disabled]>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:active>a:only-child{color:currentcolor}.ant-btn[disabled]>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:hover,.ant-btn:focus,.ant-btn:active{text-decoration:none;background:#fff}.ant-btn>span{display:inline-block}.ant-btn-primary{color:#fff;border-color:#d03f0a;background:#d03f0a;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:hover,.ant-btn-primary:focus{color:#fff;border-color:#de632f;background:#de632f}.ant-btn-primary:hover>a:only-child,.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-primary:hover>a:only-child:after,.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:active{color:#fff;border-color:#ab2800;background:#ab2800}.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary[disabled],.ant-btn-primary[disabled]:hover,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-primary[disabled]>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#de632f;border-left-color:#de632f}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#de632f}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group .ant-btn-primary+.ant-btn-primary{border-left-color:#de632f}.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:#000000d9;border-color:#d9d9d9;background:transparent}.ant-btn-ghost>a:only-child{color:currentcolor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:hover,.ant-btn-ghost:focus{color:#de632f;border-color:#de632f;background:transparent}.ant-btn-ghost:hover>a:only-child,.ant-btn-ghost:focus>a:only-child{color:currentcolor}.ant-btn-ghost:hover>a:only-child:after,.ant-btn-ghost:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:active{color:#ab2800;border-color:#ab2800;background:transparent}.ant-btn-ghost:active>a:only-child{color:currentcolor}.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost[disabled],.ant-btn-ghost[disabled]:hover,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-ghost[disabled]>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child{color:currentcolor}.ant-btn-ghost[disabled]>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:#000000d9;border-color:#d9d9d9;background:#fff;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentcolor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:hover,.ant-btn-dashed:focus{color:#de632f;border-color:#de632f;background:#fff}.ant-btn-dashed:hover>a:only-child,.ant-btn-dashed:focus>a:only-child{color:currentcolor}.ant-btn-dashed:hover>a:only-child:after,.ant-btn-dashed:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:active{color:#ab2800;border-color:#ab2800;background:#fff}.ant-btn-dashed:active>a:only-child{color:currentcolor}.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed[disabled],.ant-btn-dashed[disabled]:hover,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dashed[disabled]>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dashed[disabled]>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#fff;border-color:#ff4d4f;background:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-danger>a:only-child{color:currentcolor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:hover,.ant-btn-danger:focus{color:#fff;border-color:#ff7875;background:#ff7875}.ant-btn-danger:hover>a:only-child,.ant-btn-danger:focus>a:only-child{color:currentcolor}.ant-btn-danger:hover>a:only-child:after,.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:active{color:#fff;border-color:#d9363e;background:#d9363e}.ant-btn-danger:active>a:only-child{color:currentcolor}.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger[disabled],.ant-btn-danger[disabled]:hover,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-danger[disabled]>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:active>a:only-child{color:currentcolor}.ant-btn-danger[disabled]>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#d03f0a;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:hover,.ant-btn-link:focus{color:#de632f;border-color:#de632f;background:transparent}.ant-btn-link:hover>a:only-child,.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-link:hover>a:only-child:after,.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:active{color:#ab2800;border-color:#ab2800;background:transparent}.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link[disabled],.ant-btn-link[disabled]:hover,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-link:hover{background:transparent}.ant-btn-link:hover,.ant-btn-link:focus,.ant-btn-link:active{border-color:transparent}.ant-btn-link[disabled],.ant-btn-link[disabled]:hover,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-link[disabled]>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-link[disabled]>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text{color:#000000d9;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-text>a:only-child{color:currentcolor}.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:hover,.ant-btn-text:focus{color:#de632f;border-color:#de632f;background:transparent}.ant-btn-text:hover>a:only-child,.ant-btn-text:focus>a:only-child{color:currentcolor}.ant-btn-text:hover>a:only-child:after,.ant-btn-text:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:active{color:#ab2800;border-color:#ab2800;background:transparent}.ant-btn-text:active>a:only-child{color:currentcolor}.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text[disabled],.ant-btn-text[disabled]:hover,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-text:hover,.ant-btn-text:focus{color:#000000d9;background:rgba(0,0,0,.018);border-color:transparent}.ant-btn-text:active{color:#000000d9;background:rgba(0,0,0,.028);border-color:transparent}.ant-btn-text[disabled],.ant-btn-text[disabled]:hover,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-text[disabled]>a:only-child,.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-text[disabled]:active>a:only-child{color:currentcolor}.ant-btn-text[disabled]>a:only-child:after,.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-text[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous{color:#ff4d4f;border-color:#ff4d4f;background:#fff}.ant-btn-dangerous>a:only-child{color:currentcolor}.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:hover,.ant-btn-dangerous:focus{color:#ff7875;border-color:#ff7875;background:#fff}.ant-btn-dangerous:hover>a:only-child,.ant-btn-dangerous:focus>a:only-child{color:currentcolor}.ant-btn-dangerous:hover>a:only-child:after,.ant-btn-dangerous:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:active{color:#d9363e;border-color:#d9363e;background:#fff}.ant-btn-dangerous:active>a:only-child{color:currentcolor}.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous[disabled],.ant-btn-dangerous[disabled]:hover,.ant-btn-dangerous[disabled]:focus,.ant-btn-dangerous[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous[disabled]>a:only-child,.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-dangerous[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous[disabled]>a:only-child:after,.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-dangerous[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary{color:#fff;border-color:#ff4d4f;background:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-dangerous.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:hover,.ant-btn-dangerous.ant-btn-primary:focus{color:#fff;border-color:#ff7875;background:#ff7875}.ant-btn-dangerous.ant-btn-primary:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:active{color:#fff;border-color:#d9363e;background:#d9363e}.ant-btn-dangerous.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary[disabled],.ant-btn-dangerous.ant-btn-primary[disabled]:hover,.ant-btn-dangerous.ant-btn-primary[disabled]:focus,.ant-btn-dangerous.ant-btn-primary[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link{color:#ff4d4f;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-dangerous.ant-btn-link:focus{color:#de632f;border-color:#de632f;background:transparent}.ant-btn-dangerous.ant-btn-link:active{color:#ab2800;border-color:#ab2800;background:transparent}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-dangerous.ant-btn-link:focus{color:#ff7875;border-color:transparent;background:transparent}.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-dangerous.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:active{color:#d9363e;border-color:transparent;background:transparent}.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text{color:#ff4d4f;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-text>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:hover,.ant-btn-dangerous.ant-btn-text:focus{color:#de632f;border-color:#de632f;background:transparent}.ant-btn-dangerous.ant-btn-text:active{color:#ab2800;border-color:#ab2800;background:transparent}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:hover,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text:hover,.ant-btn-dangerous.ant-btn-text:focus{color:#ff7875;border-color:transparent;background:rgba(0,0,0,.018)}.ant-btn-dangerous.ant-btn-text:hover>a:only-child,.ant-btn-dangerous.ant-btn-text:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:active{color:#d9363e;border-color:transparent;background:rgba(0,0,0,.028)}.ant-btn-dangerous.ant-btn-text:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:hover,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-icon-only{width:32px;height:32px;padding:2.4px 0;font-size:16px;border-radius:2px;vertical-align:-3px}.ant-btn-icon-only>*{font-size:16px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:4.9px 0;font-size:18px;border-radius:2px}.ant-btn-icon-only.ant-btn-lg>*{font-size:18px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:2px}.ant-btn-icon-only.ant-btn-sm>*{font-size:14px}.ant-btn-icon-only>.anticon{display:flex;justify-content:center}a.ant-btn-icon-only{vertical-align:-1px}a.ant-btn-icon-only>.anticon{display:inline}.ant-btn-round{height:32px;padding:4px 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:6.4px 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#fff;border-radius:inherit;opacity:.35;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-plus>svg,.ant-btn .anticon.anticon-minus>svg{shape-rendering:optimizespeed}.ant-btn.ant-btn-loading{position:relative;cursor:default}.ant-btn.ant-btn-loading:before{display:block}.ant-btn>.ant-btn-loading-icon{transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1)}.ant-btn>.ant-btn-loading-icon .anticon{padding-right:8px;animation:none}.ant-btn>.ant-btn-loading-icon .anticon svg{animation:loadingCircle 1s infinite linear}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0}.ant-btn-group{position:relative;display:inline-flex}.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn:hover,.ant-btn-group>.ant-btn:focus,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>.ant-btn:active,.ant-btn-group>span>.ant-btn:active{z-index:2}.ant-btn-group>.ant-btn[disabled],.ant-btn-group>span>.ant-btn[disabled]{z-index:0}.ant-btn-group .ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:6.4px 15px;font-size:16px;border-radius:0}.ant-btn-group-lg .ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn-group-sm .ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn-group .ant-btn+.ant-btn,.ant-btn+.ant-btn-group,.ant-btn-group span+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child{border-radius:2px}.ant-btn-group>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group-sm>.ant-btn:only-child{border-radius:2px}.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-rtl.ant-btn+.ant-btn-group,.ant-btn-rtl.ant-btn-group span+.ant-btn,.ant-btn-rtl.ant-btn-group .ant-btn+span,.ant-btn-rtl.ant-btn-group>span+span,.ant-btn-rtl.ant-btn-group+.ant-btn,.ant-btn-rtl.ant-btn-group+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group-rtl.ant-btn+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group span+.ant-btn,.ant-btn-group-rtl.ant-btn-group .ant-btn+span,.ant-btn-group-rtl.ant-btn-group>span+span,.ant-btn-group-rtl.ant-btn-group+.ant-btn,.ant-btn-group-rtl.ant-btn-group+.ant-btn-group{margin-right:-1px;margin-left:auto}.ant-btn-group.ant-btn-group-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-radius:0 2px 2px 0}.ant-btn-group-rtl.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-radius:2px 0 0 2px}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-radius:0 2px 2px 0}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-radius:2px 0 0 2px}.ant-btn:focus>span,.ant-btn:active>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn.ant-btn-background-ghost{color:#fff;border-color:#fff}.ant-btn.ant-btn-background-ghost,.ant-btn.ant-btn-background-ghost:hover,.ant-btn.ant-btn-background-ghost:active,.ant-btn.ant-btn-background-ghost:focus{background:transparent}.ant-btn.ant-btn-background-ghost:hover,.ant-btn.ant-btn-background-ghost:focus{color:#de632f;border-color:#de632f}.ant-btn.ant-btn-background-ghost:active{color:#ab2800;border-color:#ab2800}.ant-btn.ant-btn-background-ghost[disabled]{color:#00000040;background:transparent;border-color:#d9d9d9}.ant-btn-background-ghost.ant-btn-primary{color:#d03f0a;border-color:#d03f0a;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:hover,.ant-btn-background-ghost.ant-btn-primary:focus{color:#de632f;border-color:#de632f}.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:active{color:#ab2800;border-color:#ab2800}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled]:hover,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#ff4d4f;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:hover,.ant-btn-background-ghost.ant-btn-danger:focus{color:#ff7875;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:active{color:#d9363e;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled]:hover,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous{color:#ff4d4f;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:hover,.ant-btn-background-ghost.ant-btn-dangerous:focus{color:#ff7875;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:active{color:#d9363e;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous[disabled],.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link{color:#ff4d4f;border-color:transparent;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus{color:#ff7875;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active{color:#d9363e;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>*:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn.ant-btn-block{width:100%}.ant-btn:empty{display:inline-block;width:0;visibility:hidden;content:" "}a.ant-btn{padding-top:.01px!important;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-btn-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary{border-right-color:#de632f;border-left-color:#d9d9d9}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled]{border-right-color:#d9d9d9;border-left-color:#de632f}.ant-btn-rtl.ant-btn>.ant-btn-loading-icon .anticon{padding-right:0;padding-left:8px}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0;padding-left:0}.ant-btn-rtl.ant-btn>.anticon+span,.ant-btn-rtl.ant-btn>span+.anticon{margin-right:8px;margin-left:0}.ant-image{position:relative;display:inline-block}.ant-image-img{width:100%;height:auto;vertical-align:middle}.ant-image-img-placeholder{background-color:#f5f5f5;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=);background-repeat:no-repeat;background-position:center center;background-size:30%}.ant-image-mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(0,0,0,.5);cursor:pointer;opacity:0;transition:opacity .3s}.ant-image-mask-info{padding:0 4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-image-mask-info .anticon{margin-inline-end:4px}.ant-image-mask:hover{opacity:1}.ant-image-placeholder{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview{pointer-events:none;height:100%;text-align:center}.ant-image-preview.ant-zoom-enter,.ant-image-preview.antzoom-appear{transform:none;opacity:0;animation-duration:.3s;user-select:none}.ant-image-preview-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-image-preview-mask-hidden{display:none}.ant-image-preview-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-image-preview-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.ant-image-preview-img{max-width:100%;max-height:100%;vertical-align:middle;transform:scaleZ(1);cursor:grab;transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s;user-select:none;pointer-events:auto}.ant-image-preview-img-wrapper{position:absolute;top:0;right:0;bottom:0;left:0;transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s}.ant-image-preview-img-wrapper:before{display:inline-block;width:1px;height:50%;margin-right:-1px;content:""}.ant-image-preview-moving .ant-image-preview-img{cursor:grabbing}.ant-image-preview-moving .ant-image-preview-img-wrapper{transition-duration:0s}.ant-image-preview-wrap{z-index:1080}.ant-image-preview-operations{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";position:absolute;top:0;right:0;z-index:1;display:flex;flex-direction:row-reverse;align-items:center;width:100%;color:#ffffffd9;list-style:none;background:rgba(0,0,0,.1);pointer-events:auto}.ant-image-preview-operations-operation{margin-left:12px;padding:12px;cursor:pointer}.ant-image-preview-operations-operation-disabled{color:#ffffff40;pointer-events:none}.ant-image-preview-operations-operation:last-of-type{margin-left:0}.ant-image-preview-operations-icon{font-size:18px}.ant-image-preview-switch-left,.ant-image-preview-switch-right{position:absolute;top:50%;right:10px;z-index:1;display:flex;align-items:center;justify-content:center;width:44px;height:44px;margin-top:-22px;color:#ffffffd9;background:rgba(0,0,0,.1);border-radius:50%;cursor:pointer;pointer-events:auto}.ant-image-preview-switch-left-disabled,.ant-image-preview-switch-right-disabled{color:#ffffff40;cursor:not-allowed}.ant-image-preview-switch-left-disabled>.anticon,.ant-image-preview-switch-right-disabled>.anticon{cursor:not-allowed}.ant-image-preview-switch-left>.anticon,.ant-image-preview-switch-right>.anticon{font-size:18px}.ant-image-preview-switch-left{left:10px}.ant-image-preview-switch-right{right:10px}.dragging-port-wrap[data-v-279a61df]{position:fixed;bottom:15%;left:50%;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;background:var(--zp-primary-background);box-shadow:0 0 4px var(--zp-secondary);border-radius:8px;padding:16px 32px}.dragging-port-wrap .content[data-v-279a61df]{display:flex;align-items:center;margin:16px 0}.dragging-port-wrap .content .port[data-v-279a61df]{display:flex;align-items:center;justify-content:center;width:128px;height:128px;border-radius:8px;border:1px solid var(--zp-tertiary)}.dragging-port-wrap .content .port .img-wrap[data-v-279a61df]{position:relative}.dragging-port-wrap .content .port .img-wrap[data-v-279a61df] img{max-width:128px;max-height:128px;object-fit:contain}.dragging-port-wrap .content .port .img-wrap .close[data-v-279a61df]{position:absolute;top:0;right:0;transform:translate(50%,-50%);font-size:1.5em;background:white;border-radius:100%;color:#000;z-index:999;cursor:pointer}.v-enter-active[data-v-279a61df],.v-leave-active[data-v-279a61df]{transition:opacity .5s ease}.v-enter-from[data-v-279a61df],.v-leave-to[data-v-279a61df]{opacity:0}.container[data-v-65d66859]{position:relative;user-select:none;height:100%}.container .img[data-v-65d66859]{position:absolute;top:50%}.container .left[data-v-65d66859]{transform:translate(50%,-50%);right:0}.container .right[data-v-65d66859]{transform:translate(-50%,-50%);left:0}.img-sli .ant-drawer-header,.img-sli .ant-drawer-body{padding:0}.img-sli .default-theme .splitpanes__splitter{background-color:#ccc;position:relative;width:4px}.img-sli .default-theme .splitpanes{background-color:#f8f8f8}[data-v-c479b9de] .splitpanes .splitpanes__splitter{background:var(--zp-primary-background)}[data-v-c479b9de] .splitpanes .splitpanes__pane{background:var(--zp-primary-background);height:100vh}.pane[data-v-c479b9de]{height:calc(100vh - 40px);--pane-max-height:calc(100vh - 40px)}.ant-message{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;top:8px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#ff4d4f}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#d03f0a}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active{animation-name:MessageMoveOut;animation-duration:.3s}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}.ant-message-rtl,.ant-message-rtl span{direction:rtl}.ant-message-rtl .anticon{margin-right:0;margin-left:8px}.ant-notification{box-sizing:border-box;margin:0 24px 0 0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;z-index:1010}.ant-notification-topLeft,.ant-notification-bottomLeft{margin-right:0;margin-left:24px}.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-hook-holder{position:relative}.ant-notification-notice{position:relative;width:384px;max-width:calc(100vw - 48px);margin-bottom:16px;margin-left:auto;padding:16px 24px;overflow:hidden;line-height:1.5715;word-wrap:break-word;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-notification-topLeft .ant-notification-notice,.ant-notification-bottomLeft .ant-notification-notice{margin-right:auto;margin-left:0}.ant-notification-notice-message{margin-bottom:8px;color:#000000d9;font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(264px - 100%);max-width:4px;background-color:transparent;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin:before{display:block;content:""}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#52c41a}.anticon.ant-notification-notice-icon-info{color:#d03f0a}.anticon.ant-notification-notice-icon-warning{color:#faad14}.anticon.ant-notification-notice-icon-error{color:#ff4d4f}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:#00000073;outline:none}.ant-notification-notice-close:hover{color:#000000ab}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both}.ant-notification-fade-enter,.ant-notification-fade-appear{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;opacity:0;animation-play-state:paused}.ant-notification-fade-leave{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;animation-duration:.2s;animation-play-state:paused}.ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:NotificationFadeIn;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{animation-name:NotificationFadeOut;animation-play-state:running}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}.ant-notification-rtl{direction:rtl}.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message{padding-right:0;padding-left:24px}.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message,.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description{margin-right:48px;margin-left:0}.ant-notification-rtl .ant-notification-notice-icon{margin-right:4px;margin-left:0}.ant-notification-rtl .ant-notification-notice-close{right:auto;left:22px}.ant-notification-rtl .ant-notification-notice-btn{float:left}.ant-modal{box-sizing:border-box;padding:0 0 24px;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";pointer-events:none;position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);margin:0 auto}.ant-modal.ant-zoom-enter,.ant-modal.antzoom-appear{transform:none;opacity:0;animation-duration:.3s;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-modal-mask-hidden{display:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-wrap{z-index:1000}.ant-modal-title{margin:0;color:#000000d9;font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:#00000073;font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:#000000bf;text-decoration:none}.ant-modal-header{padding:16px 24px;color:#000000d9;background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #f0f0f0;border-radius:0 0 2px 2px}.ant-modal-footer .ant-btn+.ant-btn:not(.ant-dropdown-trigger){margin-bottom:0;margin-left:8px}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;padding-bottom:0;text-align:left;vertical-align:middle}@media (max-width: 767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{flex:1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{display:table;clear:both;content:""}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:#000000d9;font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:#000000d9;font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#ff4d4f}.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon,.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#d03f0a}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-modal-wrap-rtl{direction:rtl}.ant-modal-wrap-rtl .ant-modal-close{right:initial;left:0}.ant-modal-wrap-rtl .ant-modal-footer{text-align:left}.ant-modal-wrap-rtl .ant-modal-footer .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon{float:right;margin-right:0;margin-left:16px}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-right:38px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-btns{float:left}.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl.ant-modal-centered .ant-modal{text-align:right}:root{--grey-13: #000000;--grey-12: #141414;--grey-11: #1f1f1f;--grey-10: #262626;--grey-9: #434343;--grey-8: #595959;--grey-7: #8c8c8c;--grey-6: #bfbfbf;--grey-5: #d9d9d9;--grey-4: #f0f0f0;--grey-3: #f5f5f5;--grey-2: #fafafa;--grey-1: #fff;--primary-color: #d03f0a;--danger-color: #fa114f;--info-color: #17a2b8;--success-color: #28a745;--primary-color-1: #d03f0a11;--primary-color-2: #d03f0a22;--primary-color-3: #d03f0a33;--primary-color-4: #d03f0a44;--primary-color-5: #d03f0a55;--primary-color-6: #d03f0a66;--primary-color-7: #d03f0a77;--primary-color-8: #d03f0a88;--primary-color-9: #d03f0a99;--primary-color-a: #d03f0aaa;--primary-color-b: #d03f0abb;--primary-color-c: #d03f0acc;--primary-color-d: #d03f0add;--primary-color-e: #d03f0aee;--primary-color-f: #d03f0aff;--light-border-color: var(--grey-5);--main-text-color: var(--grey-11);--main-bg-color: var(--grey-3);--zp-black: #222222;--zp-grey96: #2b2b2b;--zp-grey90: #383838;--zp-grey80: #4e4e4e;--zp-grey70: #646464;--zp-grey60: #7a7a7a;--zp-grey50: #909090;--zp-grey40: #a7a7a7;--zp-grey30: #bdbdbd;--zp-grey20: #d3d3d3;--zp-grey10: #e9e9e9;--zp-grey7: #f0f0f0;--zp-grey4: #f6f6f6;--zp-white: #ffffff;--zp-primary: var(--zp-black);--zp-secondary: var(--zp-grey50);--zp-tertiary: var(--zp-grey30);--zp-primary-background: var(--zp-white);--zp-secondary-background: var(--zp-grey4);--zp-tertiary-background: var(--zp-white);--zp-secondary-variant-background: var(--zp-grey7);--zp-border: var(--zp-grey20);--zp-icon-bg: #0004}@media (prefers-color-scheme: dark){:root{--zp-primary: var(--zp-grey20);--zp-secondary: var(--zp-grey60);--zp-tertiary: var(--zp-grey70);--zp-primary-background: var(--zp-black);--zp-secondary-background: var(--zp-grey96);--zp-secondary-variant-background: var(--zp-grey90);--zp-tertiary-background: var(--zp-grey4);--zp-border: var(--zp-grey96);--zp-icon-bg: #fff4}}:root body.dark{--zp-primary: var(--zp-grey20);--zp-secondary: var(--zp-grey60);--zp-tertiary: var(--zp-grey70);--zp-primary-background: var(--zp-black);--zp-secondary-background: var(--zp-grey96);--zp-secondary-variant-background: var(--zp-grey90);--zp-tertiary-background: var(--zp-grey4);--zp-border: var(--zp-grey96);--zp-icon-bg: #fff4}.flex-placeholder,[flex-placeholder]{flex:1}html{position:relative;display:inline-block;width:100%;--scroll-container-max-height: 100vh}body{position:absolute;width:100%;background:var(--zp-primary-background);color:var(--zp-primary)}body ::-webkit-scrollbar{width:10px;background-color:var(--zp-secondary-variant-background)}body ::-webkit-scrollbar-thumb{background-color:var(--zp-secondary);border-radius:5px}body ::-webkit-scrollbar-thumb:hover{background-color:#1453ad}body ::-webkit-scrollbar-track{background-color:var(--zp-secondary-variant-background)}body ::-webkit-scrollbar-track:hover{background-color:var(--zp-secondary-background)}body .ant-tabs>div.ant-tabs-nav{margin:0}body .ant-modal-wrap,body .ant-message{z-index:10000}body .hidden-antd-btns-modal .ant-modal-confirm-btns{display:none}.line-clamp-1{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1;overflow:hidden}.line-clamp-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.line-clamp-3{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.actions>*{margin-right:8px}.tips{background:var(--zp-secondary-background);padding:8px;border-left:4px solid var(--primary-color)} diff --git a/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/index-cc731081.js b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/index-cc731081.js new file mode 100644 index 0000000000000000000000000000000000000000..897058e312e0881457331fe654a06631a52bdee5 --- /dev/null +++ b/TestingforfaivsixEx/content/eichellis/extensions/images-browser/vue/dist/assets/index-cc731081.js @@ -0,0 +1,193 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const i of a)if(i.type==="childList")for(const o of i.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&r(o)}).observe(document,{childList:!0,subtree:!0});function n(a){const i={};return a.integrity&&(i.integrity=a.integrity),a.referrerPolicy&&(i.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?i.credentials="include":a.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(a){if(a.ep)return;a.ep=!0;const i=n(a);fetch(a.href,i)}})();const Y_="modulepreload",X_=function(t){return"/infinite_image_browsing/fe-static/"+t},Dv={},mr=function(e,n,r){if(!n||n.length===0)return e();const a=document.getElementsByTagName("link");return Promise.all(n.map(i=>{if(i=X_(i),i in Dv)return;Dv[i]=!0;const o=i.endsWith(".css"),l=o?'[rel="stylesheet"]':"";if(!!r)for(let f=a.length-1;f>=0;f--){const v=a[f];if(v.href===i&&(!o||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${l}`))return;const u=document.createElement("link");if(u.rel=o?"stylesheet":Y_,o||(u.as="script",u.crossOrigin=""),u.href=i,document.head.appendChild(u),o)return new Promise((f,v)=>{u.addEventListener("load",f),u.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>e())};function Cf(t,e){const n=Object.create(null),r=t.split(",");for(let a=0;a!!n[a.toLowerCase()]:a=>!!n[a]}const it={},Ua=[],Dn=()=>{},J_=()=>!1,Q_=/^on[^a-z]/,hs=t=>Q_.test(t),_f=t=>t.startsWith("onUpdate:"),ht=Object.assign,Sf=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},Z_=Object.prototype.hasOwnProperty,We=(t,e)=>Z_.call(t,e),Se=Array.isArray,Ka=t=>ms(t)==="[object Map]",zy=t=>ms(t)==="[object Set]",Ne=t=>typeof t=="function",vt=t=>typeof t=="string",xf=t=>typeof t=="symbol",nt=t=>t!==null&&typeof t=="object",Wy=t=>nt(t)&&Ne(t.then)&&Ne(t.catch),Vy=Object.prototype.toString,ms=t=>Vy.call(t),eS=t=>ms(t).slice(8,-1),Hy=t=>ms(t)==="[object Object]",Pf=t=>vt(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,_l=Cf(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),gs=t=>{const e=Object.create(null);return n=>e[n]||(e[n]=t(n))},tS=/-(\w)/g,Bn=gs(t=>t.replace(tS,(e,n)=>n?n.toUpperCase():"")),nS=/\B([A-Z])/g,Pa=gs(t=>t.replace(nS,"-$1").toLowerCase()),ys=gs(t=>t.charAt(0).toUpperCase()+t.slice(1)),Sl=gs(t=>t?`on${ys(t)}`:""),oo=(t,e)=>!Object.is(t,e),cu=(t,e)=>{for(let n=0;n{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})},rS=t=>{const e=parseFloat(t);return isNaN(e)?t:e},aS=t=>{const e=vt(t)?Number(t):NaN;return isNaN(e)?t:e};let Fv;const rc=()=>Fv||(Fv=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function vi(t){if(Se(t)){const e={};for(let n=0;n{if(n){const r=n.split(oS);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function wa(t){let e="";if(vt(t))e=t;else if(Se(t))for(let n=0;nvt(t)?t:t==null?"":Se(t)||nt(t)&&(t.toString===Vy||!Ne(t.toString))?JSON.stringify(t,Ky,2):String(t),Ky=(t,e)=>e&&e.__v_isRef?Ky(t,e.value):Ka(e)?{[`Map(${e.size})`]:[...e.entries()].reduce((n,[r,a])=>(n[`${r} =>`]=a,n),{})}:zy(e)?{[`Set(${e.size})`]:[...e.values()]}:nt(e)&&!Se(e)&&!Hy(e)?String(e):e;let dn;class Gy{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this.parent=dn,!e&&dn&&(this.index=(dn.scopes||(dn.scopes=[])).push(this)-1)}get active(){return this._active}run(e){if(this._active){const n=dn;try{return dn=this,e()}finally{dn=n}}}on(){dn=this}off(){dn=this.parent}stop(e){if(this._active){let n,r;for(n=0,r=this.effects.length;n{const e=new Set(t);return e.w=0,e.n=0,e},Yy=t=>(t.w&Ur)>0,Xy=t=>(t.n&Ur)>0,dS=({deps:t})=>{if(t.length)for(let e=0;e{const{deps:e}=t;if(e.length){let n=0;for(let r=0;r{(f==="length"||f>=s)&&l.push(u)})}else switch(n!==void 0&&l.push(o.get(n)),e){case"add":Se(t)?Pf(n)&&l.push(o.get("length")):(l.push(o.get(ga)),Ka(t)&&l.push(o.get(ic)));break;case"delete":Se(t)||(l.push(o.get(ga)),Ka(t)&&l.push(o.get(ic)));break;case"set":Ka(t)&&l.push(o.get(ga));break}if(l.length===1)l[0]&&oc(l[0]);else{const s=[];for(const u of l)u&&s.push(...u);oc(Tf(s))}}function oc(t,e){const n=Se(t)?t:[...t];for(const r of n)r.computed&&jv(r);for(const r of n)r.computed||jv(r)}function jv(t,e){(t!==Nn||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}function pS(t,e){var n;return(n=Bl.get(t))==null?void 0:n.get(e)}const hS=Cf("__proto__,__v_isRef,__isVue"),Zy=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(xf)),mS=Af(),gS=Af(!1,!0),yS=Af(!0),zv=bS();function bS(){const t={};return["includes","indexOf","lastIndexOf"].forEach(e=>{t[e]=function(...n){const r=Me(this);for(let i=0,o=this.length;i{t[e]=function(...n){pi();const r=Me(this)[e].apply(this,n);return hi(),r}}),t}function wS(t){const e=Me(this);return on(e,"has",t),e.hasOwnProperty(t)}function Af(t=!1,e=!1){return function(r,a,i){if(a==="__v_isReactive")return!t;if(a==="__v_isReadonly")return t;if(a==="__v_isShallow")return e;if(a==="__v_raw"&&i===(t?e?LS:ab:e?rb:nb).get(r))return r;const o=Se(r);if(!t){if(o&&We(zv,a))return Reflect.get(zv,a,i);if(a==="hasOwnProperty")return wS}const l=Reflect.get(r,a,i);return(xf(a)?Zy.has(a):hS(a))||(t||on(r,"get",a),e)?l:tt(l)?o&&Pf(a)?l:l.value:nt(l)?t?ws(l):rt(l):l}}const CS=eb(),_S=eb(!0);function eb(t=!1){return function(n,r,a,i){let o=n[r];if(Za(o)&&tt(o)&&!tt(a))return!1;if(!t&&(!jl(a)&&!Za(a)&&(o=Me(o),a=Me(a)),!Se(n)&&tt(o)&&!tt(a)))return o.value=a,!0;const l=Se(n)&&Pf(r)?Number(r)t,bs=t=>Reflect.getPrototypeOf(t);function Go(t,e,n=!1,r=!1){t=t.__v_raw;const a=Me(t),i=Me(e);n||(e!==i&&on(a,"get",e),on(a,"get",i));const{has:o}=bs(a),l=r?Mf:n?$f:lo;if(o.call(a,e))return l(t.get(e));if(o.call(a,i))return l(t.get(i));t!==a&&t.get(e)}function qo(t,e=!1){const n=this.__v_raw,r=Me(n),a=Me(t);return e||(t!==a&&on(r,"has",t),on(r,"has",a)),t===a?n.has(t):n.has(t)||n.has(a)}function Yo(t,e=!1){return t=t.__v_raw,!e&&on(Me(t),"iterate",ga),Reflect.get(t,"size",t)}function Wv(t){t=Me(t);const e=Me(this);return bs(e).has.call(e,t)||(e.add(t),_r(e,"add",t,t)),this}function Vv(t,e){e=Me(e);const n=Me(this),{has:r,get:a}=bs(n);let i=r.call(n,t);i||(t=Me(t),i=r.call(n,t));const o=a.call(n,t);return n.set(t,e),i?oo(e,o)&&_r(n,"set",t,e):_r(n,"add",t,e),this}function Hv(t){const e=Me(this),{has:n,get:r}=bs(e);let a=n.call(e,t);a||(t=Me(t),a=n.call(e,t)),r&&r.call(e,t);const i=e.delete(t);return a&&_r(e,"delete",t,void 0),i}function Uv(){const t=Me(this),e=t.size!==0,n=t.clear();return e&&_r(t,"clear",void 0,void 0),n}function Xo(t,e){return function(r,a){const i=this,o=i.__v_raw,l=Me(o),s=e?Mf:t?$f:lo;return!t&&on(l,"iterate",ga),o.forEach((u,f)=>r.call(a,s(u),s(f),i))}}function Jo(t,e,n){return function(...r){const a=this.__v_raw,i=Me(a),o=Ka(i),l=t==="entries"||t===Symbol.iterator&&o,s=t==="keys"&&o,u=a[t](...r),f=n?Mf:e?$f:lo;return!e&&on(i,"iterate",s?ic:ga),{next(){const{value:v,done:p}=u.next();return p?{value:v,done:p}:{value:l?[f(v[0]),f(v[1])]:f(v),done:p}},[Symbol.iterator](){return this}}}}function Tr(t){return function(...e){return t==="delete"?!1:this}}function TS(){const t={get(i){return Go(this,i)},get size(){return Yo(this)},has:qo,add:Wv,set:Vv,delete:Hv,clear:Uv,forEach:Xo(!1,!1)},e={get(i){return Go(this,i,!1,!0)},get size(){return Yo(this)},has:qo,add:Wv,set:Vv,delete:Hv,clear:Uv,forEach:Xo(!1,!0)},n={get(i){return Go(this,i,!0)},get size(){return Yo(this,!0)},has(i){return qo.call(this,i,!0)},add:Tr("add"),set:Tr("set"),delete:Tr("delete"),clear:Tr("clear"),forEach:Xo(!0,!1)},r={get(i){return Go(this,i,!0,!0)},get size(){return Yo(this,!0)},has(i){return qo.call(this,i,!0)},add:Tr("add"),set:Tr("set"),delete:Tr("delete"),clear:Tr("clear"),forEach:Xo(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(i=>{t[i]=Jo(i,!1,!1),n[i]=Jo(i,!0,!1),e[i]=Jo(i,!1,!0),r[i]=Jo(i,!0,!0)}),[t,n,e,r]}const[IS,AS,MS,kS]=TS();function kf(t,e){const n=e?t?kS:MS:t?AS:IS;return(r,a,i)=>a==="__v_isReactive"?!t:a==="__v_isReadonly"?t:a==="__v_raw"?r:Reflect.get(We(n,a)&&a in r?n:r,a,i)}const NS={get:kf(!1,!1)},$S={get:kf(!1,!0)},RS={get:kf(!0,!1)},nb=new WeakMap,rb=new WeakMap,ab=new WeakMap,LS=new WeakMap;function DS(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function FS(t){return t.__v_skip||!Object.isExtensible(t)?0:DS(eS(t))}function rt(t){return Za(t)?t:Nf(t,!1,tb,NS,nb)}function BS(t){return Nf(t,!1,OS,$S,rb)}function ws(t){return Nf(t,!0,ES,RS,ab)}function Nf(t,e,n,r,a){if(!nt(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const i=a.get(t);if(i)return i;const o=FS(t);if(o===0)return t;const l=new Proxy(t,o===2?r:n);return a.set(t,l),l}function wr(t){return Za(t)?wr(t.__v_raw):!!(t&&t.__v_isReactive)}function Za(t){return!!(t&&t.__v_isReadonly)}function jl(t){return!!(t&&t.__v_isShallow)}function ib(t){return wr(t)||Za(t)}function Me(t){const e=t&&t.__v_raw;return e?Me(e):t}function Cs(t){return Fl(t,"__v_skip",!0),t}const lo=t=>nt(t)?rt(t):t,$f=t=>nt(t)?ws(t):t;function Rf(t){jr&&Nn&&(t=Me(t),Qy(t.dep||(t.dep=Tf())))}function Lf(t,e){t=Me(t);const n=t.dep;n&&oc(n)}function tt(t){return!!(t&&t.__v_isRef===!0)}function W(t){return ob(t,!1)}function $n(t){return ob(t,!0)}function ob(t,e){return tt(t)?t:new jS(t,e)}class jS{constructor(e,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:Me(e),this._value=n?e:lo(e)}get value(){return Rf(this),this._value}set value(e){const n=this.__v_isShallow||jl(e)||Za(e);e=n?e:Me(e),oo(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:lo(e),Lf(this))}}function xe(t){return tt(t)?t.value:t}const zS={get:(t,e,n)=>xe(Reflect.get(t,e,n)),set:(t,e,n,r)=>{const a=t[e];return tt(a)&&!tt(n)?(a.value=n,!0):Reflect.set(t,e,n,r)}};function lb(t){return wr(t)?t:new Proxy(t,zS)}class WS{constructor(e){this.dep=void 0,this.__v_isRef=!0;const{get:n,set:r}=e(()=>Rf(this),()=>Lf(this));this._get=n,this._set=r}get value(){return this._get()}set value(e){this._set(e)}}function VS(t){return new WS(t)}function sb(t){const e=Se(t)?new Array(t.length):{};for(const n in t)e[n]=ub(t,n);return e}class HS{constructor(e,n,r){this._object=e,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const e=this._object[this._key];return e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return pS(Me(this._object),this._key)}}class US{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function Kt(t,e,n){return tt(t)?t:Ne(t)?new US(t):nt(t)&&arguments.length>1?ub(t,e,n):W(t)}function ub(t,e,n){const r=t[e];return tt(r)?r:new HS(t,e,n)}class KS{constructor(e,n,r,a){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this._dirty=!0,this.effect=new If(e,()=>{this._dirty||(this._dirty=!0,Lf(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!a,this.__v_isReadonly=r}get value(){const e=Me(this);return Rf(e),(e._dirty||!e._cacheable)&&(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}function GS(t,e,n=!1){let r,a;const i=Ne(t);return i?(r=t,a=Dn):(r=t.get,a=t.set),new KS(r,a,i||!a,n)}function zr(t,e,n,r){let a;try{a=r?t(...r):t()}catch(i){Mo(i,e,n)}return a}function En(t,e,n,r){if(Ne(t)){const i=zr(t,e,n,r);return i&&Wy(i)&&i.catch(o=>{Mo(o,e,n)}),i}const a=[];for(let i=0;i>>1;uo(Ft[r])Qn&&Ft.splice(e,1)}function JS(t){Se(t)?Ga.push(...t):(!yr||!yr.includes(t,t.allowRecurse?la+1:la))&&Ga.push(t),fb()}function Kv(t,e=so?Qn+1:0){for(;euo(n)-uo(r)),la=0;lat.id==null?1/0:t.id,QS=(t,e)=>{const n=uo(t)-uo(e);if(n===0){if(t.pre&&!e.pre)return-1;if(e.pre&&!t.pre)return 1}return n};function vb(t){lc=!1,so=!0,Ft.sort(QS);const e=Dn;try{for(Qn=0;Qnvt(g)?g.trim():g)),v&&(a=n.map(rS))}let l,s=r[l=Sl(e)]||r[l=Sl(Bn(e))];!s&&i&&(s=r[l=Sl(Pa(e))]),s&&En(s,t,6,a);const u=r[l+"Once"];if(u){if(!t.emitted)t.emitted={};else if(t.emitted[l])return;t.emitted[l]=!0,En(u,t,6,a)}}function pb(t,e,n=!1){const r=e.emitsCache,a=r.get(t);if(a!==void 0)return a;const i=t.emits;let o={},l=!1;if(!Ne(t)){const s=u=>{const f=pb(u,e,!0);f&&(l=!0,ht(o,f))};!n&&e.mixins.length&&e.mixins.forEach(s),t.extends&&s(t.extends),t.mixins&&t.mixins.forEach(s)}return!i&&!l?(nt(t)&&r.set(t,null),null):(Se(i)?i.forEach(s=>o[s]=null):ht(o,i),nt(t)&&r.set(t,o),o)}function Ss(t,e){return!t||!hs(e)?!1:(e=e.slice(2).replace(/Once$/,""),We(t,e[0].toLowerCase()+e.slice(1))||We(t,Pa(e))||We(t,e))}let kt=null,xs=null;function zl(t){const e=kt;return kt=t,xs=t&&t.type.__scopeId||null,e}function hb(t){xs=t}function mb(){xs=null}const ex=t=>_t;function _t(t,e=kt,n){if(!e||t._n)return t;const r=(...a)=>{r._d&&ip(-1);const i=zl(e);let o;try{o=t(...a)}finally{zl(i),r._d&&ip(1)}return o};return r._n=!0,r._c=!0,r._d=!0,r}function fu(t){const{type:e,vnode:n,proxy:r,withProxy:a,props:i,propsOptions:[o],slots:l,attrs:s,emit:u,render:f,renderCache:v,data:p,setupState:g,ctx:c,inheritAttrs:d}=t;let m,h;const y=zl(t);try{if(n.shapeFlag&4){const w=a||r;m=Xn(f.call(w,w,v,i,g,p,c)),h=s}else{const w=e;m=Xn(w.length>1?w(i,{attrs:s,slots:l,emit:u}):w(i,null)),h=e.props?s:tx(s)}}catch(w){Yi.length=0,Mo(w,t,1),m=x(vn)}let b=m;if(h&&d!==!1){const w=Object.keys(h),{shapeFlag:C}=b;w.length&&C&7&&(o&&w.some(_f)&&(h=nx(h,o)),b=jn(b,h))}return n.dirs&&(b=jn(b),b.dirs=b.dirs?b.dirs.concat(n.dirs):n.dirs),n.transition&&(b.transition=n.transition),m=b,zl(y),m}const tx=t=>{let e;for(const n in t)(n==="class"||n==="style"||hs(n))&&((e||(e={}))[n]=t[n]);return e},nx=(t,e)=>{const n={};for(const r in t)(!_f(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n};function rx(t,e,n){const{props:r,children:a,component:i}=t,{props:o,children:l,patchFlag:s}=e,u=i.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&s>=0){if(s&1024)return!0;if(s&16)return r?Gv(r,o,u):!!o;if(s&8){const f=e.dynamicProps;for(let v=0;vt.__isSuspense;function ox(t,e){e&&e.pendingBranch?Se(t)?e.effects.push(...t):e.effects.push(t):JS(t)}function st(t,e){return Ps(t,null,e)}function lx(t,e){return Ps(t,null,{flush:"post"})}const Qo={};function pe(t,e,n){return Ps(t,e,n)}function Ps(t,e,{immediate:n,deep:r,flush:a,onTrack:i,onTrigger:o}=it){var l;const s=Of()===((l=wt)==null?void 0:l.scope)?wt:null;let u,f=!1,v=!1;if(tt(t)?(u=()=>t.value,f=jl(t)):wr(t)?(u=()=>t,r=!0):Se(t)?(v=!0,f=t.some(w=>wr(w)||jl(w)),u=()=>t.map(w=>{if(tt(w))return w.value;if(wr(w))return va(w);if(Ne(w))return zr(w,s,2)})):Ne(t)?e?u=()=>zr(t,s,2):u=()=>{if(!(s&&s.isUnmounted))return p&&p(),En(t,s,3,[g])}:u=Dn,e&&r){const w=u;u=()=>va(w())}let p,g=w=>{p=y.onStop=()=>{zr(w,s,4)}},c;if(ti)if(g=Dn,e?n&&En(e,s,3,[u(),v?[]:void 0,g]):u(),a==="sync"){const w=eP();c=w.__watcherHandles||(w.__watcherHandles=[])}else return Dn;let d=v?new Array(t.length).fill(Qo):Qo;const m=()=>{if(y.active)if(e){const w=y.run();(r||f||(v?w.some((C,_)=>oo(C,d[_])):oo(w,d)))&&(p&&p(),En(e,s,3,[w,d===Qo?void 0:v&&d[0]===Qo?[]:d,g]),d=w)}else y.run()};m.allowRecurse=!!e;let h;a==="sync"?h=m:a==="post"?h=()=>tn(m,s&&s.suspense):(m.pre=!0,s&&(m.id=s.uid),h=()=>_s(m));const y=new If(u,h);e?n?m():d=y.run():a==="post"?tn(y.run.bind(y),s&&s.suspense):y.run();const b=()=>{y.stop(),s&&s.scope&&Sf(s.scope.effects,y)};return c&&c.push(b),b}function sx(t,e,n){const r=this.proxy,a=vt(t)?t.includes(".")?gb(r,t):()=>r[t]:t.bind(r,r);let i;Ne(e)?i=e:(i=e.handler,n=e);const o=wt;ei(this);const l=Ps(a,i.bind(r),n);return o?ei(o):ya(),l}function gb(t,e){const n=e.split(".");return()=>{let r=t;for(let a=0;a{va(n,e)});else if(Hy(t))for(const n in t)va(t[n],e);return t}function or(t,e){const n=kt;if(n===null)return t;const r=Ts(n)||n.proxy,a=t.dirs||(t.dirs=[]);for(let i=0;i{t.isMounted=!0}),Qe(()=>{t.isUnmounting=!0}),t}const yn=[Function,Array],bb={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:yn,onEnter:yn,onAfterEnter:yn,onEnterCancelled:yn,onBeforeLeave:yn,onLeave:yn,onAfterLeave:yn,onLeaveCancelled:yn,onBeforeAppear:yn,onAppear:yn,onAfterAppear:yn,onAppearCancelled:yn},ux={name:"BaseTransition",props:bb,setup(t,{slots:e}){const n=bt(),r=yb();let a;return()=>{const i=e.default&&Ff(e.default(),!0);if(!i||!i.length)return;let o=i[0];if(i.length>1){for(const d of i)if(d.type!==vn){o=d;break}}const l=Me(t),{mode:s}=l;if(r.isLeaving)return du(o);const u=qv(o);if(!u)return du(o);const f=co(u,l,r,n);fo(u,f);const v=n.subTree,p=v&&qv(v);let g=!1;const{getTransitionKey:c}=u.type;if(c){const d=c();a===void 0?a=d:d!==a&&(a=d,g=!0)}if(p&&p.type!==vn&&(!sa(u,p)||g)){const d=co(p,l,r,n);if(fo(p,d),s==="out-in")return r.isLeaving=!0,d.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},du(o);s==="in-out"&&u.type!==vn&&(d.delayLeave=(m,h,y)=>{const b=wb(r,p);b[String(p.key)]=p,m._leaveCb=()=>{h(),m._leaveCb=void 0,delete f.delayedLeave},f.delayedLeave=y})}return o}}},cx=ux;function wb(t,e){const{leavingVNodes:n}=t;let r=n.get(e.type);return r||(r=Object.create(null),n.set(e.type,r)),r}function co(t,e,n,r){const{appear:a,mode:i,persisted:o=!1,onBeforeEnter:l,onEnter:s,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:v,onLeave:p,onAfterLeave:g,onLeaveCancelled:c,onBeforeAppear:d,onAppear:m,onAfterAppear:h,onAppearCancelled:y}=e,b=String(t.key),w=wb(n,t),C=(I,P)=>{I&&En(I,r,9,P)},_=(I,P)=>{const k=P[1];C(I,P),Se(I)?I.every(L=>L.length<=1)&&k():I.length<=1&&k()},E={mode:i,persisted:o,beforeEnter(I){let P=l;if(!n.isMounted)if(a)P=d||l;else return;I._leaveCb&&I._leaveCb(!0);const k=w[b];k&&sa(t,k)&&k.el._leaveCb&&k.el._leaveCb(),C(P,[I])},enter(I){let P=s,k=u,L=f;if(!n.isMounted)if(a)P=m||s,k=h||u,L=y||f;else return;let F=!1;const j=I._enterCb=z=>{F||(F=!0,z?C(L,[I]):C(k,[I]),E.delayedLeave&&E.delayedLeave(),I._enterCb=void 0)};P?_(P,[I,j]):j()},leave(I,P){const k=String(t.key);if(I._enterCb&&I._enterCb(!0),n.isUnmounting)return P();C(v,[I]);let L=!1;const F=I._leaveCb=j=>{L||(L=!0,P(),j?C(c,[I]):C(g,[I]),I._leaveCb=void 0,w[k]===t&&delete w[k])};w[k]=t,p?_(p,[I,F]):F()},clone(I){return co(I,e,n,r)}};return E}function du(t){if(ko(t))return t=jn(t),t.children=null,t}function qv(t){return ko(t)?t.children?t.children[0]:void 0:t}function fo(t,e){t.shapeFlag&6&&t.component?fo(t.component.subTree,e):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Ff(t,e=!1,n){let r=[],a=0;for(let i=0;i1)for(let i=0;iht({name:t.name},e,{setup:t}))():t}const Ki=t=>!!t.type.__asyncLoader;function Ir(t){Ne(t)&&(t={loader:t});const{loader:e,loadingComponent:n,errorComponent:r,delay:a=200,timeout:i,suspensible:o=!0,onError:l}=t;let s=null,u,f=0;const v=()=>(f++,s=null,p()),p=()=>{let g;return s||(g=s=e().catch(c=>{if(c=c instanceof Error?c:new Error(String(c)),l)return new Promise((d,m)=>{l(c,()=>d(v()),()=>m(c),f+1)});throw c}).then(c=>g!==s&&s?s:(c&&(c.__esModule||c[Symbol.toStringTag]==="Module")&&(c=c.default),u=c,c)))};return fe({name:"AsyncComponentWrapper",__asyncLoader:p,get __asyncResolved(){return u},setup(){const g=wt;if(u)return()=>vu(u,g);const c=y=>{s=null,Mo(y,g,13,!r)};if(o&&g.suspense||ti)return p().then(y=>()=>vu(y,g)).catch(y=>(c(y),()=>r?x(r,{error:y}):null));const d=W(!1),m=W(),h=W(!!a);return a&&setTimeout(()=>{h.value=!1},a),i!=null&&setTimeout(()=>{if(!d.value&&!m.value){const y=new Error(`Async component timed out after ${i}ms.`);c(y),m.value=y}},i),p().then(()=>{d.value=!0,g.parent&&ko(g.parent.vnode)&&_s(g.parent.update)}).catch(y=>{c(y),m.value=y}),()=>{if(d.value&&u)return vu(u,g);if(m.value&&r)return x(r,{error:m.value});if(n&&!h.value)return x(n)}}})}function vu(t,e){const{ref:n,props:r,children:a,ce:i}=e.vnode,o=x(t,r,a);return o.ref=n,o.ce=i,delete e.vnode.ce,o}const ko=t=>t.type.__isKeepAlive;function fx(t,e){Cb(t,"a",e)}function dx(t,e){Cb(t,"da",e)}function Cb(t,e,n=wt){const r=t.__wdc||(t.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return t()});if(Es(e,r,n),n){let a=n.parent;for(;a&&a.parent;)ko(a.parent.vnode)&&vx(r,e,n,a),a=a.parent}}function vx(t,e,n,r){const a=Es(e,t,r,!0);ln(()=>{Sf(r[e],a)},n)}function Es(t,e,n=wt,r=!1){if(n){const a=n[t]||(n[t]=[]),i=e.__weh||(e.__weh=(...o)=>{if(n.isUnmounted)return;pi(),ei(n);const l=En(e,n,t,o);return ya(),hi(),l});return r?a.unshift(i):a.push(i),i}}const xr=t=>(e,n=wt)=>(!ti||t==="sp")&&Es(t,(...r)=>e(...r),n),Bf=xr("bm"),Re=xr("m"),_b=xr("bu"),qr=xr("u"),Qe=xr("bum"),ln=xr("um"),px=xr("sp"),hx=xr("rtg"),mx=xr("rtc");function gx(t,e=wt){Es("ec",t,e)}const jf="components",yx="directives";function Sb(t,e){return zf(jf,t,!0,e)||t}const xb=Symbol.for("v-ndc");function bx(t){return vt(t)?zf(jf,t,!1)||t:t||xb}function wx(t){return zf(yx,t)}function zf(t,e,n=!0,r=!1){const a=kt||wt;if(a){const i=a.type;if(t===jf){const l=Jx(i,!1);if(l&&(l===e||l===Bn(e)||l===ys(Bn(e))))return i}const o=Yv(a[t]||i[t],e)||Yv(a.appContext[t],e);return!o&&r?i:o}}function Yv(t,e){return t&&(t[e]||t[Bn(e)]||t[ys(Bn(e))])}function Xv(t,e,n,r){let a;const i=n&&n[r];if(Se(t)||vt(t)){a=new Array(t.length);for(let o=0,l=t.length;oe(o,l,void 0,i&&i[l]));else{const o=Object.keys(t);a=new Array(o.length);for(let l=0,s=o.length;l{const i=r.fn(...a);return i&&(i.key=r.key),i}:r.fn)}return t}function Wl(t,e,n={},r,a){if(kt.isCE||kt.parent&&Ki(kt.parent)&&kt.parent.isCE)return e!=="default"&&(n.name=e),x("slot",n,r&&r());let i=t[e];i&&i._c&&(i._d=!1),Ye();const o=i&&Pb(i(n)),l=Xt(De,{key:n.key||o&&o.key||`_${e}`},o||(r?r():[]),o&&t._===1?64:-2);return!a&&l.scopeId&&(l.slotScopeIds=[l.scopeId+"-s"]),i&&i._c&&(i._d=!0),l}function Pb(t){return t.some(e=>nr(e)?!(e.type===vn||e.type===De&&!Pb(e.children)):!0)?t:null}function G7(t,e){const n={};for(const r in t)n[e&&/[A-Z]/.test(r)?`on:${r}`:Sl(r)]=t[r];return n}const sc=t=>t?Lb(t)?Ts(t)||t.proxy:sc(t.parent):null,Gi=ht(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>sc(t.parent),$root:t=>sc(t.root),$emit:t=>t.emit,$options:t=>Wf(t),$forceUpdate:t=>t.f||(t.f=()=>_s(t.update)),$nextTick:t=>t.n||(t.n=Ke.bind(t.proxy)),$watch:t=>sx.bind(t)}),pu=(t,e)=>t!==it&&!t.__isScriptSetup&&We(t,e),Cx={get({_:t},e){const{ctx:n,setupState:r,data:a,props:i,accessCache:o,type:l,appContext:s}=t;let u;if(e[0]!=="$"){const g=o[e];if(g!==void 0)switch(g){case 1:return r[e];case 2:return a[e];case 4:return n[e];case 3:return i[e]}else{if(pu(r,e))return o[e]=1,r[e];if(a!==it&&We(a,e))return o[e]=2,a[e];if((u=t.propsOptions[0])&&We(u,e))return o[e]=3,i[e];if(n!==it&&We(n,e))return o[e]=4,n[e];uc&&(o[e]=0)}}const f=Gi[e];let v,p;if(f)return e==="$attrs"&&on(t,"get",e),f(t);if((v=l.__cssModules)&&(v=v[e]))return v;if(n!==it&&We(n,e))return o[e]=4,n[e];if(p=s.config.globalProperties,We(p,e))return p[e]},set({_:t},e,n){const{data:r,setupState:a,ctx:i}=t;return pu(a,e)?(a[e]=n,!0):r!==it&&We(r,e)?(r[e]=n,!0):We(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(i[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:r,appContext:a,propsOptions:i}},o){let l;return!!n[o]||t!==it&&We(t,o)||pu(e,o)||(l=i[0])&&We(l,o)||We(r,o)||We(Gi,o)||We(a.config.globalProperties,o)},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:We(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};function q7(t,e,n){const r=bt();if(n&&n.local){const a=W(t[e]);return pe(()=>t[e],i=>a.value=i),pe(a,i=>{i!==t[e]&&r.emit(`update:${e}`,i)}),a}else return{__v_isRef:!0,get value(){return t[e]},set value(a){r.emit(`update:${e}`,a)}}}function Vl(t){return Se(t)?t.reduce((e,n)=>(e[n]=null,e),{}):t}function Y7(t,e){return!t||!e?t||e:Se(t)&&Se(e)?t.concat(e):ht({},Vl(t),Vl(e))}let uc=!0;function _x(t){const e=Wf(t),n=t.proxy,r=t.ctx;uc=!1,e.beforeCreate&&Jv(e.beforeCreate,t,"bc");const{data:a,computed:i,methods:o,watch:l,provide:s,inject:u,created:f,beforeMount:v,mounted:p,beforeUpdate:g,updated:c,activated:d,deactivated:m,beforeDestroy:h,beforeUnmount:y,destroyed:b,unmounted:w,render:C,renderTracked:_,renderTriggered:E,errorCaptured:I,serverPrefetch:P,expose:k,inheritAttrs:L,components:F,directives:j,filters:z}=e;if(u&&Sx(u,r,null),o)for(const A in o){const N=o[A];Ne(N)&&(r[A]=N.bind(n))}if(a){const A=a.call(n,n);nt(A)&&(t.data=rt(A))}if(uc=!0,i)for(const A in i){const N=i[A],D=Ne(N)?N.bind(n,n):Ne(N.get)?N.get.bind(n,n):Dn,q=!Ne(N)&&Ne(N.set)?N.set.bind(n):Dn,ee=K({get:D,set:q});Object.defineProperty(r,A,{enumerable:!0,configurable:!0,get:()=>ee.value,set:Z=>ee.value=Z})}if(l)for(const A in l)Eb(l[A],r,n,A);if(s){const A=Ne(s)?s.call(n):s;Reflect.ownKeys(A).forEach(N=>{ct(N,A[N])})}f&&Jv(f,t,"c");function M(A,N){Se(N)?N.forEach(D=>A(D.bind(n))):N&&A(N.bind(n))}if(M(Bf,v),M(Re,p),M(_b,g),M(qr,c),M(fx,d),M(dx,m),M(gx,I),M(mx,_),M(hx,E),M(Qe,y),M(ln,w),M(px,P),Se(k))if(k.length){const A=t.exposed||(t.exposed={});k.forEach(N=>{Object.defineProperty(A,N,{get:()=>n[N],set:D=>n[N]=D})})}else t.exposed||(t.exposed={});C&&t.render===Dn&&(t.render=C),L!=null&&(t.inheritAttrs=L),F&&(t.components=F),j&&(t.directives=j)}function Sx(t,e,n=Dn){Se(t)&&(t=cc(t));for(const r in t){const a=t[r];let i;nt(a)?"default"in a?i=Xe(a.from||r,a.default,!0):i=Xe(a.from||r):i=Xe(a),tt(i)?Object.defineProperty(e,r,{enumerable:!0,configurable:!0,get:()=>i.value,set:o=>i.value=o}):e[r]=i}}function Jv(t,e,n){En(Se(t)?t.map(r=>r.bind(e.proxy)):t.bind(e.proxy),e,n)}function Eb(t,e,n,r){const a=r.includes(".")?gb(n,r):()=>n[r];if(vt(t)){const i=e[t];Ne(i)&&pe(a,i)}else if(Ne(t))pe(a,t.bind(n));else if(nt(t))if(Se(t))t.forEach(i=>Eb(i,e,n,r));else{const i=Ne(t.handler)?t.handler.bind(n):e[t.handler];Ne(i)&&pe(a,i,t)}}function Wf(t){const e=t.type,{mixins:n,extends:r}=e,{mixins:a,optionsCache:i,config:{optionMergeStrategies:o}}=t.appContext,l=i.get(e);let s;return l?s=l:!a.length&&!n&&!r?s=e:(s={},a.length&&a.forEach(u=>Hl(s,u,o,!0)),Hl(s,e,o)),nt(e)&&i.set(e,s),s}function Hl(t,e,n,r=!1){const{mixins:a,extends:i}=e;i&&Hl(t,i,n,!0),a&&a.forEach(o=>Hl(t,o,n,!0));for(const o in e)if(!(r&&o==="expose")){const l=xx[o]||n&&n[o];t[o]=l?l(t[o],e[o]):e[o]}return t}const xx={data:Qv,props:Zv,emits:Zv,methods:zi,computed:zi,beforeCreate:Ht,created:Ht,beforeMount:Ht,mounted:Ht,beforeUpdate:Ht,updated:Ht,beforeDestroy:Ht,beforeUnmount:Ht,destroyed:Ht,unmounted:Ht,activated:Ht,deactivated:Ht,errorCaptured:Ht,serverPrefetch:Ht,components:zi,directives:zi,watch:Ex,provide:Qv,inject:Px};function Qv(t,e){return e?t?function(){return ht(Ne(t)?t.call(this,this):t,Ne(e)?e.call(this,this):e)}:e:t}function Px(t,e){return zi(cc(t),cc(e))}function cc(t){if(Se(t)){const e={};for(let n=0;n1)return n&&Ne(e)?e.call(r&&r.proxy):e}}function Ix(){return!!(wt||kt||vo)}function Ax(t,e,n,r=!1){const a={},i={};Fl(i,Os,1),t.propsDefaults=Object.create(null),Tb(t,e,a,i);for(const o in t.propsOptions[0])o in a||(a[o]=void 0);n?t.props=r?a:BS(a):t.type.props?t.props=a:t.props=i,t.attrs=i}function Mx(t,e,n,r){const{props:a,attrs:i,vnode:{patchFlag:o}}=t,l=Me(a),[s]=t.propsOptions;let u=!1;if((r||o>0)&&!(o&16)){if(o&8){const f=t.vnode.dynamicProps;for(let v=0;v{s=!0;const[p,g]=Ib(v,e,!0);ht(o,p),g&&l.push(...g)};!n&&e.mixins.length&&e.mixins.forEach(f),t.extends&&f(t.extends),t.mixins&&t.mixins.forEach(f)}if(!i&&!s)return nt(t)&&r.set(t,Ua),Ua;if(Se(i))for(let f=0;f-1,g[1]=d<0||c-1||We(g,"default"))&&l.push(v)}}}const u=[o,l];return nt(t)&&r.set(t,u),u}function ep(t){return t[0]!=="$"}function tp(t){const e=t&&t.toString().match(/^\s*(function|class) (\w+)/);return e?e[2]:t===null?"null":""}function np(t,e){return tp(t)===tp(e)}function rp(t,e){return Se(e)?e.findIndex(n=>np(n,t)):Ne(e)&&np(e,t)?0:-1}const Ab=t=>t[0]==="_"||t==="$stable",Vf=t=>Se(t)?t.map(Xn):[Xn(t)],kx=(t,e,n)=>{if(e._n)return e;const r=_t((...a)=>Vf(e(...a)),n);return r._c=!1,r},Mb=(t,e,n)=>{const r=t._ctx;for(const a in t){if(Ab(a))continue;const i=t[a];if(Ne(i))e[a]=kx(a,i,r);else if(i!=null){const o=Vf(i);e[a]=()=>o}}},kb=(t,e)=>{const n=Vf(e);t.slots.default=()=>n},Nx=(t,e)=>{if(t.vnode.shapeFlag&32){const n=e._;n?(t.slots=Me(e),Fl(e,"_",n)):Mb(e,t.slots={})}else t.slots={},e&&kb(t,e);Fl(t.slots,Os,1)},$x=(t,e,n)=>{const{vnode:r,slots:a}=t;let i=!0,o=it;if(r.shapeFlag&32){const l=e._;l?n&&l===1?i=!1:(ht(a,e),!n&&l===1&&delete a._):(i=!e.$stable,Mb(e,a)),o=e}else e&&(kb(t,e),o={default:1});if(i)for(const l in a)!Ab(l)&&!(l in o)&&delete a[l]};function dc(t,e,n,r,a=!1){if(Se(t)){t.forEach((p,g)=>dc(p,e&&(Se(e)?e[g]:e),n,r,a));return}if(Ki(r)&&!a)return;const i=r.shapeFlag&4?Ts(r.component)||r.component.proxy:r.el,o=a?null:i,{i:l,r:s}=t,u=e&&e.r,f=l.refs===it?l.refs={}:l.refs,v=l.setupState;if(u!=null&&u!==s&&(vt(u)?(f[u]=null,We(v,u)&&(v[u]=null)):tt(u)&&(u.value=null)),Ne(s))zr(s,l,12,[o,f]);else{const p=vt(s),g=tt(s);if(p||g){const c=()=>{if(t.f){const d=p?We(v,s)?v[s]:f[s]:s.value;a?Se(d)&&Sf(d,i):Se(d)?d.includes(i)||d.push(i):p?(f[s]=[i],We(v,s)&&(v[s]=f[s])):(s.value=[i],t.k&&(f[t.k]=s.value))}else p?(f[s]=o,We(v,s)&&(v[s]=o)):g&&(s.value=o,t.k&&(f[t.k]=o))};o?(c.id=-1,tn(c,n)):c()}}}const tn=ox;function Rx(t){return Lx(t)}function Lx(t,e){const n=rc();n.__VUE__=!0;const{insert:r,remove:a,patchProp:i,createElement:o,createText:l,createComment:s,setText:u,setElementText:f,parentNode:v,nextSibling:p,setScopeId:g=Dn,insertStaticContent:c}=t,d=(R,S,O,B=null,H=null,Q=null,ae=!1,ie=null,re=!!S.dynamicChildren)=>{if(R===S)return;R&&!sa(R,S)&&(B=de(R),Z(R,H,Q,!0),R=null),S.patchFlag===-2&&(re=!1,S.dynamicChildren=null);const{type:X,ref:V,shapeFlag:U}=S;switch(X){case Ea:m(R,S,O,B);break;case vn:h(R,S,O,B);break;case xl:R==null&&y(S,O,B,ae);break;case De:F(R,S,O,B,H,Q,ae,ie,re);break;default:U&1?C(R,S,O,B,H,Q,ae,ie,re):U&6?j(R,S,O,B,H,Q,ae,ie,re):(U&64||U&128)&&X.process(R,S,O,B,H,Q,ae,ie,re,ve)}V!=null&&H&&dc(V,R&&R.ref,Q,S||R,!S)},m=(R,S,O,B)=>{if(R==null)r(S.el=l(S.children),O,B);else{const H=S.el=R.el;S.children!==R.children&&u(H,S.children)}},h=(R,S,O,B)=>{R==null?r(S.el=s(S.children||""),O,B):S.el=R.el},y=(R,S,O,B)=>{[R.el,R.anchor]=c(R.children,S,O,B,R.el,R.anchor)},b=({el:R,anchor:S},O,B)=>{let H;for(;R&&R!==S;)H=p(R),r(R,O,B),R=H;r(S,O,B)},w=({el:R,anchor:S})=>{let O;for(;R&&R!==S;)O=p(R),a(R),R=O;a(S)},C=(R,S,O,B,H,Q,ae,ie,re)=>{ae=ae||S.type==="svg",R==null?_(S,O,B,H,Q,ae,ie,re):P(R,S,H,Q,ae,ie,re)},_=(R,S,O,B,H,Q,ae,ie)=>{let re,X;const{type:V,props:U,shapeFlag:se,transition:ce,dirs:we}=R;if(re=R.el=o(R.type,Q,U&&U.is,U),se&8?f(re,R.children):se&16&&I(R.children,re,null,B,H,Q&&V!=="foreignObject",ae,ie),we&&Qr(R,null,B,"created"),E(re,R,R.scopeId,ae,B),U){for(const Oe in U)Oe!=="value"&&!_l(Oe)&&i(re,Oe,null,U[Oe],Q,R.children,B,H,oe);"value"in U&&i(re,"value",null,U.value),(X=U.onVnodeBeforeMount)&&Un(X,B,R)}we&&Qr(R,null,B,"beforeMount");const Pe=(!H||H&&!H.pendingBranch)&&ce&&!ce.persisted;Pe&&ce.beforeEnter(re),r(re,S,O),((X=U&&U.onVnodeMounted)||Pe||we)&&tn(()=>{X&&Un(X,B,R),Pe&&ce.enter(re),we&&Qr(R,null,B,"mounted")},H)},E=(R,S,O,B,H)=>{if(O&&g(R,O),B)for(let Q=0;Q{for(let X=re;X{const ie=S.el=R.el;let{patchFlag:re,dynamicChildren:X,dirs:V}=S;re|=R.patchFlag&16;const U=R.props||it,se=S.props||it;let ce;O&&Zr(O,!1),(ce=se.onVnodeBeforeUpdate)&&Un(ce,O,S,R),V&&Qr(S,R,O,"beforeUpdate"),O&&Zr(O,!0);const we=H&&S.type!=="foreignObject";if(X?k(R.dynamicChildren,X,ie,O,B,we,Q):ae||N(R,S,ie,null,O,B,we,Q,!1),re>0){if(re&16)L(ie,S,U,se,O,B,H);else if(re&2&&U.class!==se.class&&i(ie,"class",null,se.class,H),re&4&&i(ie,"style",U.style,se.style,H),re&8){const Pe=S.dynamicProps;for(let Oe=0;Oe{ce&&Un(ce,O,S,R),V&&Qr(S,R,O,"updated")},B)},k=(R,S,O,B,H,Q,ae)=>{for(let ie=0;ie{if(O!==B){if(O!==it)for(const ie in O)!_l(ie)&&!(ie in B)&&i(R,ie,O[ie],null,ae,S.children,H,Q,oe);for(const ie in B){if(_l(ie))continue;const re=B[ie],X=O[ie];re!==X&&ie!=="value"&&i(R,ie,X,re,ae,S.children,H,Q,oe)}"value"in B&&i(R,"value",O.value,B.value)}},F=(R,S,O,B,H,Q,ae,ie,re)=>{const X=S.el=R?R.el:l(""),V=S.anchor=R?R.anchor:l("");let{patchFlag:U,dynamicChildren:se,slotScopeIds:ce}=S;ce&&(ie=ie?ie.concat(ce):ce),R==null?(r(X,O,B),r(V,O,B),I(S.children,O,V,H,Q,ae,ie,re)):U>0&&U&64&&se&&R.dynamicChildren?(k(R.dynamicChildren,se,O,H,Q,ae,ie),(S.key!=null||H&&S===H.subTree)&&Hf(R,S,!0)):N(R,S,O,V,H,Q,ae,ie,re)},j=(R,S,O,B,H,Q,ae,ie,re)=>{S.slotScopeIds=ie,R==null?S.shapeFlag&512?H.ctx.activate(S,O,B,ae,re):z(S,O,B,H,Q,ae,re):$(R,S,re)},z=(R,S,O,B,H,Q,ae)=>{const ie=R.component=Kx(R,B,H);if(ko(R)&&(ie.ctx.renderer=ve),Gx(ie),ie.asyncDep){if(H&&H.registerDep(ie,M),!R.el){const re=ie.subTree=x(vn);h(null,re,S,O)}return}M(ie,R,S,O,H,Q,ae)},$=(R,S,O)=>{const B=S.component=R.component;if(rx(R,S,O))if(B.asyncDep&&!B.asyncResolved){A(B,S,O);return}else B.next=S,XS(B.update),B.update();else S.el=R.el,B.vnode=S},M=(R,S,O,B,H,Q,ae)=>{const ie=()=>{if(R.isMounted){let{next:V,bu:U,u:se,parent:ce,vnode:we}=R,Pe=V,Oe;Zr(R,!1),V?(V.el=we.el,A(R,V,ae)):V=we,U&&cu(U),(Oe=V.props&&V.props.onVnodeBeforeUpdate)&&Un(Oe,ce,V,we),Zr(R,!0);const $e=fu(R),ft=R.subTree;R.subTree=$e,d(ft,$e,v(ft.el),de(ft),R,H,Q),V.el=$e.el,Pe===null&&ax(R,$e.el),se&&tn(se,H),(Oe=V.props&&V.props.onVnodeUpdated)&&tn(()=>Un(Oe,ce,V,we),H)}else{let V;const{el:U,props:se}=S,{bm:ce,m:we,parent:Pe}=R,Oe=Ki(S);if(Zr(R,!1),ce&&cu(ce),!Oe&&(V=se&&se.onVnodeBeforeMount)&&Un(V,Pe,S),Zr(R,!0),U&&ye){const $e=()=>{R.subTree=fu(R),ye(U,R.subTree,R,H,null)};Oe?S.type.__asyncLoader().then(()=>!R.isUnmounted&&$e()):$e()}else{const $e=R.subTree=fu(R);d(null,$e,O,B,R,H,Q),S.el=$e.el}if(we&&tn(we,H),!Oe&&(V=se&&se.onVnodeMounted)){const $e=S;tn(()=>Un(V,Pe,$e),H)}(S.shapeFlag&256||Pe&&Ki(Pe.vnode)&&Pe.vnode.shapeFlag&256)&&R.a&&tn(R.a,H),R.isMounted=!0,S=O=B=null}},re=R.effect=new If(ie,()=>_s(X),R.scope),X=R.update=()=>re.run();X.id=R.uid,Zr(R,!0),X()},A=(R,S,O)=>{S.component=R;const B=R.vnode.props;R.vnode=S,R.next=null,Mx(R,S.props,B,O),$x(R,S.children,O),pi(),Kv(),hi()},N=(R,S,O,B,H,Q,ae,ie,re=!1)=>{const X=R&&R.children,V=R?R.shapeFlag:0,U=S.children,{patchFlag:se,shapeFlag:ce}=S;if(se>0){if(se&128){q(X,U,O,B,H,Q,ae,ie,re);return}else if(se&256){D(X,U,O,B,H,Q,ae,ie,re);return}}ce&8?(V&16&&oe(X,H,Q),U!==X&&f(O,U)):V&16?ce&16?q(X,U,O,B,H,Q,ae,ie,re):oe(X,H,Q,!0):(V&8&&f(O,""),ce&16&&I(U,O,B,H,Q,ae,ie,re))},D=(R,S,O,B,H,Q,ae,ie,re)=>{R=R||Ua,S=S||Ua;const X=R.length,V=S.length,U=Math.min(X,V);let se;for(se=0;seV?oe(R,H,Q,!0,!1,U):I(S,O,B,H,Q,ae,ie,re,U)},q=(R,S,O,B,H,Q,ae,ie,re)=>{let X=0;const V=S.length;let U=R.length-1,se=V-1;for(;X<=U&&X<=se;){const ce=R[X],we=S[X]=re?Lr(S[X]):Xn(S[X]);if(sa(ce,we))d(ce,we,O,null,H,Q,ae,ie,re);else break;X++}for(;X<=U&&X<=se;){const ce=R[U],we=S[se]=re?Lr(S[se]):Xn(S[se]);if(sa(ce,we))d(ce,we,O,null,H,Q,ae,ie,re);else break;U--,se--}if(X>U){if(X<=se){const ce=se+1,we=cese)for(;X<=U;)Z(R[X],H,Q,!0),X++;else{const ce=X,we=X,Pe=new Map;for(X=we;X<=se;X++){const pt=S[X]=re?Lr(S[X]):Xn(S[X]);pt.key!=null&&Pe.set(pt.key,X)}let Oe,$e=0;const ft=se-we+1;let Qt=!1,ur=0;const zt=new Array(ft);for(X=0;X=ft){Z(pt,H,Q,!0);continue}let Rt;if(pt.key!=null)Rt=Pe.get(pt.key);else for(Oe=we;Oe<=se;Oe++)if(zt[Oe-we]===0&&sa(pt,S[Oe])){Rt=Oe;break}Rt===void 0?Z(pt,H,Q,!0):(zt[Rt-we]=X+1,Rt>=ur?ur=Rt:Qt=!0,d(pt,S[Rt],O,null,H,Q,ae,ie,re),$e++)}const Wt=Qt?Dx(zt):Ua;for(Oe=Wt.length-1,X=ft-1;X>=0;X--){const pt=we+X,Rt=S[pt],Or=pt+1{const{el:Q,type:ae,transition:ie,children:re,shapeFlag:X}=R;if(X&6){ee(R.component.subTree,S,O,B);return}if(X&128){R.suspense.move(S,O,B);return}if(X&64){ae.move(R,S,O,ve);return}if(ae===De){r(Q,S,O);for(let U=0;Uie.enter(Q),H);else{const{leave:U,delayLeave:se,afterLeave:ce}=ie,we=()=>r(Q,S,O),Pe=()=>{U(Q,()=>{we(),ce&&ce()})};se?se(Q,we,Pe):Pe()}else r(Q,S,O)},Z=(R,S,O,B=!1,H=!1)=>{const{type:Q,props:ae,ref:ie,children:re,dynamicChildren:X,shapeFlag:V,patchFlag:U,dirs:se}=R;if(ie!=null&&dc(ie,null,O,R,!0),V&256){S.ctx.deactivate(R);return}const ce=V&1&&se,we=!Ki(R);let Pe;if(we&&(Pe=ae&&ae.onVnodeBeforeUnmount)&&Un(Pe,S,R),V&6)ne(R.component,O,B);else{if(V&128){R.suspense.unmount(O,B);return}ce&&Qr(R,null,S,"beforeUnmount"),V&64?R.type.remove(R,S,O,H,ve,B):X&&(Q!==De||U>0&&U&64)?oe(X,S,O,!1,!0):(Q===De&&U&384||!H&&V&16)&&oe(re,S,O),B&&Y(R)}(we&&(Pe=ae&&ae.onVnodeUnmounted)||ce)&&tn(()=>{Pe&&Un(Pe,S,R),ce&&Qr(R,null,S,"unmounted")},O)},Y=R=>{const{type:S,el:O,anchor:B,transition:H}=R;if(S===De){G(O,B);return}if(S===xl){w(R);return}const Q=()=>{a(O),H&&!H.persisted&&H.afterLeave&&H.afterLeave()};if(R.shapeFlag&1&&H&&!H.persisted){const{leave:ae,delayLeave:ie}=H,re=()=>ae(O,Q);ie?ie(R.el,Q,re):re()}else Q()},G=(R,S)=>{let O;for(;R!==S;)O=p(R),a(R),R=O;a(S)},ne=(R,S,O)=>{const{bum:B,scope:H,update:Q,subTree:ae,um:ie}=R;B&&cu(B),H.stop(),Q&&(Q.active=!1,Z(ae,R,S,O)),ie&&tn(ie,S),tn(()=>{R.isUnmounted=!0},S),S&&S.pendingBranch&&!S.isUnmounted&&R.asyncDep&&!R.asyncResolved&&R.suspenseId===S.pendingId&&(S.deps--,S.deps===0&&S.resolve())},oe=(R,S,O,B=!1,H=!1,Q=0)=>{for(let ae=Q;aeR.shapeFlag&6?de(R.component.subTree):R.shapeFlag&128?R.suspense.next():p(R.anchor||R.el),me=(R,S,O)=>{R==null?S._vnode&&Z(S._vnode,null,null,!0):d(S._vnode||null,R,S,null,null,null,O),Kv(),db(),S._vnode=R},ve={p:d,um:Z,m:ee,r:Y,mt:z,mc:I,pc:N,pbc:k,n:de,o:t};let he,ye;return e&&([he,ye]=e(ve)),{render:me,hydrate:he,createApp:Tx(me,he)}}function Zr({effect:t,update:e},n){t.allowRecurse=e.allowRecurse=n}function Hf(t,e,n=!1){const r=t.children,a=e.children;if(Se(r)&&Se(a))for(let i=0;i>1,t[n[l]]0&&(e[r]=n[i-1]),n[i]=r)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=e[o];return n}const Fx=t=>t.__isTeleport,qi=t=>t&&(t.disabled||t.disabled===""),ap=t=>typeof SVGElement<"u"&&t instanceof SVGElement,vc=(t,e)=>{const n=t&&t.to;return vt(n)?e?e(n):null:n},Bx={__isTeleport:!0,process(t,e,n,r,a,i,o,l,s,u){const{mc:f,pc:v,pbc:p,o:{insert:g,querySelector:c,createText:d,createComment:m}}=u,h=qi(e.props);let{shapeFlag:y,children:b,dynamicChildren:w}=e;if(t==null){const C=e.el=d(""),_=e.anchor=d("");g(C,n,r),g(_,n,r);const E=e.target=vc(e.props,c),I=e.targetAnchor=d("");E&&(g(I,E),o=o||ap(E));const P=(k,L)=>{y&16&&f(b,k,L,a,i,o,l,s)};h?P(n,_):E&&P(E,I)}else{e.el=t.el;const C=e.anchor=t.anchor,_=e.target=t.target,E=e.targetAnchor=t.targetAnchor,I=qi(t.props),P=I?n:_,k=I?C:E;if(o=o||ap(_),w?(p(t.dynamicChildren,w,P,a,i,o,l),Hf(t,e,!0)):s||v(t,e,P,k,a,i,o,l,!1),h)I||Zo(e,n,C,u,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const L=e.target=vc(e.props,c);L&&Zo(e,L,null,u,0)}else I&&Zo(e,_,E,u,1)}Nb(e)},remove(t,e,n,r,{um:a,o:{remove:i}},o){const{shapeFlag:l,children:s,anchor:u,targetAnchor:f,target:v,props:p}=t;if(v&&i(f),(o||!qi(p))&&(i(u),l&16))for(let g=0;g0?Rn||Ua:null,zx(),po>0&&Rn&&Rn.push(t),t}function an(t,e,n,r,a,i){return $b(xn(t,e,n,r,a,i,!0))}function Xt(t,e,n,r,a){return $b(x(t,e,n,r,a,!0))}function nr(t){return t?t.__v_isVNode===!0:!1}function sa(t,e){return t.type===e.type&&t.key===e.key}const Os="__vInternal",Rb=({key:t})=>t??null,Pl=({ref:t,ref_key:e,ref_for:n})=>(typeof t=="number"&&(t=""+t),t!=null?vt(t)||tt(t)||Ne(t)?{i:kt,r:t,k:e,f:!!n}:t:null);function xn(t,e=null,n=null,r=0,a=null,i=t===De?0:1,o=!1,l=!1){const s={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&Rb(e),ref:e&&Pl(e),scopeId:xs,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:r,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:kt};return l?(Kf(s,n),i&128&&t.normalize(s)):n&&(s.shapeFlag|=vt(n)?8:16),po>0&&!o&&Rn&&(s.patchFlag>0||i&6)&&s.patchFlag!==32&&Rn.push(s),s}const x=Wx;function Wx(t,e=null,n=null,r=0,a=null,i=!1){if((!t||t===xb)&&(t=vn),nr(t)){const l=jn(t,e,!0);return n&&Kf(l,n),po>0&&!i&&Rn&&(l.shapeFlag&6?Rn[Rn.indexOf(t)]=l:Rn.push(l)),l.patchFlag|=-2,l}if(Qx(t)&&(t=t.__vccOpts),e){e=Vx(e);let{class:l,style:s}=e;l&&!vt(l)&&(e.class=wa(l)),nt(s)&&(ib(s)&&!Se(s)&&(s=ht({},s)),e.style=vi(s))}const o=vt(t)?1:ix(t)?128:Fx(t)?64:nt(t)?4:Ne(t)?2:0;return xn(t,e,n,r,a,o,i,!0)}function Vx(t){return t?ib(t)||Os in t?ht({},t):t:null}function jn(t,e,n=!1){const{props:r,ref:a,patchFlag:i,children:o}=t,l=e?Gf(r||{},e):r;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:l,key:l&&Rb(l),ref:e&&e.ref?n&&a?Se(a)?a.concat(Pl(e)):[a,Pl(e)]:Pl(e):a,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:o,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==De?i===-1?16:i|16:i,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&jn(t.ssContent),ssFallback:t.ssFallback&&jn(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx,ce:t.ce}}function Fn(t=" ",e=0){return x(Ea,null,t,e)}function pa(t="",e=!1){return e?(Ye(),Xt(vn,null,t)):x(vn,null,t)}function Xn(t){return t==null||typeof t=="boolean"?x(vn):Se(t)?x(De,null,t.slice()):typeof t=="object"?Lr(t):x(Ea,null,String(t))}function Lr(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:jn(t)}function Kf(t,e){let n=0;const{shapeFlag:r}=t;if(e==null)e=null;else if(Se(e))n=16;else if(typeof e=="object")if(r&65){const a=e.default;a&&(a._c&&(a._d=!1),Kf(t,a()),a._c&&(a._d=!0));return}else{n=32;const a=e._;!a&&!(Os in e)?e._ctx=kt:a===3&&kt&&(kt.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else Ne(e)?(e={default:e,_ctx:kt},n=32):(e=String(e),r&64?(n=16,e=[Fn(e)]):n=8);t.children=e,t.shapeFlag|=n}function Gf(...t){const e={};for(let n=0;nwt||kt;let qf,Ma,op="__VUE_INSTANCE_SETTERS__";(Ma=rc()[op])||(Ma=rc()[op]=[]),Ma.push(t=>wt=t),qf=t=>{Ma.length>1?Ma.forEach(e=>e(t)):Ma[0](t)};const ei=t=>{qf(t),t.scope.on()},ya=()=>{wt&&wt.scope.off(),qf(null)};function Lb(t){return t.vnode.shapeFlag&4}let ti=!1;function Gx(t,e=!1){ti=e;const{props:n,children:r}=t.vnode,a=Lb(t);Ax(t,n,a,e),Nx(t,r);const i=a?qx(t,e):void 0;return ti=!1,i}function qx(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=Cs(new Proxy(t.ctx,Cx));const{setup:r}=n;if(r){const a=t.setupContext=r.length>1?Xx(t):null;ei(t),pi();const i=zr(r,t,0,[t.props,a]);if(hi(),ya(),Wy(i)){if(i.then(ya,ya),e)return i.then(o=>{lp(t,o,e)}).catch(o=>{Mo(o,t,0)});t.asyncDep=i}else lp(t,i,e)}else Db(t,e)}function lp(t,e,n){Ne(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:nt(e)&&(t.setupState=lb(e)),Db(t,n)}let sp;function Db(t,e,n){const r=t.type;if(!t.render){if(!e&&sp&&!r.render){const a=r.template||Wf(t).template;if(a){const{isCustomElement:i,compilerOptions:o}=t.appContext.config,{delimiters:l,compilerOptions:s}=r,u=ht(ht({isCustomElement:i,delimiters:l},o),s);r.render=sp(a,u)}}t.render=r.render||Dn}ei(t),pi(),_x(t),hi(),ya()}function Yx(t){return t.attrsProxy||(t.attrsProxy=new Proxy(t.attrs,{get(e,n){return on(t,"get","$attrs"),e[n]}}))}function Xx(t){const e=n=>{t.exposed=n||{}};return{get attrs(){return Yx(t)},slots:t.slots,emit:t.emit,expose:e}}function Ts(t){if(t.exposed)return t.exposeProxy||(t.exposeProxy=new Proxy(lb(Cs(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in Gi)return Gi[n](t)},has(e,n){return n in e||n in Gi}}))}function Jx(t,e=!0){return Ne(t)?t.displayName||t.name:t.name||e&&t.__name}function Qx(t){return Ne(t)&&"__vccOpts"in t}const K=(t,e)=>GS(t,e,ti);function Kr(t,e,n){const r=arguments.length;return r===2?nt(e)&&!Se(e)?nr(e)?x(t,null,[e]):x(t,e):x(t,null,e):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&nr(n)&&(n=[n]),x(t,e,n))}const Zx=Symbol.for("v-scx"),eP=()=>Xe(Zx),tP="3.3.4",nP="http://www.w3.org/2000/svg",ua=typeof document<"u"?document:null,up=ua&&ua.createElement("template"),rP={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,r)=>{const a=e?ua.createElementNS(nP,t):ua.createElement(t,n?{is:n}:void 0);return t==="select"&&r&&r.multiple!=null&&a.setAttribute("multiple",r.multiple),a},createText:t=>ua.createTextNode(t),createComment:t=>ua.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>ua.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,r,a,i){const o=n?n.previousSibling:e.lastChild;if(a&&(a===i||a.nextSibling))for(;e.insertBefore(a.cloneNode(!0),n),!(a===i||!(a=a.nextSibling)););else{up.innerHTML=r?`${t}`:t;const l=up.content;if(r){const s=l.firstChild;for(;s.firstChild;)l.appendChild(s.firstChild);l.removeChild(s)}e.insertBefore(l,n)}return[o?o.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}};function aP(t,e,n){const r=t._vtc;r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}function iP(t,e,n){const r=t.style,a=vt(n);if(n&&!a){if(e&&!vt(e))for(const i in e)n[i]==null&&pc(r,i,"");for(const i in n)pc(r,i,n[i])}else{const i=r.display;a?e!==n&&(r.cssText=n):e&&t.removeAttribute("style"),"_vod"in t&&(r.display=i)}}const cp=/\s*!important$/;function pc(t,e,n){if(Se(n))n.forEach(r=>pc(t,e,r));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const r=oP(t,e);cp.test(n)?t.setProperty(Pa(r),n.replace(cp,""),"important"):t[r]=n}}const fp=["Webkit","Moz","ms"],hu={};function oP(t,e){const n=hu[e];if(n)return n;let r=Bn(e);if(r!=="filter"&&r in t)return hu[e]=r;r=ys(r);for(let a=0;amu||(vP.then(()=>mu=0),mu=Date.now());function hP(t,e){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;En(mP(r,n.value),e,5,[r])};return n.value=t,n.attached=pP(),n}function mP(t,e){if(Se(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(r=>a=>!a._stopped&&r&&r(a))}else return e}const pp=/^on[a-z]/,gP=(t,e,n,r,a=!1,i,o,l,s)=>{e==="class"?aP(t,r,a):e==="style"?iP(t,n,r):hs(e)?_f(e)||fP(t,e,n,r,o):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):yP(t,e,r,a))?sP(t,e,r,i,o,l,s):(e==="true-value"?t._trueValue=r:e==="false-value"&&(t._falseValue=r),lP(t,e,r,a))};function yP(t,e,n,r){return r?!!(e==="innerHTML"||e==="textContent"||e in t&&pp.test(e)&&Ne(n)):e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA"||pp.test(e)&&vt(n)?!1:e in t}function X7(t){const e=bt();if(!e)return;const n=e.ut=(a=t(e.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${e.uid}"]`)).forEach(i=>mc(i,a))},r=()=>{const a=t(e.proxy);hc(e.subTree,a),n(a)};lx(r),Re(()=>{const a=new MutationObserver(r);a.observe(e.subTree.el.parentNode,{childList:!0}),ln(()=>a.disconnect())})}function hc(t,e){if(t.shapeFlag&128){const n=t.suspense;t=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{hc(n.activeBranch,e)})}for(;t.component;)t=t.component.subTree;if(t.shapeFlag&1&&t.el)mc(t.el,e);else if(t.type===De)t.children.forEach(n=>hc(n,e));else if(t.type===xl){let{el:n,anchor:r}=t;for(;n&&(mc(n,e),n!==r);)n=n.nextSibling}}function mc(t,e){if(t.nodeType===1){const n=t.style;for(const r in e)n.setProperty(`--${r}`,e[r])}}const Ar="transition",Oi="animation",lr=(t,{slots:e})=>Kr(cx,Bb(t),e);lr.displayName="Transition";const Fb={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},bP=lr.props=ht({},bb,Fb),ea=(t,e=[])=>{Se(t)?t.forEach(n=>n(...e)):t&&t(...e)},hp=t=>t?Se(t)?t.some(e=>e.length>1):t.length>1:!1;function Bb(t){const e={};for(const F in t)F in Fb||(e[F]=t[F]);if(t.css===!1)return e;const{name:n="v",type:r,duration:a,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:s=i,appearActiveClass:u=o,appearToClass:f=l,leaveFromClass:v=`${n}-leave-from`,leaveActiveClass:p=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=t,c=wP(a),d=c&&c[0],m=c&&c[1],{onBeforeEnter:h,onEnter:y,onEnterCancelled:b,onLeave:w,onLeaveCancelled:C,onBeforeAppear:_=h,onAppear:E=y,onAppearCancelled:I=b}=e,P=(F,j,z)=>{$r(F,j?f:l),$r(F,j?u:o),z&&z()},k=(F,j)=>{F._isLeaving=!1,$r(F,v),$r(F,g),$r(F,p),j&&j()},L=F=>(j,z)=>{const $=F?E:y,M=()=>P(j,F,z);ea($,[j,M]),mp(()=>{$r(j,F?s:i),gr(j,F?f:l),hp($)||gp(j,r,d,M)})};return ht(e,{onBeforeEnter(F){ea(h,[F]),gr(F,i),gr(F,o)},onBeforeAppear(F){ea(_,[F]),gr(F,s),gr(F,u)},onEnter:L(!1),onAppear:L(!0),onLeave(F,j){F._isLeaving=!0;const z=()=>k(F,j);gr(F,v),zb(),gr(F,p),mp(()=>{F._isLeaving&&($r(F,v),gr(F,g),hp(w)||gp(F,r,m,z))}),ea(w,[F,z])},onEnterCancelled(F){P(F,!1),ea(b,[F])},onAppearCancelled(F){P(F,!0),ea(I,[F])},onLeaveCancelled(F){k(F),ea(C,[F])}})}function wP(t){if(t==null)return null;if(nt(t))return[gu(t.enter),gu(t.leave)];{const e=gu(t);return[e,e]}}function gu(t){return aS(t)}function gr(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t._vtc||(t._vtc=new Set)).add(e)}function $r(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.remove(r));const{_vtc:n}=t;n&&(n.delete(e),n.size||(t._vtc=void 0))}function mp(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let CP=0;function gp(t,e,n,r){const a=t._endId=++CP,i=()=>{a===t._endId&&r()};if(n)return setTimeout(i,n);const{type:o,timeout:l,propCount:s}=jb(t,e);if(!o)return r();const u=o+"end";let f=0;const v=()=>{t.removeEventListener(u,p),i()},p=g=>{g.target===t&&++f>=s&&v()};setTimeout(()=>{f(n[c]||"").split(", "),a=r(`${Ar}Delay`),i=r(`${Ar}Duration`),o=yp(a,i),l=r(`${Oi}Delay`),s=r(`${Oi}Duration`),u=yp(l,s);let f=null,v=0,p=0;e===Ar?o>0&&(f=Ar,v=o,p=i.length):e===Oi?u>0&&(f=Oi,v=u,p=s.length):(v=Math.max(o,u),f=v>0?o>u?Ar:Oi:null,p=f?f===Ar?i.length:s.length:0);const g=f===Ar&&/\b(transform|all)(,|$)/.test(r(`${Ar}Property`).toString());return{type:f,timeout:v,propCount:p,hasTransform:g}}function yp(t,e){for(;t.lengthbp(n)+bp(t[r])))}function bp(t){return Number(t.slice(0,-1).replace(",","."))*1e3}function zb(){return document.body.offsetHeight}const Wb=new WeakMap,Vb=new WeakMap,Hb={name:"TransitionGroup",props:ht({},bP,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=bt(),r=yb();let a,i;return qr(()=>{if(!a.length)return;const o=t.moveClass||`${t.name||"v"}-move`;if(!OP(a[0].el,n.vnode.el,o))return;a.forEach(xP),a.forEach(PP);const l=a.filter(EP);zb(),l.forEach(s=>{const u=s.el,f=u.style;gr(u,o),f.transform=f.webkitTransform=f.transitionDuration="";const v=u._moveCb=p=>{p&&p.target!==u||(!p||/transform$/.test(p.propertyName))&&(u.removeEventListener("transitionend",v),u._moveCb=null,$r(u,o))};u.addEventListener("transitionend",v)})}),()=>{const o=Me(t),l=Bb(o);let s=o.tag||De;a=i,i=e.default?Ff(e.default()):[];for(let u=0;udelete t.mode;Hb.props;const SP=Hb;function xP(t){const e=t.el;e._moveCb&&e._moveCb(),e._enterCb&&e._enterCb()}function PP(t){Vb.set(t,t.el.getBoundingClientRect())}function EP(t){const e=Wb.get(t),n=Vb.get(t),r=e.left-n.left,a=e.top-n.top;if(r||a){const i=t.el.style;return i.transform=i.webkitTransform=`translate(${r}px,${a}px)`,i.transitionDuration="0s",t}}function OP(t,e,n){const r=t.cloneNode();t._vtc&&t._vtc.forEach(o=>{o.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(o=>o&&r.classList.add(o)),r.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(r);const{hasTransform:i}=jb(r);return a.removeChild(r),i}const TP=["ctrl","shift","alt","meta"],IP={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>TP.some(n=>t[`${n}Key`]&&!e.includes(n))},Ln=(t,e)=>(n,...r)=>{for(let a=0;an=>{if(!("key"in n))return;const r=Pa(n.key);if(e.some(a=>a===r||AP[a]===r))return t(n)},Is={beforeMount(t,{value:e},{transition:n}){t._vod=t.style.display==="none"?"":t.style.display,n&&e?n.beforeEnter(t):Ti(t,e)},mounted(t,{value:e},{transition:n}){n&&e&&n.enter(t)},updated(t,{value:e,oldValue:n},{transition:r}){!e!=!n&&(r?e?(r.beforeEnter(t),Ti(t,!0),r.enter(t)):r.leave(t,()=>{Ti(t,!1)}):Ti(t,e))},beforeUnmount(t,{value:e}){Ti(t,e)}};function Ti(t,e){t.style.display=e?t._vod:"none"}const MP=ht({patchProp:gP},rP);let wp;function Ub(){return wp||(wp=Rx(MP))}const Ul=(...t)=>{Ub().render(...t)},kP=(...t)=>{const e=Ub().createApp(...t),{mount:n}=e;return e.mount=r=>{const a=NP(r);if(!a)return;const i=e._component;!Ne(i)&&!i.render&&!i.template&&(i.template=a.innerHTML),a.innerHTML="";const o=n(a,!1,a instanceof SVGElement);return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),o},e};function NP(t){return vt(t)?document.querySelector(t):t}function ze(t){"@babel/helpers - typeof";return ze=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ze(t)}function $P(t,e){if(ze(t)!=="object"||t===null)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(ze(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Kb(t){var e=$P(t,"string");return ze(e)==="symbol"?e:String(e)}function te(t,e,n){return e=Kb(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Cp(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function T(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return typeof t=="function"?t(e):t??n}function ge(){for(var t=[],e=0;e0},t.prototype.connect_=function(){!gc||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),JP?(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)},t.prototype.disconnect_=function(){!gc||!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)},t.prototype.onTransitionEnd_=function(e){var n=e.propertyName,r=n===void 0?"":n,a=XP.some(function(i){return!!~r.indexOf(i)});a&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),Yb=function(t,e){for(var n=0,r=Object.keys(e);n"u"||!(Element instanceof Object))){if(!(e instanceof ni(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)||(n.set(e,new oE(e)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(e instanceof ni(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)&&(n.delete(e),n.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&e.activeObservations_.push(n)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new lE(r.target,r.broadcastRect())});this.callback_.call(e,n,e),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),Jb=typeof WeakMap<"u"?new WeakMap:new qb,Qb=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=QP.getInstance(),r=new sE(e,n,this);Jb.set(this,r)}return t}();["observe","unobserve","disconnect"].forEach(function(t){Qb.prototype[t]=function(){var e;return(e=Jb.get(this))[t].apply(e,arguments)}});var Zb=function(){return typeof Kl.ResizeObserver<"u"?Kl.ResizeObserver:Qb}();function e0(t){if(Array.isArray(t))return t}function uE(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var r,a,i,o,l=[],s=!0,u=!1;try{if(i=(n=n.call(t)).next,e===0){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(l.push(r.value),l.length!==e);s=!0);}catch(f){u=!0,a=f}finally{try{if(!s&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw a}}return l}}function yc(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:"",n=arguments.length>1?arguments[1]:void 0,r={},a=/;(?![^(]*\))/g,i=/:(.+)/;return ze(e)==="object"?e:(e.split(a).forEach(function(o){if(o){var l=o.split(i);if(l.length>1){var s=n?Yf(l[0].trim()):l[0].trim();r[s]=l[1].trim()}}}),r)},Fa=function(e,n){return e[n]!==void 0},pn=function t(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=Array.isArray(e)?e:[e],a=[];return r.forEach(function(i){Array.isArray(i)?a.push.apply(a,He(t(i,n))):i&&i.type===De?a.push.apply(a,He(t(i.children,n))):i&&nr(i)?n&&!u0(i)?a.push(i):n||a.push(i):bc(i)&&a.push(i)}),a},$E=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(nr(e))return e.type===De?n==="default"?pn(e.children):[]:e.children&&e.children[n]?pn(e.children[n](r)):[];var a=e.$slots[n]&&e.$slots[n](r);return pn(a)},ha=function(e){for(var n,r=(e==null||(n=e.vnode)===null||n===void 0?void 0:n.el)||e&&(e.$el||e);r&&!r.tagName;)r=r.nextSibling;return r},RE=function(e){var n={};if(e.$&&e.$.vnode){var r=e.$.vnode.props||{};Object.keys(e.$props).forEach(function(l){var s=e.$props[l],u=VP(l);(s!==void 0||u in r)&&(n[l]=s)})}else if(nr(e)&&ze(e.type)==="object"){var a=e.props||{},i={};Object.keys(a).forEach(function(l){i[Yf(l)]=a[l]});var o=e.type.props||{};Object.keys(o).forEach(function(l){var s=UP(o,i,l,i[l]);(s!==void 0||l in i)&&(n[l]=s)})}return n},s0=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,i=void 0;if(e.$){var o=e[n];if(o!==void 0)return typeof o=="function"&&a?o(r):o;i=e.$slots[n],i=a&&i?i(r):i}else if(nr(e)){var l=e.props&&e.props[n];if(l!==void 0&&e.props!==null)return typeof l=="function"&&a?l(r):l;e.type===De?i=e.children:e.children&&e.children[n]&&(i=e.children[n],i=a&&i?i(r):i)}return Array.isArray(i)&&(i=pn(i),i=i.length===1?i[0]:i,i=i.length===0?void 0:i),i};function Pp(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n={};return t.$?n=T(T({},n),t.$attrs):n=T(T({},n),t.props),l0(n)[e?"onEvents":"events"]}function LE(t,e){var n=(nr(t)?t.props:t.$attrs)||{},r=n.style||{};if(typeof r=="string")r=NE(r,e);else if(e&&r){var a={};return Object.keys(r).forEach(function(i){return a[Yf(i)]=r[i]}),a}return r}function u0(t){return t&&(t.type===vn||t.type===De&&t.children.length===0||t.type===Ea&&t.children.trim()==="")}function mi(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=[];return t.forEach(function(n){Array.isArray(n)?e.push.apply(e,He(n)):(n==null?void 0:n.type)===De?e.push.apply(e,He(mi(n.children))):e.push(n)}),e.filter(function(n){return!u0(n)})}function ar(t){return Array.isArray(t)&&t.length===1&&(t=t[0]),t&&t.__v_isVNode&&ze(t.type)!=="symbol"}function Wr(t,e){var n,r,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"default";return(n=e[a])!==null&&n!==void 0?n:(r=t[a])===null||r===void 0?void 0:r.call(t)}const ri=fe({compatConfig:{MODE:3},name:"ResizeObserver",props:{disabled:Boolean,onResize:Function},emits:["resize"],setup:function(e,n){var r=n.slots,a=rt({width:0,height:0,offsetHeight:0,offsetWidth:0}),i=null,o=null,l=function(){o&&(o.disconnect(),o=null)},s=function(p){var g=e.onResize,c=p[0].target,d=c.getBoundingClientRect(),m=d.width,h=d.height,y=c.offsetWidth,b=c.offsetHeight,w=Math.floor(m),C=Math.floor(h);if(a.width!==w||a.height!==C||a.offsetWidth!==y||a.offsetHeight!==b){var _={width:w,height:C,offsetWidth:y,offsetHeight:b};Nt(a,_),g&&Promise.resolve().then(function(){g(T(T({},_),{},{offsetWidth:y,offsetHeight:b}),c)})}},u=bt(),f=function(){var p=e.disabled;if(p){l();return}var g=ha(u),c=g!==i;c&&(l(),i=g),!o&&g&&(o=new Zb(s),o.observe(g))};return Re(function(){f()}),qr(function(){f()}),ln(function(){l()}),pe(function(){return e.disabled},function(){f()},{flush:"post"}),function(){var v;return(v=r.default)===null||v===void 0?void 0:v.call(r)[0]}}});var c0=function(e){return setTimeout(e,16)},f0=function(e){return clearTimeout(e)};typeof window<"u"&&"requestAnimationFrame"in window&&(c0=function(e){return window.requestAnimationFrame(e)},f0=function(e){return window.cancelAnimationFrame(e)});var Ep=0,Qf=new Map;function d0(t){Qf.delete(t)}function Le(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;Ep+=1;var n=Ep;function r(a){if(a===0)d0(n),t();else{var i=c0(function(){r(a-1)});Qf.set(n,i)}}return r(e),n}Le.cancel=function(t){var e=Qf.get(t);return d0(e),f0(e)};var gi=function(){for(var e=arguments.length,n=new Array(e),r=0;r=0)&&(n[a]=t[a]);return n}function ut(t,e){if(t==null)return{};var n=DE(t,e),r,a;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}const p0={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",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"};var FE={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"};const BE=FE;var jE={placeholder:"Select time",rangePlaceholder:["Start time","End time"]};const h0=jE;var zE={lang:T({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"]},BE),timePickerLocale:T({},h0)};const Tp=zE;var cn="${label} is not a valid ${type}",WE={locale:"en",Pagination:p0,DatePicker:Tp,TimePicker:h0,Calendar:Tp,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"},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:cn,method:cn,array:cn,object:cn,number:cn,date:cn,boolean:cn,integer:cn,float:cn,regexp:cn,email:cn,url:cn,hex:cn},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"}};const ho=WE,m0=fe({compatConfig:{MODE:3},name:"LocaleReceiver",props:{componentName:String,defaultLocale:{type:[Object,Function]},children:{type:Function}},setup:function(e,n){var r=n.slots,a=Xe("localeData",{}),i=K(function(){var l=e.componentName,s=l===void 0?"global":l,u=e.defaultLocale,f=u||ho[s||"global"],v=a.antLocale,p=s&&v?v[s]:{};return T(T({},typeof f=="function"?f():f),p||{})}),o=K(function(){var l=a.antLocale,s=l&&l.locale;return l&&l.exist&&!s?ho.locale:s});return function(){var l=e.children||r.default,s=a.antLocale;return l==null?void 0:l(i.value,o.value,s)}}});function Zf(t,e,n){var r=Xe("localeData",{}),a=K(function(){var i=r.antLocale,o=xe(e)||ho[t||"global"],l=t&&i?i[t]:{};return T(T(T({},typeof o=="function"?o():o),l||{}),xe(n)||{})});return[a]}var g0=function(){var e=Ze("empty",{}),n=e.getPrefixCls,r=n("empty-img-default");return x("svg",{class:r,width:"184",height:"152",viewBox:"0 0 184 152"},[x("g",{fill:"none","fill-rule":"evenodd"},[x("g",{transform:"translate(24 31.67)"},[x("ellipse",{class:"".concat(r,"-ellipse"),cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"},null),x("path",{class:"".concat(r,"-path-1"),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"},null),x("path",{class:"".concat(r,"-path-2"),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",transform:"translate(13.56)"},null),x("path",{class:"".concat(r,"-path-3"),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"},null),x("path",{class:"".concat(r,"-path-4"),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"},null)]),x("path",{class:"".concat(r,"-path-5"),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"},null),x("g",{class:"".concat(r,"-g"),transform:"translate(149.65 15.383)"},[x("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"},null),x("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"},null)])])])};g0.PRESENTED_IMAGE_DEFAULT=!0;const VE=g0;var y0=function(){var e=Ze("empty",{}),n=e.getPrefixCls,r=n("empty-img-simple");return x("svg",{class:r,width:"64",height:"41",viewBox:"0 0 64 41"},[x("g",{transform:"translate(0 1)",fill:"none","fill-rule":"evenodd"},[x("ellipse",{class:"".concat(r,"-ellipse"),fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"},null),x("g",{class:"".concat(r,"-g"),"fill-rule":"nonzero",stroke:"#D9D9D9"},[x("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"},null),x("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:"#FAFAFA",class:"".concat(r,"-path")},null)])])])};y0.PRESENTED_IMAGE_SIMPLE=!0;const HE=y0;function Ip(t,e){for(var n=0;n=0||(a[n]=t[n]);return a}function Ap(t){return((e=t)!=null&&typeof e=="object"&&Array.isArray(e)===!1)==1&&Object.prototype.toString.call(t)==="[object Object]";var e}var _0=Object.prototype,S0=_0.toString,UE=_0.hasOwnProperty,x0=/^\s*function (\w+)/;function Mp(t){var e,n=(e=t==null?void 0:t.type)!==null&&e!==void 0?e:t;if(n){var r=n.toString().match(x0);return r?r[1]:""}return""}var Ca=function(t){var e,n;return Ap(t)!==!1&&typeof(e=t.constructor)=="function"&&Ap(n=e.prototype)!==!1&&n.hasOwnProperty("isPrototypeOf")!==!1},KE=function(t){return t},qt=KE,mo=function(t,e){return UE.call(t,e)},GE=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t},ai=Array.isArray||function(t){return S0.call(t)==="[object Array]"},ii=function(t){return S0.call(t)==="[object Function]"},ql=function(t){return Ca(t)&&mo(t,"_vueTypes_name")},P0=function(t){return Ca(t)&&(mo(t,"type")||["_vueTypes_name","validator","default","required"].some(function(e){return mo(t,e)}))};function ed(t,e){return Object.defineProperty(t.bind(e),"__original",{value:t})}function Oa(t,e,n){var r;n===void 0&&(n=!1);var a=!0,i="";r=Ca(t)?t:{type:t};var o=ql(r)?r._vueTypes_name+" - ":"";if(P0(r)&&r.type!==null){if(r.type===void 0||r.type===!0||!r.required&&e===void 0)return a;ai(r.type)?(a=r.type.some(function(v){return Oa(v,e,!0)===!0}),i=r.type.map(function(v){return Mp(v)}).join(" or ")):a=(i=Mp(r))==="Array"?ai(e):i==="Object"?Ca(e):i==="String"||i==="Number"||i==="Boolean"||i==="Function"?function(v){if(v==null)return"";var p=v.constructor.toString().match(x0);return p?p[1]:""}(e)===i:e instanceof r.type}if(!a){var l=o+'value "'+e+'" should be of type "'+i+'"';return n===!1?(qt(l),!1):l}if(mo(r,"validator")&&ii(r.validator)){var s=qt,u=[];if(qt=function(v){u.push(v)},a=r.validator(e),qt=s,!a){var f=(u.length>1?"* ":"")+u.join(` +* `);return u.length=0,n===!1?(qt(f),a):f}}return a}function hn(t,e){var n=Object.defineProperties(e,{_vueTypes_name:{value:t,writable:!0},isRequired:{get:function(){return this.required=!0,this}},def:{value:function(a){return a!==void 0||this.default?ii(a)||Oa(this,a,!0)===!0?(this.default=ai(a)?function(){return[].concat(a)}:Ca(a)?function(){return Object.assign({},a)}:a,this):(qt(this._vueTypes_name+' - invalid default value: "'+a+'"'),this):this}}}),r=n.validator;return ii(r)&&(n.validator=ed(r,n)),n}function ir(t,e){var n=hn(t,e);return Object.defineProperty(n,"validate",{value:function(r){return ii(this.validator)&&qt(this._vueTypes_name+` - calling .validate() will overwrite the current custom validator function. Validator info: +`+JSON.stringify(this)),this.validator=ed(r,this),this}})}function kp(t,e,n){var r,a,i=(r=e,a={},Object.getOwnPropertyNames(r).forEach(function(v){a[v]=Object.getOwnPropertyDescriptor(r,v)}),Object.defineProperties({},a));if(i._vueTypes_name=t,!Ca(n))return i;var o,l,s=n.validator,u=C0(n,["validator"]);if(ii(s)){var f=i.validator;f&&(f=(l=(o=f).__original)!==null&&l!==void 0?l:o),i.validator=ed(f?function(v){return f.call(this,v)&&s.call(this,v)}:s,i)}return Object.assign(i,u)}function Ms(t){return t.replace(/^(?!\s*$)/gm," ")}var qE=function(){return ir("any",{})},YE=function(){return ir("function",{type:Function})},XE=function(){return ir("boolean",{type:Boolean})},JE=function(){return ir("string",{type:String})},QE=function(){return ir("number",{type:Number})},ZE=function(){return ir("array",{type:Array})},eO=function(){return ir("object",{type:Object})},tO=function(){return hn("integer",{type:Number,validator:function(t){return GE(t)}})},nO=function(){return hn("symbol",{validator:function(t){return typeof t=="symbol"}})};function rO(t,e){if(e===void 0&&(e="custom validation failed"),typeof t!="function")throw new TypeError("[VueTypes error]: You must provide a function as argument");return hn(t.name||"<>",{validator:function(n){var r=t(n);return r||qt(this._vueTypes_name+" - "+e),r}})}function aO(t){if(!ai(t))throw new TypeError("[VueTypes error]: You must provide an array as argument.");var e='oneOf - value should be one of "'+t.join('", "')+'".',n=t.reduce(function(r,a){if(a!=null){var i=a.constructor;r.indexOf(i)===-1&&r.push(i)}return r},[]);return hn("oneOf",{type:n.length>0?n:void 0,validator:function(r){var a=t.indexOf(r)!==-1;return a||qt(e),a}})}function iO(t){if(!ai(t))throw new TypeError("[VueTypes error]: You must provide an array as argument");for(var e=!1,n=[],r=0;r0&&n.some(function(s){return o.indexOf(s)===-1})){var l=n.filter(function(s){return o.indexOf(s)===-1});return qt(l.length===1?'shape - required property "'+l[0]+'" is not defined.':'shape - required properties "'+l.join('", "')+'" are not defined.'),!1}return o.every(function(s){if(e.indexOf(s)===-1)return i._vueTypes_isLoose===!0||(qt('shape - shape definition does not include a "'+s+'" property. Allowed keys: "'+e.join('", "')+'".'),!1);var u=Oa(t[s],a[s],!0);return typeof u=="string"&&qt('shape - "'+s+`" property validation error: + `+Ms(u)),u===!0})}});return Object.defineProperty(r,"_vueTypes_isLoose",{writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this}}),r}var Gn=function(){function t(){}return t.extend=function(e){var n=this;if(ai(e))return e.forEach(function(v){return n.extend(v)}),this;var r=e.name,a=e.validate,i=a!==void 0&&a,o=e.getter,l=o!==void 0&&o,s=C0(e,["name","validate","getter"]);if(mo(this,r))throw new TypeError('[VueTypes error]: Type "'+r+'" already defined');var u,f=s.type;return ql(f)?(delete s.type,Object.defineProperty(this,r,l?{get:function(){return kp(r,f,s)}}:{value:function(){var v,p=kp(r,f,s);return p.validator&&(p.validator=(v=p.validator).bind.apply(v,[p].concat([].slice.call(arguments)))),p}})):(u=l?{get:function(){var v=Object.assign({},s);return i?ir(r,v):hn(r,v)},enumerable:!0}:{value:function(){var v,p,g=Object.assign({},s);return v=i?ir(r,g):hn(r,g),g.validator&&(v.validator=(p=g.validator).bind.apply(p,[v].concat([].slice.call(arguments)))),v},enumerable:!0},Object.defineProperty(this,r,u))},b0(t,null,[{key:"any",get:function(){return qE()}},{key:"func",get:function(){return YE().def(this.defaults.func)}},{key:"bool",get:function(){return XE().def(this.defaults.bool)}},{key:"string",get:function(){return JE().def(this.defaults.string)}},{key:"number",get:function(){return QE().def(this.defaults.number)}},{key:"array",get:function(){return ZE().def(this.defaults.array)}},{key:"object",get:function(){return eO().def(this.defaults.object)}},{key:"integer",get:function(){return tO().def(this.defaults.integer)}},{key:"symbol",get:function(){return nO()}}]),t}();function E0(t){var e;return t===void 0&&(t={func:function(){},bool:!0,string:"",number:0,array:function(){return[]},object:function(){return{}},integer:0}),(e=function(n){function r(){return n.apply(this,arguments)||this}return w0(r,n),b0(r,null,[{key:"sensibleDefaults",get:function(){return El({},this.defaults)},set:function(a){this.defaults=a!==!1?El({},a!==!0?a:t):{}}}]),r}(Gn)).defaults=El({},t),e}Gn.defaults={},Gn.custom=rO,Gn.oneOf=aO,Gn.instanceOf=lO,Gn.oneOfType=iO,Gn.arrayOf=oO,Gn.objectOf=sO,Gn.shape=uO,Gn.utils={validate:function(t,e){return Oa(e,t,!0)===!0},toType:function(t,e,n){return n===void 0&&(n=!1),n?ir(t,e):hn(t,e)}};(function(t){function e(){return t.apply(this,arguments)||this}return w0(e,t),e})(E0());var O0=E0({func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0});O0.extend([{name:"looseBool",getter:!0,type:Boolean,default:void 0},{name:"style",getter:!0,type:[String,Object],default:void 0},{name:"VueNode",getter:!0,type:null}]);function Z7(t){return t.default=void 0,t}const J=O0;var cO=["image","description","imageStyle","class"],T0=x(VE,null,null),I0=x(HE,null,null),yi=function(e,n){var r,a=n.slots,i=a===void 0?{}:a,o=n.attrs,l=Ze("empty",e),s=l.direction,u=l.prefixCls,f=u.value,v=T(T({},e),o),p=v.image,g=p===void 0?T0:p,c=v.description,d=c===void 0?((r=i.description)===null||r===void 0?void 0:r.call(i))||void 0:c,m=v.imageStyle,h=v.class,y=h===void 0?"":h,b=ut(v,cO);return x(m0,{componentName:"Empty",children:function(C){var _,E=typeof d<"u"?d:C.description,I=typeof E=="string"?E:"empty",P=null;return typeof g=="string"?P=x("img",{alt:I,src:g},null):P=g,x("div",T({class:ge(f,y,(_={},te(_,"".concat(f,"-normal"),g===I0),te(_,"".concat(f,"-rtl"),s.value==="rtl"),_))},b),[x("div",{class:"".concat(f,"-image"),style:m},[P]),E&&x("p",{class:"".concat(f,"-description")},[E]),i.default&&x("div",{class:"".concat(f,"-footer")},[mi(i.default())])])}},null)};yi.displayName="AEmpty";yi.PRESENTED_IMAGE_DEFAULT=T0;yi.PRESENTED_IMAGE_SIMPLE=I0;yi.inheritAttrs=!1;yi.props={prefixCls:String,image:J.any,description:J.any,imageStyle:{type:Object,default:void 0}};const Mi=No(yi);var fO=function(e){var n=Ze("empty",e),r=n.prefixCls,a=function(o){switch(o){case"Table":case"List":return x(Mi,{image:Mi.PRESENTED_IMAGE_SIMPLE},null);case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return x(Mi,{image:Mi.PRESENTED_IMAGE_SIMPLE,class:"".concat(r.value,"-small")},null);default:return x(Mi,null,null)}};return a(e.componentName)};function A0(t){return x(fO,{componentName:t},null)}var Np={};function dO(t,e){}function vO(t,e,n){!e&&!Np[n]&&(t(!1,n),Np[n]=!0)}function M0(t,e){vO(dO,t,e)}const ks=function(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";M0(t,"[antdv: ".concat(e,"] ").concat(n))};var wc="internalMark",Ol=fe({compatConfig:{MODE:3},name:"ALocaleProvider",props:{locale:{type:Object},ANT_MARK__:String},setup:function(e,n){var r=n.slots;ks(e.ANT_MARK__===wc,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead");var a=rt({antLocale:T(T({},e.locale),{},{exist:!0}),ANT_MARK__:wc});return ct("localeData",a),pe(function(){return e.locale},function(){a.antLocale=T(T({},e.locale),{},{exist:!0})},{immediate:!0}),function(){var i;return(i=r.default)===null||i===void 0?void 0:i.call(r)}}});Ol.install=function(t){return t.component(Ol.name,Ol),t};const pO=No(Ol);gi("bottomLeft","bottomRight","topLeft","topRight");var Ns=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=T(e?{name:e,appear:!0,enterFromClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterToClass:"".concat(e,"-enter ").concat(e,"-enter-active"),leaveFromClass:" ".concat(e,"-leave"),leaveActiveClass:"".concat(e,"-leave ").concat(e,"-leave-active"),leaveToClass:"".concat(e,"-leave ").concat(e,"-leave-active")}:{css:!1},n);return r},hO=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=T(e?{name:e,appear:!0,appearActiveClass:"".concat(e),appearToClass:"".concat(e,"-appear ").concat(e,"-appear-active"),enterFromClass:"".concat(e,"-appear ").concat(e,"-enter ").concat(e,"-appear-prepare ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e),enterToClass:"".concat(e,"-enter ").concat(e,"-appear ").concat(e,"-appear-active ").concat(e,"-enter-active"),leaveActiveClass:"".concat(e," ").concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-active")}:{css:!1},n);return r},_a=function(e,n,r){return r!==void 0?r:"".concat(e,"-").concat(n)};const mO=fe({name:"Notice",inheritAttrs:!1,props:["prefixCls","duration","updateMark","noticeKey","closeIcon","closable","props","onClick","onClose","holder","visible"],setup:function(e,n){var r=n.attrs,a=n.slots,i,o=!1,l=K(function(){return e.duration===void 0?4.5:e.duration}),s=function(){l.value&&!o&&(i=setTimeout(function(){f()},l.value*1e3))},u=function(){i&&(clearTimeout(i),i=null)},f=function(g){g&&g.stopPropagation(),u();var c=e.onClose,d=e.noticeKey;c&&c(d)},v=function(){u(),s()};return Re(function(){s()}),ln(function(){o=!0,u()}),pe([l,function(){return e.updateMark},function(){return e.visible}],function(p,g){var c=_e(p,3),d=c[0],m=c[1],h=c[2],y=_e(g,3),b=y[0],w=y[1],C=y[2];(d!==b||m!==w||h!==C&&C)&&v()},{flush:"post"}),function(){var p,g,c=e.prefixCls,d=e.closable,m=e.closeIcon,h=m===void 0?(p=a.closeIcon)===null||p===void 0?void 0:p.call(a):m,y=e.onClick,b=e.holder,w=r.class,C=r.style,_="".concat(c,"-notice"),E=Object.keys(r).reduce(function(P,k){return(k.substr(0,5)==="data-"||k.substr(0,5)==="aria-"||k==="role")&&(P[k]=r[k]),P},{}),I=x("div",T({class:ge(_,w,te({},"".concat(_,"-closable"),d)),style:C,onMouseenter:u,onMouseleave:s,onClick:y},E),[x("div",{class:"".concat(_,"-content")},[(g=a.default)===null||g===void 0?void 0:g.call(a)]),d?x("a",{tabindex:0,onClick:f,class:"".concat(_,"-close")},[h||x("span",{class:"".concat(_,"-close-x")},null)]):null]);return b?x(Uf,{to:b},{default:function(){return I}}):I}}});var gO=["name","getContainer","appContext","prefixCls","rootPrefixCls","transitionName","hasTransitionName"],$p=0,yO=Date.now();function Rp(){var t=$p;return $p+=1,"rcNotification_".concat(yO,"_").concat(t)}var Cc=fe({name:"Notification",inheritAttrs:!1,props:["prefixCls","transitionName","animation","maxCount","closeIcon"],setup:function(e,n){var r=n.attrs,a=n.expose,i=n.slots,o=new Map,l=W([]),s=K(function(){var v=e.prefixCls,p=e.animation,g=p===void 0?"fade":p,c=e.transitionName;return!c&&g&&(c="".concat(v,"-").concat(g)),hO(c)}),u=function(p,g){var c=p.key||Rp(),d=T(T({},p),{},{key:c}),m=e.maxCount,h=l.value.map(function(b){return b.notice.key}).indexOf(c),y=l.value.concat();h!==-1?y.splice(h,1,{notice:d,holderCallback:g}):(m&&l.value.length>=m&&(d.key=y[0].notice.key,d.updateMark=Rp(),d.userPassKey=c,y.shift()),y.push({notice:d,holderCallback:g})),l.value=y},f=function(p){l.value=l.value.filter(function(g){var c=g.notice,d=c.key,m=c.userPassKey,h=m||d;return h!==p})};return a({add:u,remove:f,notices:l}),function(){var v,p,g=e.prefixCls,c=e.closeIcon,d=c===void 0?(v=i.closeIcon)===null||v===void 0?void 0:v.call(i,{prefixCls:g}):c,m=l.value.map(function(y,b){var w=y.notice,C=y.holderCallback,_=b===l.value.length-1?w.updateMark:void 0,E=w.key,I=w.userPassKey,P=w.content,k=T(T(T({prefixCls:g,closeIcon:typeof d=="function"?d({prefixCls:g}):d},w),w.props),{},{key:E,noticeKey:I||E,updateMark:_,onClose:function(F){var j;f(F),(j=w.onClose)===null||j===void 0||j.call(w)},onClick:w.onClick});return C?x("div",{key:E,class:"".concat(g,"-hook-holder"),ref:function(F){typeof E>"u"||(F?(o.set(E,F),C(F,k)):o.delete(E))}},null):x(mO,k,{default:function(){return[typeof P=="function"?P({prefixCls:g}):P]}})}),h=(p={},te(p,g,1),te(p,r.class,!!r.class),p);return x("div",{class:h,style:r.style||{top:"65px",left:"50%"}},[x(SP,T({tag:"div"},s.value),{default:function(){return[m]}})])}}});Cc.newInstance=function(e,n){var r=e||{},a=r.name,i=a===void 0?"notification":a,o=r.getContainer,l=r.appContext,s=r.prefixCls,u=r.rootPrefixCls,f=r.transitionName,v=r.hasTransitionName,p=ut(r,gO),g=document.createElement("div");if(o){var c=o();c.appendChild(g)}else document.body.appendChild(g);var d=fe({compatConfig:{MODE:3},name:"NotificationWrapper",setup:function(y,b){var w=b.attrs,C=W();return Re(function(){n({notice:function(E){var I;(I=C.value)===null||I===void 0||I.add(E)},removeNotice:function(E){var I;(I=C.value)===null||I===void 0||I.remove(E)},destroy:function(){Ul(null,g),g.parentNode&&g.parentNode.removeChild(g)},component:C})}),function(){var _=nn,E=_.getPrefixCls(i,s),I=_.getRootPrefixCls(u,E),P=v?f:"".concat(I,"-").concat(f);return x(Ya,T(T({},_),{},{notUpdateGlobalConfig:!0,prefixCls:I}),{default:function(){return[x(Cc,T(T({ref:C},w),{},{prefixCls:E,transitionName:P}),null)]}})}}}),m=x(d,p);m.appContext=l||m.appContext,Ul(m,g)};const k0=Cc;var bO={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"};const wO=bO;function Dt(t,e){CO(t)&&(t="100%");var n=_O(t);return t=e===360?t:Math.min(e,Math.max(0,parseFloat(t))),n&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:(e===360?t=(t<0?t%e+e:t%e)/parseFloat(String(e)):t=t%e/parseFloat(String(e)),t)}function el(t){return Math.min(1,Math.max(0,t))}function CO(t){return typeof t=="string"&&t.indexOf(".")!==-1&&parseFloat(t)===1}function _O(t){return typeof t=="string"&&t.indexOf("%")!==-1}function N0(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function tl(t){return t<=1?"".concat(Number(t)*100,"%"):t}function ma(t){return t.length===1?"0"+t:String(t)}function SO(t,e,n){return{r:Dt(t,255)*255,g:Dt(e,255)*255,b:Dt(n,255)*255}}function Lp(t,e,n){t=Dt(t,255),e=Dt(e,255),n=Dt(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),i=0,o=0,l=(r+a)/2;if(r===a)o=0,i=0;else{var s=r-a;switch(o=l>.5?s/(2-r-a):s/(r+a),r){case t:i=(e-n)/s+(e1&&(n-=1),n<1/6?t+(e-t)*(6*n):n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function xO(t,e,n){var r,a,i;if(t=Dt(t,360),e=Dt(e,100),n=Dt(n,100),e===0)a=n,i=n,r=n;else{var o=n<.5?n*(1+e):n+e-n*e,l=2*n-o;r=yu(l,o,t+1/3),a=yu(l,o,t),i=yu(l,o,t-1/3)}return{r:r*255,g:a*255,b:i*255}}function _c(t,e,n){t=Dt(t,255),e=Dt(e,255),n=Dt(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),i=0,o=r,l=r-a,s=r===0?0:l/r;if(r===a)i=0;else{switch(r){case t:i=(e-n)/l+(e>16,g:(t&65280)>>8,b:t&255}}var xc={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"};function Ba(t){var e={r:0,g:0,b:0},n=1,r=null,a=null,i=null,o=!1,l=!1;return typeof t=="string"&&(t=MO(t)),typeof t=="object"&&(fr(t.r)&&fr(t.g)&&fr(t.b)?(e=SO(t.r,t.g,t.b),o=!0,l=String(t.r).substr(-1)==="%"?"prgb":"rgb"):fr(t.h)&&fr(t.s)&&fr(t.v)?(r=tl(t.s),a=tl(t.v),e=PO(t.h,r,a),o=!0,l="hsv"):fr(t.h)&&fr(t.s)&&fr(t.l)&&(r=tl(t.s),i=tl(t.l),e=xO(t.h,r,i),o=!0,l="hsl"),Object.prototype.hasOwnProperty.call(t,"a")&&(n=t.a)),n=N0(n),{ok:o,format:t.format||l,r:Math.min(255,Math.max(e.r,0)),g:Math.min(255,Math.max(e.g,0)),b:Math.min(255,Math.max(e.b,0)),a:n}}var IO="[-\\+]?\\d+%?",AO="[-\\+]?\\d*\\.\\d+%?",Fr="(?:".concat(AO,")|(?:").concat(IO,")"),bu="[\\s|\\(]+(".concat(Fr,")[,|\\s]+(").concat(Fr,")[,|\\s]+(").concat(Fr,")\\s*\\)?"),wu="[\\s|\\(]+(".concat(Fr,")[,|\\s]+(").concat(Fr,")[,|\\s]+(").concat(Fr,")[,|\\s]+(").concat(Fr,")\\s*\\)?"),kn={CSS_UNIT:new RegExp(Fr),rgb:new RegExp("rgb"+bu),rgba:new RegExp("rgba"+wu),hsl:new RegExp("hsl"+bu),hsla:new RegExp("hsla"+wu),hsv:new RegExp("hsv"+bu),hsva:new RegExp("hsva"+wu),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 MO(t){if(t=t.trim().toLowerCase(),t.length===0)return!1;var e=!1;if(xc[t])t=xc[t],e=!0;else if(t==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n=kn.rgb.exec(t);return n?{r:n[1],g:n[2],b:n[3]}:(n=kn.rgba.exec(t),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=kn.hsl.exec(t),n?{h:n[1],s:n[2],l:n[3]}:(n=kn.hsla.exec(t),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=kn.hsv.exec(t),n?{h:n[1],s:n[2],v:n[3]}:(n=kn.hsva.exec(t),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=kn.hex8.exec(t),n?{r:fn(n[1]),g:fn(n[2]),b:fn(n[3]),a:Dp(n[4]),format:e?"name":"hex8"}:(n=kn.hex6.exec(t),n?{r:fn(n[1]),g:fn(n[2]),b:fn(n[3]),format:e?"name":"hex"}:(n=kn.hex4.exec(t),n?{r:fn(n[1]+n[1]),g:fn(n[2]+n[2]),b:fn(n[3]+n[3]),a:Dp(n[4]+n[4]),format:e?"name":"hex8"}:(n=kn.hex3.exec(t),n?{r:fn(n[1]+n[1]),g:fn(n[2]+n[2]),b:fn(n[3]+n[3]),format:e?"name":"hex"}:!1)))))))))}function fr(t){return!!kn.CSS_UNIT.exec(String(t))}var Cu=function(){function t(e,n){e===void 0&&(e=""),n===void 0&&(n={});var r;if(e instanceof t)return e;typeof e=="number"&&(e=TO(e)),this.originalInput=e;var a=Ba(e);this.originalInput=e,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(r=n.format)!==null&&r!==void 0?r:a.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=a.ok}return t.prototype.isDark=function(){return this.getBrightness()<128},t.prototype.isLight=function(){return!this.isDark()},t.prototype.getBrightness=function(){var e=this.toRgb();return(e.r*299+e.g*587+e.b*114)/1e3},t.prototype.getLuminance=function(){var e=this.toRgb(),n,r,a,i=e.r/255,o=e.g/255,l=e.b/255;return i<=.03928?n=i/12.92:n=Math.pow((i+.055)/1.055,2.4),o<=.03928?r=o/12.92:r=Math.pow((o+.055)/1.055,2.4),l<=.03928?a=l/12.92:a=Math.pow((l+.055)/1.055,2.4),.2126*n+.7152*r+.0722*a},t.prototype.getAlpha=function(){return this.a},t.prototype.setAlpha=function(e){return this.a=N0(e),this.roundA=Math.round(100*this.a)/100,this},t.prototype.isMonochrome=function(){var e=this.toHsl().s;return e===0},t.prototype.toHsv=function(){var e=_c(this.r,this.g,this.b);return{h:e.h*360,s:e.s,v:e.v,a:this.a}},t.prototype.toHsvString=function(){var e=_c(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.v*100);return this.a===1?"hsv(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsva(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHsl=function(){var e=Lp(this.r,this.g,this.b);return{h:e.h*360,s:e.s,l:e.l,a:this.a}},t.prototype.toHslString=function(){var e=Lp(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.l*100);return this.a===1?"hsl(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsla(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHex=function(e){return e===void 0&&(e=!1),Sc(this.r,this.g,this.b,e)},t.prototype.toHexString=function(e){return e===void 0&&(e=!1),"#"+this.toHex(e)},t.prototype.toHex8=function(e){return e===void 0&&(e=!1),EO(this.r,this.g,this.b,this.a,e)},t.prototype.toHex8String=function(e){return e===void 0&&(e=!1),"#"+this.toHex8(e)},t.prototype.toHexShortString=function(e){return e===void 0&&(e=!1),this.a===1?this.toHexString(e):this.toHex8String(e)},t.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},t.prototype.toRgbString=function(){var e=Math.round(this.r),n=Math.round(this.g),r=Math.round(this.b);return this.a===1?"rgb(".concat(e,", ").concat(n,", ").concat(r,")"):"rgba(".concat(e,", ").concat(n,", ").concat(r,", ").concat(this.roundA,")")},t.prototype.toPercentageRgb=function(){var e=function(n){return"".concat(Math.round(Dt(n,255)*100),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},t.prototype.toPercentageRgbString=function(){var e=function(n){return Math.round(Dt(n,255)*100)};return this.a===1?"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,")")},t.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var e="#"+Sc(this.r,this.g,this.b,!1),n=0,r=Object.entries(xc);n=0,i=!n&&a&&(e.startsWith("hex")||e==="name");return i?e==="name"&&this.a===0?this.toName():this.toRgbString():(e==="rgb"&&(r=this.toRgbString()),e==="prgb"&&(r=this.toPercentageRgbString()),(e==="hex"||e==="hex6")&&(r=this.toHexString()),e==="hex3"&&(r=this.toHexString(!0)),e==="hex4"&&(r=this.toHex8String(!0)),e==="hex8"&&(r=this.toHex8String()),e==="name"&&(r=this.toName()),e==="hsl"&&(r=this.toHslString()),e==="hsv"&&(r=this.toHsvString()),r||this.toHexString())},t.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},t.prototype.clone=function(){return new t(this.toString())},t.prototype.lighten=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l+=e/100,n.l=el(n.l),new t(n)},t.prototype.brighten=function(e){e===void 0&&(e=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(e/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(e/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(e/100)))),new t(n)},t.prototype.darken=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l-=e/100,n.l=el(n.l),new t(n)},t.prototype.tint=function(e){return e===void 0&&(e=10),this.mix("white",e)},t.prototype.shade=function(e){return e===void 0&&(e=10),this.mix("black",e)},t.prototype.desaturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s-=e/100,n.s=el(n.s),new t(n)},t.prototype.saturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s+=e/100,n.s=el(n.s),new t(n)},t.prototype.greyscale=function(){return this.desaturate(100)},t.prototype.spin=function(e){var n=this.toHsl(),r=(n.h+e)%360;return n.h=r<0?360+r:r,new t(n)},t.prototype.mix=function(e,n){n===void 0&&(n=50);var r=this.toRgb(),a=new t(e).toRgb(),i=n/100,o={r:(a.r-r.r)*i+r.r,g:(a.g-r.g)*i+r.g,b:(a.b-r.b)*i+r.b,a:(a.a-r.a)*i+r.a};return new t(o)},t.prototype.analogous=function(e,n){e===void 0&&(e=6),n===void 0&&(n=30);var r=this.toHsl(),a=360/n,i=[this];for(r.h=(r.h-(a*e>>1)+720)%360;--e;)r.h=(r.h+a)%360,i.push(new t(r));return i},t.prototype.complement=function(){var e=this.toHsl();return e.h=(e.h+180)%360,new t(e)},t.prototype.monochromatic=function(e){e===void 0&&(e=6);for(var n=this.toHsv(),r=n.h,a=n.s,i=n.v,o=[],l=1/e;e--;)o.push(new t({h:r,s:a,v:i})),i=(i+l)%1;return o},t.prototype.splitcomplement=function(){var e=this.toHsl(),n=e.h;return[this,new t({h:(n+72)%360,s:e.s,l:e.l}),new t({h:(n+216)%360,s:e.s,l:e.l})]},t.prototype.onBackground=function(e){var n=this.toRgb(),r=new t(e).toRgb(),a=n.a+r.a*(1-n.a);return new t({r:(n.r*n.a+r.r*r.a*(1-n.a))/a,g:(n.g*n.a+r.g*r.a*(1-n.a))/a,b:(n.b*n.a+r.b*r.a*(1-n.a))/a,a})},t.prototype.triad=function(){return this.polyad(3)},t.prototype.tetrad=function(){return this.polyad(4)},t.prototype.polyad=function(e){for(var n=this.toHsl(),r=n.h,a=[this],i=360/e,o=1;o=60&&Math.round(t.h)<=240?r=n?Math.round(t.h)-nl*e:Math.round(t.h)+nl*e:r=n?Math.round(t.h)+nl*e:Math.round(t.h)-nl*e,r<0?r+=360:r>=360&&(r-=360),r}function zp(t,e,n){if(t.h===0&&t.s===0)return t.s;var r;return n?r=t.s-Fp*e:e===R0?r=t.s+Fp:r=t.s+kO*e,r>1&&(r=1),n&&e===$0&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2))}function Wp(t,e,n){var r;return n?r=t.v+NO*e:r=t.v-$O*e,r>1&&(r=1),Number(r.toFixed(2))}function go(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[],r=Ba(t),a=$0;a>0;a-=1){var i=Bp(r),o=rl(Ba({h:jp(i,a,!0),s:zp(i,a,!0),v:Wp(i,a,!0)}));n.push(o)}n.push(rl(r));for(var l=1;l<=R0;l+=1){var s=Bp(r),u=rl(Ba({h:jp(s,l),s:zp(s,l),v:Wp(s,l)}));n.push(u)}return e.theme==="dark"?RO.map(function(f){var v=f.index,p=f.opacity,g=rl(LO(Ba(e.backgroundColor||"#141414"),Ba(n[v]),p*100));return g}):n}var _u={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},Su={},xu={};Object.keys(_u).forEach(function(t){Su[t]=go(_u[t]),Su[t].primary=Su[t][5],xu[t]=go(_u[t],{theme:"dark",backgroundColor:"#141414"}),xu[t].primary=xu[t][5]});var Vp=[],ki=[],DO="insert-css: You need to provide a CSS string. Usage: insertCss(cssString[, options]).";function FO(){var t=document.createElement("style");return t.setAttribute("type","text/css"),t}function BO(t,e){if(e=e||{},t===void 0)throw new Error(DO);var n=e.prepend===!0?"prepend":"append",r=e.container!==void 0?e.container:document.querySelector("head"),a=Vp.indexOf(r);a===-1&&(a=Vp.push(r)-1,ki[a]={});var i;return ki[a]!==void 0&&ki[a][n]!==void 0?i=ki[a][n]:(i=ki[a][n]=FO(),n==="prepend"?r.insertBefore(i,r.childNodes[0]):r.appendChild(i)),t.charCodeAt(0)===65279&&(t=t.substr(1,t.length)),i.styleSheet?i.styleSheet.cssText+=t:i.textContent+=t,i}function Hp(t){for(var e=1;e * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,Kp=!1,WO=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:zO;Ke(function(){Kp||(typeof window<"u"&&window.document&&window.document.documentElement&&BO(e,{prepend:!0}),Kp=!0)})},VO=["icon","primaryColor","secondaryColor"];function HO(t,e){if(t==null)return{};var n=UO(t,e),r,a;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function UO(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,i;for(i=0;i=0)&&(n[a]=t[a]);return n}function Tl(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function sT(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,i;for(i=0;i=0)&&(n[a]=t[a]);return n}F0("#1890ff");var wi=function(e,n){var r,a=Yp({},e,n.attrs),i=a.class,o=a.icon,l=a.spin,s=a.rotate,u=a.tabindex,f=a.twoToneColor,v=a.onClick,p=lT(a,tT),g=(r={anticon:!0},Ec(r,"anticon-".concat(o.name),!!o.name),Ec(r,i,i),r),c=l===""||l||o.name==="loading"?"anticon-spin":"",d=u;d===void 0&&v&&(d=-1,p.tabindex=d);var m=s?{msTransform:"rotate(".concat(s,"deg)"),transform:"rotate(".concat(s,"deg)")}:void 0,h=D0(f),y=nT(h,2),b=y[0],w=y[1];return x("span",Yp({role:"img","aria-label":o.name},p,{onClick:v,class:g}),[x(td,{class:c,icon:o,primaryColor:b,secondaryColor:w,style:m},null)])};wi.props={spin:Boolean,rotate:Number,icon:Object,twoToneColor:String};wi.displayName="AntdIcon";wi.inheritAttrs=!1;wi.getTwoToneColor=eT;wi.setTwoToneColor=F0;const lt=wi;function Xp(t){for(var e=1;e=0;--D){var q=this.tryEntries[D],ee=q.completion;if(q.tryLoc==="root")return N("end");if(q.tryLoc<=this.prev){var Z=i.call(q,"catchLoc"),Y=i.call(q,"finallyLoc");if(Z&&Y){if(this.prev=0;--N){var D=this.tryEntries[N];if(D.tryLoc<=this.prev&&i.call(D,"finallyLoc")&&this.prev=0;--A){var N=this.tryEntries[A];if(N.finallyLoc===M)return this.complete(N.completion,N.afterLoc),L(N),c}},catch:function(M){for(var A=this.tryEntries.length-1;A>=0;--A){var N=this.tryEntries[A];if(N.tryLoc===M){var D=N.completion;if(D.type==="throw"){var q=D.arg;L(N)}return q}}throw new Error("illegal catch attempt")},delegateYield:function(M,A,N){return this.delegate={iterator:j(M),resultName:A,nextLoc:N},this.method==="next"&&(this.arg=void 0),c}},r}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports})(G0);var DT=G0.exports,Il=DT(),FT=Il;try{regeneratorRuntime=Il}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=Il:Function("r","regeneratorRuntime = r")(Il)}const nh=sd(FT);var BT={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{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"}}]},name:"check-circle",theme:"outlined"};const jT=BT;function rh(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:Q0,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Z0,r;switch(t){case"topLeft":r={left:"0px",top:e,bottom:"auto"};break;case"topRight":r={right:"0px",top:e,bottom:"auto"};break;case"bottomLeft":r={left:"0px",top:"auto",bottom:n};break;default:r={right:"0px",top:"auto",bottom:n};break}return r}function nI(t,e){var n=t.prefixCls,r=t.placement,a=r===void 0?ew:r,i=t.getContainer,o=i===void 0?tw:i,l=t.top,s=t.bottom,u=t.closeIcon,f=u===void 0?nw:u,v=t.appContext,p=mI(),g=p.getPrefixCls,c=g("notification",n||Oc),d="".concat(c,"-").concat(a,"-").concat(Tc),m=ca[d];if(m){Promise.resolve(m).then(function(y){e(y)});return}var h=ge("".concat(c,"-").concat(a),te({},"".concat(c,"-rtl"),Tc===!0));k0.newInstance({name:"notification",prefixCls:n||Oc,class:h,style:tI(a,l,s),appContext:v,getContainer:o,closeIcon:function(b){var w=b.prefixCls,C=x("span",{class:"".concat(w,"-close-x")},[Wi(f,{},x(Ci,{class:"".concat(w,"-close-icon")},null))]);return C},maxCount:rw,hasTransitionName:!0},function(y){ca[d]=y,e(y)})}var rI={success:Y0,info:X0,error:Jl,warning:vd};function aI(t){var e=t.icon,n=t.type,r=t.description,a=t.message,i=t.btn,o=t.duration===void 0?J0:t.duration;nI(t,function(l){l.notice({content:function(u){var f=u.prefixCls,v="".concat(f,"-notice"),p=null;if(e)p=function(){return x("span",{class:"".concat(v,"-icon")},[Wi(e)])};else if(n){var g=rI[n];p=function(){return x(g,{class:"".concat(v,"-icon ").concat(v,"-icon-").concat(n)},null)}}return x("div",{class:p?"".concat(v,"-with-icon"):""},[p&&p(),x("div",{class:"".concat(v,"-message")},[!r&&p?x("span",{class:"".concat(v,"-message-single-line-auto-margin")},null):null,Wi(a)]),x("div",{class:"".concat(v,"-description")},[Wi(r)]),i?x("span",{class:"".concat(v,"-btn")},[Wi(i)]):null])},duration:o,closable:!0,onClose:t.onClose,onClick:t.onClick,key:t.key,style:t.style||{},class:t.class})})}var yo={open:aI,close:function(e){Object.keys(ca).forEach(function(n){return Promise.resolve(ca[n]).then(function(r){r.removeNotice(e)})})},config:eI,destroy:function(){Object.keys(ca).forEach(function(e){Promise.resolve(ca[e]).then(function(n){n.destroy()}),delete ca[e]})}},iI=["success","info","warning","error"];iI.forEach(function(t){yo[t]=function(e){return yo.open(T(T({},e),{},{type:t}))}});yo.warn=yo.warning;const oI=yo;function $o(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var lI="vc-util-key";function aw(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.mark;return e?e.startsWith("data-")?e:"data-".concat(e):lI}function hd(t){if(t.attachTo)return t.attachTo;var e=document.querySelector("head");return e||document.body}function sh(t){var e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!$o())return null;var r=document.createElement("style");if((e=n.csp)!==null&&e!==void 0&&e.nonce){var a;r.nonce=(a=n.csp)===null||a===void 0?void 0:a.nonce}r.innerHTML=t;var i=hd(n),o=i.firstChild;return n.prepend&&i.prepend?i.prepend(r):n.prepend&&o?i.insertBefore(r,o):i.appendChild(r),r}var Ic=new Map;function sI(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=hd(e);return Array.from(Ic.get(n).children).find(function(r){return r.tagName==="STYLE"&&r.getAttribute(aw(e))===t})}function uI(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=hd(n);if(!Ic.has(r)){var a=sh("",n),i=a.parentNode;Ic.set(r,i),i.removeChild(a)}var o=sI(e,n);if(o){var l,s;if((l=n.csp)!==null&&l!==void 0&&l.nonce&&o.nonce!==((s=n.csp)===null||s===void 0?void 0:s.nonce)){var u;o.nonce=(u=n.csp)===null||u===void 0?void 0:u.nonce}return o.innerHTML!==t&&(o.innerHTML=t),o}var f=sh(t,n);return f.setAttribute(aw(n),e),f}const On=function(t,e,n){M0(t,"[ant-design-vue: ".concat(e,"] ").concat(n))};var cI="-ant-".concat(Date.now(),"-").concat(Math.random());function fI(t,e){var n={},r=function(f,v){var p=f.clone();return p=(v==null?void 0:v(p))||p,p.toRgbString()},a=function(f,v){var p=new Cu(f),g=go(p.toRgbString());n["".concat(v,"-color")]=r(p),n["".concat(v,"-color-disabled")]=g[1],n["".concat(v,"-color-hover")]=g[4],n["".concat(v,"-color-active")]=g[6],n["".concat(v,"-color-outline")]=p.clone().setAlpha(.2).toRgbString(),n["".concat(v,"-color-deprecated-bg")]=g[1],n["".concat(v,"-color-deprecated-border")]=g[3]};if(e.primaryColor){a(e.primaryColor,"primary");var i=new Cu(e.primaryColor),o=go(i.toRgbString());o.forEach(function(u,f){n["primary-".concat(f+1)]=u}),n["primary-color-deprecated-l-35"]=r(i,function(u){return u.lighten(35)}),n["primary-color-deprecated-l-20"]=r(i,function(u){return u.lighten(20)}),n["primary-color-deprecated-t-20"]=r(i,function(u){return u.tint(20)}),n["primary-color-deprecated-t-50"]=r(i,function(u){return u.tint(50)}),n["primary-color-deprecated-f-12"]=r(i,function(u){return u.setAlpha(u.getAlpha()*.12)});var l=new Cu(o[0]);n["primary-color-active-deprecated-f-30"]=r(l,function(u){return u.setAlpha(u.getAlpha()*.3)}),n["primary-color-active-deprecated-d-02"]=r(l,function(u){return u.darken(2)})}e.successColor&&a(e.successColor,"success"),e.warningColor&&a(e.warningColor,"warning"),e.errorColor&&a(e.errorColor,"error"),e.infoColor&&a(e.infoColor,"info");var s=Object.keys(n).map(function(u){return"--".concat(t,"-").concat(u,": ").concat(n[u],";")});$o()?uI(` + :root { + `.concat(s.join(` +`),` + } + `),"".concat(cI,"-dynamic-theme")):On(!1,"ConfigProvider","SSR do not support dynamic theme with css variables.")}var iw=Symbol("GlobalFormContextKey"),dI=function(e){ct(iw,e)},e9=function(){return Xe(iw,{validateMessages:K(function(){})})},vI=function(){return{getTargetContainer:{type:Function},getPopupContainer:{type:Function},prefixCls:String,getPrefixCls:{type:Function},renderEmpty:{type:Function},transformCellText:{type:Function},csp:{type:Object,default:void 0},input:{type:Object},autoInsertSpaceInButton:{type:Boolean,default:void 0},locale:{type:Object,default:void 0},pageHeader:{type:Object},componentSize:{type:String},direction:{type:String},space:{type:Object},virtual:{type:Boolean,default:void 0},dropdownMatchSelectWidth:{type:[Number,Boolean],default:!0},form:{type:Object,default:void 0},notUpdateGlobalConfig:Boolean}},pI="ant";function qa(){return nn.prefixCls||pI}var Ac=rt({}),ow=rt({}),nn=rt({});st(function(){Nt(nn,Ac,ow),nn.prefixCls=qa(),nn.getPrefixCls=function(t,e){return e||(t?"".concat(nn.prefixCls,"-").concat(t):nn.prefixCls)},nn.getRootPrefixCls=function(t,e){return t||(nn.prefixCls?nn.prefixCls:e&&e.includes("-")?e.replace(/^(.*)-[^-]*$/,"$1"):qa())}});var Pu,hI=function(e){Pu&&Pu(),Pu=st(function(){Nt(ow,rt(e)),Nt(nn,rt(e))}),e.theme&&fI(qa(),e.theme)},mI=function(){return{getPrefixCls:function(n,r){return r||(n?"".concat(qa(),"-").concat(n):qa())},getRootPrefixCls:function(n,r){return n||(nn.prefixCls?nn.prefixCls:r&&r.includes("-")?r.replace(/^(.*)-[^-]*$/,"$1"):qa())}}},Ya=fe({compatConfig:{MODE:3},name:"AConfigProvider",inheritAttrs:!1,props:vI(),setup:function(e,n){var r=n.slots,a=function(v,p){var g=e.prefixCls,c=g===void 0?"ant":g;return p||(v?"".concat(c,"-").concat(v):c)},i=function(v){var p=e.renderEmpty||r.renderEmpty||A0;return p(v)},o=function(v,p){var g=e.prefixCls;if(p)return p;var c=g||a("");return v?"".concat(c,"-").concat(v):c},l=rt(T(T({},e),{},{getPrefixCls:o,renderEmpty:i}));Object.keys(e).forEach(function(f){pe(function(){return e[f]},function(){l[f]=e[f]})}),e.notUpdateGlobalConfig||(Nt(Ac,l),pe(l,function(){Nt(Ac,l)}));var s=K(function(){var f={};if(e.locale){var v,p;f=((v=e.locale.Form)===null||v===void 0?void 0:v.defaultValidateMessages)||((p=ho.Form)===null||p===void 0?void 0:p.defaultValidateMessages)||{}}return e.form&&e.form.validateMessages&&(f=T(T({},f),e.form.validateMessages)),f});dI({validateMessages:s}),ct("configProvider",l);var u=function(v){var p;return x(pO,{locale:e.locale||v,ANT_MARK__:wc},{default:function(){return[(p=r.default)===null||p===void 0?void 0:p.call(r)]}})};return st(function(){e.direction&&(ba.config({rtl:e.direction==="rtl"}),oI.config({rtl:e.direction==="rtl"}))}),function(){return x(m0,{children:function(v,p,g){return u(g)}},null)}}}),gI=rt({getPrefixCls:function(e,n){return n||(e?"ant-".concat(e):"ant")},renderEmpty:A0,direction:"ltr"});Ya.config=hI;Ya.install=function(t){t.component(Ya.name,Ya)};const Ze=function(t,e){var n=Xe("configProvider",gI),r=K(function(){return n.getPrefixCls(t,e.prefixCls)}),a=K(function(){var y;return(y=e.direction)!==null&&y!==void 0?y:n.direction}),i=K(function(){return n.getPrefixCls()}),o=K(function(){return n.autoInsertSpaceInButton}),l=K(function(){return n.renderEmpty}),s=K(function(){return n.space}),u=K(function(){return n.pageHeader}),f=K(function(){return n.form}),v=K(function(){return e.getTargetContainer||n.getTargetContainer}),p=K(function(){return e.getPopupContainer||n.getPopupContainer}),g=K(function(){var y;return(y=e.dropdownMatchSelectWidth)!==null&&y!==void 0?y:n.dropdownMatchSelectWidth}),c=K(function(){return(e.virtual===void 0?n.virtual!==!1:e.virtual!==!1)&&g.value!==!1}),d=K(function(){return e.size||n.componentSize}),m=K(function(){var y;return e.autocomplete||((y=n.input)===null||y===void 0?void 0:y.autocomplete)}),h=K(function(){return n.csp});return{configProvider:n,prefixCls:r,direction:a,size:d,getTargetContainer:v,getPopupContainer:p,space:s,pageHeader:u,form:f,autoInsertSpaceInButton:o,renderEmpty:l,virtual:c,dropdownMatchSelectWidth:g,rootPrefixCls:i,getPrefixCls:n.getPrefixCls,autocomplete:m,csp:h}};function xt(t,e){for(var n=Nt({},t),r=0;r1&&arguments[1]!==void 0?arguments[1]:{},n=e.fieldNames,r=e.childrenAsData,a=[],i=lw(n,!1),o=i.label,l=i.value,s=i.options;function u(f,v){f.forEach(function(p){var g=p[o];if(v||!(s in p)){var c=p[l];a.push({key:uh(p,a.length),groupOption:v,data:p,label:g,value:c})}else{var d=g;d===void 0&&r&&(d=p.label),a.push({key:uh(p,a.length),group:!0,data:p,label:d}),u(p[s],!0)}})}return u(t,!1),a}function Mc(t){var e=T({},t);return"props"in e||Object.defineProperty(e,"props",{get:function(){return e}}),e}function wI(t,e){if(!e||!e.length)return null;var n=!1;function r(i,o){var l=yI(o),s=l[0],u=l.slice(1);if(!s)return[i];var f=i.split(s);return n=n||f.length>1,f.reduce(function(v,p){return[].concat(He(v),He(r(p,u)))},[]).filter(function(v){return v})}var a=r(t,e);return n?a:null}function fa(t,e){return t?t.contains(e):!1}var sw=["moz","ms","webkit"];function CI(){var t=0;return function(e){var n=new Date().getTime(),r=Math.max(0,16-(n-t)),a=window.setTimeout(function(){e(n+r)},r);return t=n+r,a}}function _I(){if(typeof window>"u")return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var t=sw.filter(function(e){return"".concat(e,"RequestAnimationFrame")in window})[0];return t?window["".concat(t,"RequestAnimationFrame")]:CI()}function SI(t){if(typeof window>"u")return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(t);var e=sw.filter(function(n){return"".concat(n,"CancelAnimationFrame")in window||"".concat(n,"CancelRequestAnimationFrame")in window})[0];return e?(window["".concat(e,"CancelAnimationFrame")]||window["".concat(e,"CancelRequestAnimationFrame")]).call(this,t):clearTimeout(t)}var ch=_I(),xI=function(e){return SI(e.id)},PI=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=Date.now();function a(){Date.now()-r>=n?e.call():i.id=ch(a)}var i={id:ch(a)};return i},md={visible:Boolean,prefixCls:String,zIndex:Number,destroyPopupOnHide:Boolean,forceRender:Boolean,animation:[String,Object],transitionName:String,stretch:{type:String},align:{type:Object},point:{type:Object},getRootDomNode:{type:Function},getClassNameFromAlign:{type:Function},onMouseenter:{type:Function},onMouseleave:{type:Function},onMousedown:{type:Function},onTouchstart:{type:Function}},EI=T(T({},md),{},{mobile:{type:Object}}),OI=T(T({},md),{},{mask:Boolean,mobile:{type:Object},maskAnimation:String,maskTransitionName:String});function uw(t){var e=t.prefixCls,n=t.animation,r=t.transitionName;return n?{name:"".concat(e,"-").concat(n)}:r?{name:r}:{}}function cw(t){var e=t.prefixCls,n=t.visible,r=t.zIndex,a=t.mask,i=t.maskAnimation,o=t.maskTransitionName;if(!a)return null;var l={};return(o||i)&&(l=uw({prefixCls:e,transitionName:o,animation:i})),x(lr,T({appear:!0},l),{default:function(){return[or(x("div",{style:{zIndex:r},class:"".concat(e,"-mask")},null),[[wx("if"),n]])]}})}cw.displayName="Mask";const TI=fe({compatConfig:{MODE:3},name:"MobilePopupInner",inheritAttrs:!1,props:EI,emits:["mouseenter","mouseleave","mousedown","touchstart","align"],setup:function(e,n){var r=n.expose,a=n.slots,i=W();return r({forceAlign:function(){},getElement:function(){return i.value}}),function(){var o,l=e.zIndex,s=e.visible,u=e.prefixCls,f=e.mobile,v=f===void 0?{}:f,p=v.popupClassName,g=v.popupStyle,c=v.popupMotion,d=c===void 0?{}:c,m=v.popupRender,h=T({zIndex:l},g),y=pn((o=a.default)===null||o===void 0?void 0:o.call(a));y.length>1&&(y=x("div",{class:"".concat(u,"-content")},[y])),m&&(y=m(y));var b=ge(u,p);return x(lr,T({ref:i},d),{default:function(){return[s?x("div",{class:b,style:h},[y]):null]}})}}});var fh=["measure","align",null,"motion"];const II=function(t,e){var n=W(null),r=W(),a=W(!1);function i(s){a.value||(n.value=s)}function o(){Le.cancel(r.value)}function l(s){o(),r.value=Le(function(){var u=n.value;switch(n.value){case"align":u="motion";break;case"motion":u="stable";break}i(u),s==null||s()})}return pe(t,function(){i("measure")},{immediate:!0,flush:"post"}),Re(function(){pe(n,function(){switch(n.value){case"measure":e();break}n.value&&(r.value=Le(NT(nh.mark(function s(){var u,f;return nh.wrap(function(p){for(;;)switch(p.prev=p.next){case 0:u=fh.indexOf(n.value),f=fh[u+1],f&&u!==-1&&i(f);case 3:case"end":return p.stop()}},s)}))))},{immediate:!0,flush:"post"})}),Qe(function(){a.value=!0,o()}),[n,l]},AI=function(t){var e=W({width:0,height:0});function n(a){e.value={width:a.offsetWidth,height:a.offsetHeight}}var r=K(function(){var a={};if(t.value){var i=e.value,o=i.width,l=i.height;t.value.indexOf("height")!==-1&&l?a.height="".concat(l,"px"):t.value.indexOf("minHeight")!==-1&&l&&(a.minHeight="".concat(l,"px")),t.value.indexOf("width")!==-1&&o?a.width="".concat(o,"px"):t.value.indexOf("minWidth")!==-1&&o&&(a.minWidth="".concat(o,"px"))}return a});return[r,n]};function dh(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function vh(t){for(var e=1;e=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function ZI(t,e,n,r){var a=Ae.clone(t),i={width:e.width,height:e.height};return r.adjustX&&a.left=n.left&&a.left+i.width>n.right&&(i.width-=a.left+i.width-n.right),r.adjustX&&a.left+i.width>n.right&&(a.left=Math.max(n.right-i.width,n.left)),r.adjustY&&a.top=n.top&&a.top+i.height>n.bottom&&(i.height-=a.top+i.height-n.bottom),r.adjustY&&a.top+i.height>n.bottom&&(a.top=Math.max(n.bottom-i.height,n.top)),Ae.mix(a,i)}function wd(t){var e,n,r;if(!Ae.isWindow(t)&&t.nodeType!==9)e=Ae.offset(t),n=Ae.outerWidth(t),r=Ae.outerHeight(t);else{var a=Ae.getWindow(t);e={left:Ae.getWindowScrollLeft(a),top:Ae.getWindowScrollTop(a)},n=Ae.viewportWidth(a),r=Ae.viewportHeight(a)}return e.width=n,e.height=r,e}function Ch(t,e){var n=e.charAt(0),r=e.charAt(1),a=t.width,i=t.height,o=t.left,l=t.top;return n==="c"?l+=i/2:n==="b"&&(l+=i),r==="c"?o+=a/2:r==="r"&&(o+=a),{left:o,top:l}}function il(t,e,n,r,a){var i=Ch(e,n[1]),o=Ch(t,n[0]),l=[o.left-i.left,o.top-i.top];return{left:Math.round(t.left-l[0]+r[0]-a[0]),top:Math.round(t.top-l[1]+r[1]-a[1])}}function _h(t,e,n){return t.leftn.right}function Sh(t,e,n){return t.topn.bottom}function eA(t,e,n){return t.left>n.right||t.left+e.widthn.bottom||t.top+e.height=n.right||r.top>=n.bottom}function Cd(t,e,n){var r=n.target||e,a=wd(r),i=!nA(r,n.overflow&&n.overflow.alwaysByViewport);return yw(t,a,n,i)}Cd.__getOffsetParent=Rc;Cd.__getVisibleRectForElement=bd;function rA(t,e,n){var r,a,i=Ae.getDocument(t),o=i.defaultView||i.parentWindow,l=Ae.getWindowScrollLeft(o),s=Ae.getWindowScrollTop(o),u=Ae.viewportWidth(o),f=Ae.viewportHeight(o);"pageX"in e?r=e.pageX:r=l+e.clientX,"pageY"in e?a=e.pageY:a=s+e.clientY;var v={left:r,top:a,width:0,height:0},p=r>=0&&r<=l+u&&a>=0&&a<=s+f,g=[n.points[0],"cc"];return yw(t,v,vh(vh({},n),{},{points:g}),p)}function yt(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=t;if(Array.isArray(t)&&(a=mi(t)[0]),!a)return null;var i=jn(a,e,r);return i.props=n?T(T({},i.props),e):i.props,ks(ze(i.props.class)!=="object","class must be string"),i}const aA=function(t){if(!t)return!1;if(t.offsetParent)return!0;if(t.getBBox){var e=t.getBBox();if(e.width||e.height)return!0}if(t.getBoundingClientRect){var n=t.getBoundingClientRect();if(n.width||n.height)return!0}return!1};function iA(t,e){return t===e?!0:!t||!e?!1:"pageX"in e&&"pageY"in e?t.pageX===e.pageX&&t.pageY===e.pageY:"clientX"in e&&"clientY"in e?t.clientX===e.clientX&&t.clientY===e.clientY:!1}function oA(t,e){t!==document.activeElement&&fa(e,t)&&typeof t.focus=="function"&&t.focus()}function Eh(t,e){var n=null,r=null;function a(o){var l=_e(o,1),s=l[0].target;if(document.documentElement.contains(s)){var u=s.getBoundingClientRect(),f=u.width,v=u.height,p=Math.floor(f),g=Math.floor(v);(n!==p||r!==g)&&Promise.resolve().then(function(){e({width:p,height:g})}),n=p,r=g}}var i=new Zb(a);return t&&i.observe(t),function(){i.disconnect()}}const lA=function(t,e){var n=!1,r=null;function a(){clearTimeout(r)}function i(o){if(!n||o===!0){if(t()===!1)return;n=!0,a(),r=setTimeout(function(){n=!1},e.value)}else a(),r=setTimeout(function(){n=!1,i()},e.value)}return[i,function(){n=!1,a()}]};function sA(){this.__data__=[],this.size=0}function _d(t,e){return t===e||t!==t&&e!==e}function Rs(t,e){for(var n=t.length;n--;)if(_d(t[n][0],e))return n;return-1}var uA=Array.prototype,cA=uA.splice;function fA(t){var e=this.__data__,n=Rs(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():cA.call(e,n,1),--this.size,!0}function dA(t){var e=this.__data__,n=Rs(e,t);return n<0?void 0:e[n][1]}function vA(t){return Rs(this.__data__,t)>-1}function pA(t,e){var n=this.__data__,r=Rs(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function Pr(t){var e=-1,n=t==null?0:t.length;for(this.clear();++el))return!1;var u=i.get(t),f=i.get(e);if(u&&f)return u==e&&f==t;var v=-1,p=!0,g=n&sM?new _o:void 0;for(i.set(t,e),i.set(e,t);++v-1&&t%1==0&&t-1&&t%1==0&&t<=zM}var WM="[object Arguments]",VM="[object Array]",HM="[object Boolean]",UM="[object Date]",KM="[object Error]",GM="[object Function]",qM="[object Map]",YM="[object Number]",XM="[object Object]",JM="[object RegExp]",QM="[object Set]",ZM="[object String]",e2="[object WeakMap]",t2="[object ArrayBuffer]",n2="[object DataView]",r2="[object Float32Array]",a2="[object Float64Array]",i2="[object Int8Array]",o2="[object Int16Array]",l2="[object Int32Array]",s2="[object Uint8Array]",u2="[object Uint8ClampedArray]",c2="[object Uint16Array]",f2="[object Uint32Array]",at={};at[r2]=at[a2]=at[i2]=at[o2]=at[l2]=at[s2]=at[u2]=at[c2]=at[f2]=!0;at[WM]=at[VM]=at[t2]=at[HM]=at[n2]=at[UM]=at[KM]=at[GM]=at[qM]=at[YM]=at[XM]=at[JM]=at[QM]=at[ZM]=at[e2]=!1;function d2(t){return rr(t)&&Td(t.length)&&!!at[Yr(t)]}function Id(t){return function(e){return t(e)}}var Ew=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ji=Ew&&typeof module=="object"&&module&&!module.nodeType&&module,v2=Ji&&Ji.exports===Ew,ku=v2&&r0.process,p2=function(){try{var t=Ji&&Ji.require&&Ji.require("util").types;return t||ku&&ku.binding&&ku.binding("util")}catch{}}();const oi=p2;var Nh=oi&&oi.isTypedArray,h2=Nh?Id(Nh):d2;const Ow=h2;var m2=Object.prototype,g2=m2.hasOwnProperty;function Tw(t,e){var n=Wn(t),r=!n&&Ed(t),a=!n&&!r&&es(t),i=!n&&!r&&!a&&Ow(t),o=n||r||a||i,l=o?AM(t.length,String):[],s=l.length;for(var u in t)(e||g2.call(t,u))&&!(o&&(u=="length"||a&&(u=="offset"||u=="parent")||i&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||Od(u,s)))&&l.push(u);return l}var y2=Object.prototype;function Ad(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||y2;return t===n}var b2=i0(Object.keys,Object);const w2=b2;var C2=Object.prototype,_2=C2.hasOwnProperty;function S2(t){if(!Ad(t))return w2(t);var e=[];for(var n in Object(t))_2.call(t,n)&&n!="constructor"&&e.push(n);return e}function Iw(t){return t!=null&&Td(t.length)&&!bw(t)}function Ds(t){return Iw(t)?Tw(t):S2(t)}function Lc(t){return _w(t,Ds,Pd)}var x2=1,P2=Object.prototype,E2=P2.hasOwnProperty;function O2(t,e,n,r,a,i){var o=n&x2,l=Lc(t),s=l.length,u=Lc(e),f=u.length;if(s!=f&&!o)return!1;for(var v=s;v--;){var p=l[v];if(!(o?p in e:E2.call(e,p)))return!1}var g=i.get(t),c=i.get(e);if(g&&c)return g==e&&c==t;var d=!0;i.set(t,e),i.set(e,t);for(var m=o;++v1&&(Y=x("div",{class:"".concat(z,"-content")},[Y]));var G=ge(z,a.class,s.value),ne=c.value||!e.visible,oe=ne?Ns(I.value.name,I.value):{};return x(lr,T(T({ref:l},oe),{},{onBeforeEnter:P}),{default:function(){return!$||e.visible?or(x(V2,{target:C(),key:"popup",ref:o,monitorWindowResize:!0,disabled:k.value,align:j,onAlign:E},{default:function(){return x("div",T(T({class:G,onMouseenter:M,onMouseleave:A,onMousedown:Ln(q,["capture"])},te({},Gt?"onTouchstartPassive":"onTouchstart",Ln(D,["capture"]))),{},{style:Z}),[Y])}}),[[Is,c.value]]):null}})}}}),U2=fe({compatConfig:{MODE:3},name:"Popup",inheritAttrs:!1,props:OI,setup:function(e,n){var r=n.attrs,a=n.slots,i=n.expose,o=W(!1),l=W(!1),s=W();return pe([function(){return e.visible},function(){return e.mobile}],function(){o.value=e.visible,e.visible&&e.mobile&&(l.value=!0)},{immediate:!0,flush:"post"}),i({forceAlign:function(){var f;(f=s.value)===null||f===void 0||f.forceAlign()},getElement:function(){var f;return(f=s.value)===null||f===void 0?void 0:f.getElement()}}),function(){var u=T(T(T({},e),r),{},{visible:o.value}),f=l.value?x(TI,T(T({},u),{},{mobile:e.mobile,ref:s}),{default:a.default}):x(H2,T(T({},u),{},{ref:s}),{default:a.default});return x("div",null,[x(cw,u,null),f])}}});function K2(t,e,n){return n?t[0]===e[0]:t[0]===e[0]&&t[1]===e[1]}function Hh(t,e,n){var r=t[e]||{};return T(T({},r),n)}function G2(t,e,n,r){for(var a=n.points,i=Object.keys(t),o=0;o0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=typeof e=="function"?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var a=this.getDerivedStateFromProps(RE(this),T(T({},this.$data),r));if(a===null)return;r=T(T({},r),a||{})}Nt(this.$data,r),this._.isMounted&&this.$forceUpdate(),Ke(function(){n&&n()})},__emit:function(){var e=[].slice.call(arguments,0),n=e[0];n="on".concat(n[0].toUpperCase()).concat(n.substring(1));var r=this.$props[n]||this.$attrs[n];if(e.length&&r)if(Array.isArray(r))for(var a=0,i=r.length;a1&&arguments[1]!==void 0?arguments[1]:{inTriggerContext:!0};ct(Mw,{inTriggerContext:n.inTriggerContext,shouldRender:K(function(){var r=e||{},a=r.sPopupVisible,i=r.popupRef,o=r.forceRender,l=r.autoDestroy,s=!1;return(a||i||o)&&(s=!0),!a&&l&&(s=!1),s})})},X2=function(){Md({},{inTriggerContext:!1});var e=Xe(Mw,{shouldRender:K(function(){return!1}),inTriggerContext:!1});return{shouldRender:K(function(){return e.shouldRender.value||e.inTriggerContext===!1})}};const jc=fe({compatConfig:{MODE:3},name:"Portal",inheritAttrs:!1,props:{getContainer:J.func.isRequired,didUpdate:Function},setup:function(e,n){var r=n.slots,a=!0,i,o=X2(),l=o.shouldRender;Bf(function(){a=!1,l.value&&(i=e.getContainer())});var s=pe(l,function(){l.value&&!i&&(i=e.getContainer()),i&&s()});return qr(function(){Ke(function(){if(l.value){var u;(u=e.didUpdate)===null||u===void 0||u.call(e,e)}})}),Qe(function(){i&&i.parentNode&&i.parentNode.removeChild(i)}),function(){if(!l.value)return null;if(a){var u;return(u=r.default)===null||u===void 0?void 0:u.call(r)}return i?x(Uf,{to:i},r):null}}});function Uh(){}function J2(){return""}function Q2(t){return t?t.ownerDocument:window.document}var Z2=["onClick","onMousedown","onTouchstart","onMouseenter","onMouseleave","onFocus","onBlur","onContextmenu"];const Bs=fe({compatConfig:{MODE:3},name:"Trigger",mixins:[Aw],inheritAttrs:!1,props:{action:J.oneOfType([J.string,J.arrayOf(J.string)]).def([]),showAction:J.any.def([]),hideAction:J.any.def([]),getPopupClassNameFromAlign:J.any.def(J2),onPopupVisibleChange:Function,afterPopupVisibleChange:J.func.def(Uh),popup:J.any,popupStyle:{type:Object,default:void 0},prefixCls:J.string.def("rc-trigger-popup"),popupClassName:J.string.def(""),popupPlacement:String,builtinPlacements:J.object,popupTransitionName:String,popupAnimation:J.any,mouseEnterDelay:J.number.def(0),mouseLeaveDelay:J.number.def(.1),zIndex:Number,focusDelay:J.number.def(0),blurDelay:J.number.def(.15),getPopupContainer:Function,getDocument:J.func.def(Q2),forceRender:{type:Boolean,default:void 0},destroyPopupOnHide:{type:Boolean,default:!1},mask:{type:Boolean,default:!1},maskClosable:{type:Boolean,default:!0},popupAlign:J.object.def(function(){return{}}),popupVisible:{type:Boolean,default:void 0},defaultPopupVisible:{type:Boolean,default:!1},maskTransitionName:String,maskAnimation:String,stretch:String,alignPoint:{type:Boolean,default:void 0},autoDestroy:{type:Boolean,default:!1},mobile:Object,getTriggerDOMNode:Function,tryPopPortal:Boolean},setup:function(e){var n=K(function(){var s=e.popupPlacement,u=e.popupAlign,f=e.builtinPlacements;return s&&f?Hh(f,s,u):u}),r=Y2(e.tryPopPortal),a=r.setPortal,i=r.popPortal,o=W(null),l=function(u){o.value=u};return{popPortal:i,setPortal:a,vcTriggerContext:Xe("vcTriggerContext",{}),popupRef:o,setPopupRef:l,triggerRef:W(null),align:n,focusTime:null,clickOutsideHandler:null,contextmenuOutsideHandler1:null,contextmenuOutsideHandler2:null,touchOutsideHandler:null,attachId:null,delayTimer:null,hasPopupMouseDown:!1,preClickTime:null,preTouchTime:null,mouseDownTimeout:null,childOriginEvents:{}}},data:function(){var e=this,n,r=this.$props,a;return this.popupVisible!==void 0?a=!!r.popupVisible:a=!!r.defaultPopupVisible,Z2.forEach(function(i){e["fire".concat(i)]=function(o){e.fireEvents(i,o)}}),(n=this.setPortal)===null||n===void 0||n.call(this,x(jc,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent})),{prevPopupVisible:a,sPopupVisible:a,point:null}},watch:{popupVisible:function(e){e!==void 0&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},created:function(){ct("vcTriggerContext",{onPopupMouseDown:this.onPopupMouseDown}),Md(this)},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},beforeUnmount:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),Le.cancel(this.attachId)},methods:{updatedCal:function(){var e=this.$props,n=this.$data;if(n.sPopupVisible){var r;!this.clickOutsideHandler&&(this.isClickToHide()||this.isContextmenuToShow())&&(r=e.getDocument(this.getRootDomNode()),this.clickOutsideHandler=Sn(r,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(r=r||e.getDocument(this.getRootDomNode()),this.touchOutsideHandler=Sn(r,"touchstart",this.onDocumentClick,Gt?{passive:!1}:!1)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(r=r||e.getDocument(this.getRootDomNode()),this.contextmenuOutsideHandler1=Sn(r,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=Sn(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var n=this.$props.mouseEnterDelay;this.fireEvents("onMouseenter",e),this.delaySetPopupVisible(!0,n,n?null:e)},onMouseMove:function(e){this.fireEvents("onMousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("onMouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){var n;e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&fa((n=this.popupRef)===null||n===void 0?void 0:n.getElement(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("onFocus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("onMousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("onTouchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){fa(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("onBlur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("onContextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("onClick",e),this.focusTime){var n;if(this.preClickTime&&this.preTouchTime?n=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?n=this.preClickTime:this.preTouchTime&&(n=this.preTouchTime),Math.abs(n-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var r=!this.$data.sPopupVisible;(this.isClickToHide()&&!r||r&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,n=this.vcTriggerContext,r=n===void 0?{}:n;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),r.onPopupMouseDown&&r.onPopupMouseDown.apply(r,arguments)},onDocumentClick:function(e){if(!(this.$props.mask&&!this.$props.maskClosable)){var n=e.target,r=this.getRootDomNode(),a=this.getPopupDomNode();(!fa(r,n)||this.isContextMenuOnly())&&!fa(a,n)&&!this.hasPopupMouseDown&&this.delaySetPopupVisible(!1,.1)}},getPopupDomNode:function(){var e;return((e=this.popupRef)===null||e===void 0?void 0:e.getElement())||null},getRootDomNode:function(){var e=this.$props.getTriggerDOMNode;if(e){var n=ha(this.triggerRef);return ha(e(n))}try{var r=ha(this.triggerRef);if(r)return r}catch{}return ha(this)},handleGetPopupClassFromAlign:function(e){var n=[],r=this.$props,a=r.popupPlacement,i=r.builtinPlacements,o=r.prefixCls,l=r.alignPoint,s=r.getPopupClassNameFromAlign;return a&&i&&n.push(G2(i,o,e,l)),s&&n.push(s(e)),n.join(" ")},getPopupAlign:function(){var e=this.$props,n=e.popupPlacement,r=e.popupAlign,a=e.builtinPlacements;return n&&a?Hh(a,n,r):r},getComponent:function(){var e=this,n={};this.isMouseEnterToShow()&&(n.onMouseenter=this.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.onMouseleave=this.onPopupMouseleave),n.onMousedown=this.onPopupMouseDown,n[Gt?"onTouchstartPassive":"onTouchstart"]=this.onPopupMouseDown;var r=this.handleGetPopupClassFromAlign,a=this.getRootDomNode,i=this.getContainer,o=this.$attrs,l=this.$props,s=l.prefixCls,u=l.destroyPopupOnHide,f=l.popupClassName,v=l.popupAnimation,p=l.popupTransitionName,g=l.popupStyle,c=l.mask,d=l.maskAnimation,m=l.maskTransitionName,h=l.zIndex,y=l.stretch,b=l.alignPoint,w=l.mobile,C=l.forceRender,_=this.$data,E=_.sPopupVisible,I=_.point,P=T(T({prefixCls:s,destroyPopupOnHide:u,visible:E,point:b?I:null,align:this.align,animation:v,getClassNameFromAlign:r,stretch:y,getRootDomNode:a,mask:c,zIndex:h,transitionName:p,maskAnimation:d,maskTransitionName:m,getContainer:i,class:f,style:g,onAlign:o.onPopupAlign||Uh},n),{},{ref:this.setPopupRef,mobile:w,forceRender:C});return x(U2,P,{default:this.$slots.popup||function(){return s0(e,"popup")}})},attachParent:function(e){var n=this;Le.cancel(this.attachId);var r=this.$props,a=r.getPopupContainer,i=r.getDocument,o=this.getRootDomNode(),l;a?(o||a.length===0)&&(l=a(o)):l=i(this.getRootDomNode()).body,l?l.appendChild(e):this.attachId=Le(function(){n.attachParent(e)})},getContainer:function(){var e=this.$props,n=e.getDocument,r=n(this.getRootDomNode()).createElement("div");return r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",this.attachParent(r),r},setPopupVisible:function(e,n){var r=this.alignPoint,a=this.sPopupVisible,i=this.onPopupVisibleChange;this.clearDelayTimer(),a!==e&&(Fa(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:a}),i&&i(e)),r&&n&&e&&this.setPoint(n)},setPoint:function(e){var n=this.$props.alignPoint;!n||!e||this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},handlePortalUpdate:function(){this.prevPopupVisible!==this.sPopupVisible&&this.afterPopupVisibleChange(this.sPopupVisible)},delaySetPopupVisible:function(e,n,r){var a=this,i=n*1e3;if(this.clearDelayTimer(),i){var o=r?{pageX:r.pageX,pageY:r.pageY}:null;this.delayTimer=PI(function(){a.setPopupVisible(e,o),a.clearDelayTimer()},i)}else this.setPopupVisible(e,r)},clearDelayTimer:function(){this.delayTimer&&(xI(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var n=function(){},r=Pp(this);return this.childOriginEvents[e]&&r[e]?this["fire".concat(e)]:(n=this.childOriginEvents[e]||r[e]||n,n)},isClickToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isContextMenuOnly:function(){var e=this.$props.action;return e==="contextmenu"||e.length===1&&e[0]==="contextmenu"},isContextmenuToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("contextmenu")!==-1||r.indexOf("contextmenu")!==-1},isClickToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isMouseEnterToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("hover")!==-1||r.indexOf("mouseenter")!==-1},isMouseLeaveToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("hover")!==-1||r.indexOf("mouseleave")!==-1},isFocusToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("focus")!==-1||r.indexOf("focus")!==-1},isBlurToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("focus")!==-1||r.indexOf("blur")!==-1},forcePopupAlign:function(){if(this.$data.sPopupVisible){var e;(e=this.popupRef)===null||e===void 0||e.forceAlign()}},fireEvents:function(e,n){this.childOriginEvents[e]&&this.childOriginEvents[e](n);var r=this.$props[e]||this.$attrs[e];r&&r(n)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,n=this.$attrs,r=mi($E(this)),a=this.$props.alignPoint,i=r[0];this.childOriginEvents=Pp(i);var o={key:"trigger"};this.isContextmenuToShow()?o.onContextmenu=this.onContextmenu:o.onContextmenu=this.createTwoChains("onContextmenu"),this.isClickToHide()||this.isClickToShow()?(o.onClick=this.onClick,o.onMousedown=this.onMousedown,o[Gt?"onTouchstartPassive":"onTouchstart"]=this.onTouchstart):(o.onClick=this.createTwoChains("onClick"),o.onMousedown=this.createTwoChains("onMousedown"),o[Gt?"onTouchstartPassive":"onTouchstart"]=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(o.onMouseenter=this.onMouseenter,a&&(o.onMousemove=this.onMouseMove)):o.onMouseenter=this.createTwoChains("onMouseenter"),this.isMouseLeaveToHide()?o.onMouseleave=this.onMouseleave:o.onMouseleave=this.createTwoChains("onMouseleave"),this.isFocusToShow()||this.isBlurToHide()?(o.onFocus=this.onFocus,o.onBlur=this.onBlur):(o.onFocus=this.createTwoChains("onFocus"),o.onBlur=function(f){f&&(!f.relatedTarget||!fa(f.target,f.relatedTarget))&&e.createTwoChains("onBlur")(f)});var l=ge(i&&i.props&&i.props.class,n.class);l&&(o.class=l);var s=yt(i,T(T({},o),{},{ref:"triggerRef"}),!0,!0);if(this.popPortal)return s;var u=x(jc,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent});return x(De,null,[u,s])}});var ek=["empty"],tk=function(e){var n=e===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}}}},nk=fe({name:"SelectTrigger",inheritAttrs:!1,props:{dropdownAlign:Object,visible:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},dropdownClassName:String,dropdownStyle:J.object,placement:String,empty:{type:Boolean,default:void 0},prefixCls:String,popupClassName:String,animation:String,transitionName:String,getPopupContainer:Function,dropdownRender:Function,containerWidth:Number,dropdownMatchSelectWidth:J.oneOfType([Number,Boolean]).def(!0),popupElement:J.any,direction:String,getTriggerDOMNode:Function,onPopupVisibleChange:Function,onPopupMouseEnter:Function},setup:function(e,n){var r=n.slots,a=n.attrs,i=n.expose,o=K(function(){var s=e.dropdownMatchSelectWidth;return tk(s)}),l=W();return i({getPopupElement:function(){return l.value}}),function(){var s=T(T({},e),a),u=s.empty,f=u===void 0?!1:u,v=ut(s,ek),p=v.visible,g=v.dropdownAlign,c=v.prefixCls,d=v.popupElement,m=v.dropdownClassName,h=v.dropdownStyle,y=v.direction,b=y===void 0?"ltr":y,w=v.placement,C=v.dropdownMatchSelectWidth,_=v.containerWidth,E=v.dropdownRender,I=v.animation,P=v.transitionName,k=v.getPopupContainer,L=v.getTriggerDOMNode,F=v.onPopupVisibleChange,j=v.onPopupMouseEnter,z="".concat(c,"-dropdown"),$=d;E&&($=E({menuNode:d,props:e}));var M=I?"".concat(z,"-").concat(I):P,A=T({minWidth:"".concat(_,"px")},h);return typeof C=="number"?A.width="".concat(C,"px"):C&&(A.width="".concat(_,"px")),x(Bs,T(T({},e),{},{showAction:F?["click"]:[],hideAction:F?["click"]:[],popupPlacement:w||(b==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:o.value,prefixCls:z,popupTransitionName:M,popupAlign:g,popupVisible:p,getPopupContainer:k,popupClassName:ge(m,te({},"".concat(z,"-empty"),f)),popupStyle:A,getTriggerDOMNode:L,onPopupVisibleChange:F}),{default:r.default,popup:function(){return x("div",{ref:l,onMouseenter:j},[$])}})}}});const rk=nk;var Ee={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 n=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||n>=Ee.F1&&n<=Ee.F12)return!1;switch(n){case Ee.ALT:case Ee.CAPS_LOCK:case Ee.CONTEXT_MENU:case Ee.CTRL:case Ee.DOWN:case Ee.END:case Ee.ESC:case Ee.HOME:case Ee.INSERT:case Ee.LEFT:case Ee.MAC_FF_META:case Ee.META:case Ee.NUMLOCK:case Ee.NUM_CENTER:case Ee.PAGE_DOWN:case Ee.PAGE_UP:case Ee.PAUSE:case Ee.PRINT_SCREEN:case Ee.RIGHT:case Ee.SHIFT:case Ee.UP:case Ee.WIN_KEY:case Ee.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=Ee.ZERO&&e<=Ee.NINE||e>=Ee.NUM_ZERO&&e<=Ee.NUM_MULTIPLY||e>=Ee.A&&e<=Ee.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&e===0)return!0;switch(e){case Ee.SPACE:case Ee.QUESTION_MARK:case Ee.NUM_PLUS:case Ee.NUM_MINUS:case Ee.NUM_PERIOD:case Ee.NUM_DIVISION:case Ee.SEMICOLON:case Ee.DASH:case Ee.EQUALS:case Ee.COMMA:case Ee.PERIOD:case Ee.SLASH:case Ee.APOSTROPHE:case Ee.SINGLE_QUOTE:case Ee.OPEN_SQUARE_BRACKET:case Ee.BACKSLASH:case Ee.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const Ce=Ee;var js=function(e,n){var r,a=n.slots,i=e.class,o=e.customizeIcon,l=e.customizeIconProps,s=e.onMousedown,u=e.onClick,f;return typeof o=="function"?f=o(l):f=o,x("span",{class:i,onMousedown:function(p){p.preventDefault(),s&&s(p)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:u,"aria-hidden":!0},[f!==void 0?f:x("span",{class:i.split(/\s+/).map(function(v){return"".concat(v,"-icon")})},[(r=a.default)===null||r===void 0?void 0:r.call(a)])])};js.inheritAttrs=!1;js.displayName="TransBtn";js.props={class:String,customizeIcon:J.any,customizeIconProps:J.any,onMousedown:Function,onClick:Function};const ts=js;function ak(t){t.target.composing=!0}function Kh(t){t.target.composing&&(t.target.composing=!1,ik(t.target,"input"))}function ik(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Nu(t,e,n,r){t.addEventListener(e,n,r)}var ok={created:function(e,n){(!n.modifiers||!n.modifiers.lazy)&&(Nu(e,"compositionstart",ak),Nu(e,"compositionend",Kh),Nu(e,"change",Kh))}};const Lo=ok;var lk={inputRef:J.any,prefixCls:String,id:String,inputElement:J.VueNode,disabled:{type:Boolean,default:void 0},autofocus:{type:Boolean,default:void 0},autocomplete:String,editable:{type:Boolean,default:void 0},activeDescendantId:String,value:String,open:{type:Boolean,default:void 0},tabindex:J.oneOfType([J.number,J.string]),attrs:J.object,onKeydown:{type:Function},onMousedown:{type:Function},onChange:{type:Function},onPaste:{type:Function},onCompositionstart:{type:Function},onCompositionend:{type:Function},onFocus:{type:Function},onBlur:{type:Function}},sk=fe({compatConfig:{MODE:3},name:"Input",inheritAttrs:!1,props:lk,setup:function(e){var n=null,r=Xe("VCSelectContainerEvent");return function(){var a,i,o=e.prefixCls,l=e.id,s=e.inputElement,u=e.disabled,f=e.tabindex,v=e.autofocus,p=e.autocomplete,g=e.editable,c=e.activeDescendantId,d=e.value,m=e.onKeydown,h=e.onMousedown,y=e.onChange,b=e.onPaste,w=e.onCompositionstart,C=e.onCompositionend,_=e.onFocus,E=e.onBlur,I=e.open,P=e.inputRef,k=e.attrs,L=s||or(x("input",null,null),[[Lo]]),F=L.props||{},j=F.onKeydown,z=F.onInput,$=F.onFocus,M=F.onBlur,A=F.onMousedown,N=F.onCompositionstart,D=F.onCompositionend,q=F.style;return L=yt(L,Nt(T(T(T({type:"search"},F),{},{id:l,ref:P,disabled:u,tabindex:f,autocomplete:p||"off",autofocus:v,class:ge("".concat(o,"-selection-search-input"),(a=L)===null||a===void 0||(i=a.props)===null||i===void 0?void 0:i.class),role:"combobox","aria-expanded":I,"aria-haspopup":"listbox","aria-owns":"".concat(l,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(l,"_list"),"aria-activedescendant":c},k),{},{value:g?d:"",readonly:!g,unselectable:g?null:"on",style:T(T({},q),{},{opacity:g?null:0}),onKeydown:function(Z){m(Z),j&&j(Z)},onMousedown:function(Z){h(Z),A&&A(Z)},onInput:function(Z){y(Z),z&&z(Z)},onCompositionstart:function(Z){w(Z),N&&N(Z)},onCompositionend:function(Z){C(Z),D&&D(Z)},onPaste:b,onFocus:function(){clearTimeout(n),$&&$(arguments.length<=0?void 0:arguments[0]),_&&_(arguments.length<=0?void 0:arguments[0]),r==null||r.focus(arguments.length<=0?void 0:arguments[0])},onBlur:function(){for(var Z=arguments.length,Y=new Array(Z),G=0;G